1.4.6 表空间
表空间(Tablespace)是Oracle数据库内部最高层次的逻辑存储结构,在逻辑上数据库数据是存储在表空间里,而物理上是存储在表空间对应的数据文件。一个Oracle数据库至少由两个表空间(SYSTEM和SYSAUX)组成,TEMP表空间是可选的。
在逻辑上,Oracle数据库是由一个或多个表空间组成的,表空间被划分为一个个独立的段,数据库中创建的所有对象都必须保存在指定的表空间中。
1.表空间分类
根据表空间存放的内容可将表空间分成用户定义表空间、SYSTEM表空间等。
(1)用户定义表空间
用户定义表空间是用于存储用户数据的普通表空间,它是根据实际应用由用户自己来建立的。
(2)SYSTEM表空间
Oracle数据库必须至少具有一个默认的SYSTEM表空间。在创建新数据库时,Oracle将自动创建SYSTEM表空间。在打开数据库时,SYSTEM表空间自动打开。
SYSTEM表空间中存储整个数据库的数据字典、所有PL/SQL程序的源代码和解析代码(如存储过程和存储函数、包、数据库触发器等)、数据库对象的定义(如视图、对象类型说明、同义词和序列的结构定义)和SYSTEM撤销段。
SYSTEM表空间对于Oracle数据库来说是至关重要的。一般在SYSTEM表空间中应该仅保存属于SYS模式的对象,即与Oracle自身相关的数据,而用户的对象和数据都应当保存在非SYSTEM表空间中。
(3)撤销表空间
撤销表空间是用来在自动撤销管理方式下存储撤销信息的专用表空间。在撤销表空间中只能建立撤销段(回滚段)。任何数据库用户(包括管理员)都不能在撤销表空间中创建数据库对象。如果需要也可以建立大文件撤销表空间。
如果使用手工撤销管理方式,则只需要使用回滚段而不需要使用撤销表空间。如果数据库使用撤销表空间,那么可以为数据库创建多个撤销表空间,但是每个实例同时最多只能使用一个撤销表空间。撤销表空间只能使用本地管理方式。
在使用DBCA创建数据库时,自动建立一个默认的撤销表空间UNDOTBS。
(4)临时表空间
Oracle运行过程中要使用临时空间来保存SQL语句(如排序)执行过程中产生的临时数据,包括中间排序结果、临时表、临时索引、临时LOB和临时B树。当SYSTEM表空间是本地管理方式时,就必须至少建立一个默认的临时表空间,因为本地管理方式的SYSTEM表空间不能存放临时数据。如果数据库的SYSTEM表空间是字典管理方式,那么SYSTEM表空间可以存储临时数据。
不能在临时表空间中建立永久对象,并且临时表空间中的数据在故障后不能恢复。
(5)SYSAUX表空间
SYSAUX表空间是从Oracle10g开始引进的表空间,它是SYSTEM表空间的辅助表空间,许多数据库组件(如Oracle Spatial、Oracle Streams、Oracle Data Mining和Oracle interMedia等)都使用SYSAUX表空间作为默认存储位置,因此建立数据库时总是创建SYSAUX表空间。
2.查询表空间信息
表空间信息存储在多个数据字典视图和动态性能视图中,主要有V$TABLESPACE、DBA_TABLESPACES、USER_TABLESPACES、DBA_SEGMENTS, USER_SEGMENTS、V$DATAFILE、V$TEMPFILE、DBA_DATA_FILES等。
(1)V$TABLESPACE动态性能视图
该动态性能视图从控制文件中读取表空间名称和编号信息。只有以SYSDBA或SYSOPER的身份连接数据库时才可以访问该动态性能视图。
(2)DBA_TABLESPACES视图
该视图它包含数据库中所有表空间的描述信息。只有管理员身份的用户才可以访问该数据字典视图。
(3)USER_TABLESPACES视图
当前用户有配额的所有表空间信息,其中的内容与DBA_TABLESPACES一样。