<!--[if !supportLists]-->(一)、<!--[endif]-->表空间和数据文件的关系
数据库、表空间和数据文件是紧密相关的,但它们之间又有着重要区别,关系如图2-1所示:
<!--[if !supportLists]-->? <!--[endif]-->Oracle 数据库由一个或多个称为表空间的逻辑存储单元组成,表空间作为一个整体存储数据库中的所有数据,并且一个表空间只能属于一个数据库。数据库的大小是该数据库中所表空间大小总和。
<!--[if !supportLists]-->? <!--[endif]-->从物理讲,Oracle 数据库内的每个表空间由一个或多数据文件组成,并且一个数据文件只能属于一个表空间。表空间大是所有数据文件大小的总和。这些数据文件与Oracle 运行所在的操作系统的文件有一样的物理结构。
<!--[if !supportLists]-->? <!--[endif]-->数据库的所有数据都存储在数据文件中,数据库的每个表空间都由这些数据文件组成。例如,最简单的Oracle 数据库只有一个表空间和一个数据文件。
查询表空间及数据文件的信息
1)以管理员身份登录
SQL> CONN /AS SYSDBA
2)查询数据文件
SQL> SELECT FILE_NAME,TABLESPACE_NAME FROM DBA_DATA_FILES;
FILE_NAME TABLESPACE_NAME
--------------------------------------------------------- -----------------------------
D:\ORACLE\ORADATA\DB01\SYSTEM01.DBF SYSTEM
D:\ORACLE\ORADATA\DB01\UNDOTBS01.DBF UNDOTBS1
D:\ORACLE\ORADATA\DB01\CWMLITE01.DBF CWMLITE
D:\ORACLE\ORADATA\DB01\DRSYS01.DBF DRSYS
D:\ORACLE\ORADATA\DB01\EXAMPLE01.DBF EXAMPLE
D:\ORACLE\ORADATA\DB01\INDX01.DBF INDX
D:\ORACLE\ORADATA\DB01\ODM01.DBF ODM
D:\ORACLE\ORADATA\DB01\TOOLS01.DBF TOOLS
D:\ORACLE\ORADATA\DB01\USERS01.DBF USERS
D:\ORACLE\ORADATA\DB01\XDB01.DBF XDB
已选择10行。
在查询结果中,FILE_NAME列为数据文件的位置和名称,TABLESPACE_NAME列为对应的表空间名称。
<!--[if !supportLists]-->(一)、<!--[endif]-->Oracle管理文件(OMF)
<!--[if !supportLists]-->1. <!--[endif]-->什么是OMF(Oracle-Managed Files)
如果使用OMF,则不需要直接管理构成Oracle 数据库的操作系统文件。
参数 | 说明 |
DB_CREATE_FILE_DEST | 定义数据文件和临时文件的默认文件系统目录的位置 |
DB_CREATE_ONLINE_LOG_DEST_n | 定义重做日志文件和控制文件的创建位置 |
DB_RECOVERY_FILE_DEST | 定义RMAN备份位置 |
SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST = '/u01/oradata';
SQL> CREATE TABLESPACE tbs_1;
可以根据数据库对象而不是文件名指定操作。对于以下数据库结构,可以按需要在数据库内部使用标准文件系统接口来创建和删除文件:
<!--[if !supportLists]-->l <!--[endif]-->表空间
<!--[if !supportLists]-->l <!--[endif]-->重做日志文件
<!--[if !supportLists]-->l <!--[endif]-->控制文件
<!--[if !supportLists]-->l <!--[endif]-->归档日志
<!--[if !supportLists]-->l <!--[endif]-->块更改跟踪文件
<!--[if !supportLists]-->l <!--[endif]-->闪回日志
<!--[if !supportLists]-->l <!--[endif]-->RMAN 备份
在数据库中可以混合包含Oracle管理文件和非管理文件。由其中任一个参数制定的文件系统目录必须已存在:数据库不会创建文件系统目录。该目录还必须拥有允许数据库在其
中创建文件的权限。
上面的示例显示设置DB_CREATE_FILE_DEST 后,可在CREATE TABLESPACE 语句中省略DATAFILE 子句。这样,会在DB_CREATE_FILE_DEST 指定的位置创建数据文件。
<!--[if !supportLists]-->2. <!--[endif]-->启用OMF
<!--EndFragment-->
<!--[if !supportLists]-->(一)、<!--[endif]-->数据字典管理和本地管理方式
在表空间中区是最小的空间分配单位,对表空间的管理是以区为单位进行的。根据管理方式的不同,表空间分为本地管理表空间和字典管理表空间:
<!--[if !supportLists]-->? <!--[endif]-->本地管理方式的表空间:在表空间内通过位图管理区。在本地管理的表空间中,每个数据文件内都维护一个位图,以了解该数据文件内块的空闲或使用状态。位图中的每个位对应于一个块或一组块。其特点是分配了的某个区或释放的某个区可被重新使用时,Oracle 服务器更改位图值以显示块的新状态。因为表空间的存储管理信息保存在表空间的数据文件的头部,而不是保存在表空间外部的数据字典中,所以被称为“本地管理方式”。从Oracle9i 开始,在本地管理已成为缺省设置。
<!--[if !supportLists]-->? <!--[endif]-->字典管理的表空间:由数据字典管理区。数据字典的信息存储在system表空间中,Oracle 服务器将在分配或回收区时更新数据字典中对应的表。字典管理的表空间内的段可具有自定义的存储设置,因此每个段都可以有不同的存储子句, 但是需要手动合并空闲区。这比本地管理的表空间更灵活,但效率要低得多。
由于本地管理表空间是采用位图对区进行管理的,相对于字典管理有如下优点:
<!--[if !supportLists]-->? <!--[endif]-->本地管理可以避免循环空间管理操作。在字典管理表空间上分配和释放区会导致访问回滚段和数据字典基表,而在本地管理表空间上的分配和释放区只需要修改其数据文件对应的位图值。
<!--[if !supportLists]-->? <!--[endif]-->由于本地管理的表空间在数据字典表中不记录空闲空间,从而减少了对数据字典的争用。
<!--[if !supportLists]-->? <!--[endif]-->区的本地管理可自动跟踪并合并邻近的空闲空间,因而无须合并空闲区,而字典管理表空间则可能需要手工合并空间碎片。
<!--[if !supportLists]-->? <!--[endif]-->本地管理的区大小可由系统自动确定。
<!--[if !supportLists]-->? <!--[endif]-->对区的位图进行更改不会生成UNDO信息,因为它们不更新数据字典中的表(表空间限额信息等特殊情况除外)。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29781254/viewspace-1744978/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29781254/viewspace-1744978/