watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=


Q          题目如下所示:

在Oracle中,什么是大文件表空间(Bigfile Tablespace)?


     
A          答案如下所示:          


Oracle表空间是逻辑结构的最高层次,而物理层面的Oracle数据库是通过一系列的文件构成。表空间与数据文件的关系是一对多的关系,一个表空间可以对应多个数据文件,一个数据文件则只能归属于一个表空间。从Oracle 10g开始推出了大文件表空间的概念,即表空间从Oracle 10g以后就分为两种类型,小文件表空间(Smallfile Tablespace)和大文件表空间(Bigfile Tablespace)。所谓大文件表空间最显著的特点就是一个表空间只能对应一个数据文件。大文件表空间虽只对应一个数据文件,但数据文件对应的最大体积大大增加,可以达到32TB。传统的小文件表空间中每个数据文件最大文件大小为32G,但每个小文件表空间理论上能够包括1024个数据文件,所以,小文件表空间的最大值为32TB大小。所以,理论上小文件表空间和大文件表空间总容量相同。

大文件表空间都是为超大型数据库设计的。如果一个超大型数据库具有上千个数据文件的话,更新数据文件头部信息的操作就会花费很长时间。如果使用了大文件表空间,就可以使用大数据文件来减少数据文件的数量,使更新数据文件头部信息的操作更快一些。

要想创建一个大文件表空间,可以在CREATE语句中使用BIGFILE关键字。例如:“CREATE BIGFILE TABLESPACE mybigtbs01 DATAFILE 'f:\bigtbs01.dbf' SIZE 20G;”。此处,通过“CREATE BIGFILE TABLESPACE”语句建立大文件表空间,需要注意两方面的问题,其一是大文件表空间必须使用本地区(LOCAL EXTENT)管理方式,不允许使用DMT(Dictionary Managed Tablespace)。另一方面是段SEGMENT空间使用AUTO自动方式,不要使用MANUAL。

SYSTEM和SYSAUX表空间总是被创建为小文件表空间。想要创建一个小文件表空间,可以在CREATE语句中使用SMALLFILE关键字或者不使用此类关键字。例如:“CREATE SMALLFILE TEMPORARY TABLESPACE lhrtbs01 TEMPFILE 'e:\tmptbs01_1.dbf' SIZE 4M UNIFORM SIZE 64K;”。

要想知道系统默认创建的是SMALLFILE还是BIGFILE的表空间,可以执行如下的查询:

SQL> SELECT PROPERTY_NAME,PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME LIKE '%TBS%';

    PROPERTY_NAME                  PROPERTY_VALUE

    ------------------------------ ---------------------------------------

    DEFAULT_TBS_TYPE               SMALLFILE

可以通过命令“ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE;”来修改系统默认的表空间类型。建议创建表空间时最好带上BIGFILE或SMALLFILE参数,以免参数设置导致创建了不合理的表空间。