Oracle表空间
表空间属性:
一个数据库可以包含多个表空间,一个表空间只能属于一个数据库;
一个表空间包含多个数据文件,一个数据文件只能属于一个表空间。
表这空间可以划分成更细的逻辑存储单元
Oracle 数据库的存储结构:
从逻辑的角度来看, 一个数据库( database )下面可以分多个表空间( tablespace );一个表空间下面又可以分多个段( segment ),一个数据表要占一个段( segment );一个索引也要占一个段( segment )。
一个段(segment)由多个区间(extent)组成,那么一个区间由一组连续的数据块(data block)组成。这连续的数据块是在逻辑上是连续的,有可能在物理磁盘上是分散。
那么从物理的角度上看,一个表空间由多个数据文件组成,数据文件是存在磁盘上的文件。这些文件是由 oracle 数据库操作系统的 block 组成的。
Segment (段):段是指占用数据文件空间的通称,或数据库对象使用的空间的集合;段可以有表段、索引段、回滚段、临时段和高速缓存段等。
Extent (区间):分配给对象(如表)的任何连续块叫区间;区间也叫扩展,因为当它用完已经分配的区间后,再有新的记录插入就必须在分配新的区间(即扩展一些块);一旦区间分配给某个对象(表、索引及簇),则该区间就不能再分配给其它的对象。
查看表空间:
SQL> select * from v$tablespace; TS# NAME INC BIG FLA ENC ---------- ------------------------------ --- --- --- --- 0 SYSTEM YES NO YES 1 SYSAUX YES NO YES 2 UNDOTBS1 YES NO YES 4 USERS YES NO YES 3 TEMP NO NO YES 6 EXAMPLE YES NO YES 7 ITPUX YES NO YES 7 rows selected.
查看每个表空间有哪些数据文件
SQL> select file_name,tablespace_name from dba_data_files; FILE_NAME TABLESPACE_NAME -------------------------------------------------- ------------------------------ /oracle/app/oracle/oradata/orcl/users01.dbf USERS /oracle/app/oracle/oradata/orcl/undotbs01.dbf UNDOTBS1 /oracle/app/oracle/oradata/orcl/sysaux01.dbf SYSAUX /oracle/app/oracle/oradata/orcl/system01.dbf SYSTEM /oracle/app/oracle/oradata/orcl/example01.dbf EXAMPLE /oracle/app/oracle/oradata/orcl/itpux.dbf ITPUX 6 rows selected.
创建一个表空间:
SQL> create tablespace itpux datafile '/oracle/app/oracle/oradata/orcl/itpux.dbf' size 20m;
表空间根据对区间(extents)的管理分为两种类型
字典管理表空间(Dictionary-managed tablespaces)
在表空间里,有的区间被占用了,有的没被占用,这些数据是放在数据字典里的。当你对这个表空间进行分配或释放的时候,数据文件里相关的表就会做修改。
本地管理表空间(locally managed tablespace)
本地管理表空间不是在数据词典里存储表空间的,由自由区管理的表空间。用位图来自由的管理区间。一个区间对一个位,如果这个位是 1 表示已经被占用,0 表示未被占用。词典管理空间表示“中央集权治”,本地管理表空间表示“省市自治区”,一个 databases 表示中国,tablespaces 表示一个省或直辖市。词典管理统一由中央调配。而本地管理表示有高度的自治权利,自已各种资源的分配不用上报中央。
本地管理优点
1. 本地化管理的表空间避免了递归的空间管理操作。而这种情况在数据字典管理的表空间是经常出现的,当表空间里的区的使用状况发生改变时,数据字典的表的信息发生改变,从而同时也使用了在系统表空间里的回滚段。
2. 本地化管理的表空间避免了在数据字典相应表里面写入空闲空间、已使用空间的信息,从而减少了数据字典表的竞争,提高了空间管理的并发性。
3. 区的本地化管理自动跟踪表空间里的空闲块,减少了手工合并自由空间的需要。
4. 表空间里的区的大小可以选择由 Oracle 系统来决定,或者由数据库管理员指定一个统一的大小,避免了字典表空间一直头疼的碎片问题。
5. 从由数据字典来管理空闲块改为由数据文件的头部记录来管理空闲块,这样避免产生回滚信息,不再使用系统表空间里的回滚段。因为由数据字典来管理的话,它会把相关信息记在数据字典的表里,从而产生回滚信息。
由于这种表空间的以上特性,所以它支持在一个表空间里边进行更多的并发操作,并减少了对数据字典的依赖。