Database 是由一个或多个被称为表空间(tablespace)的逻辑存储单位构成。表空间内的逻辑存储单位为段(segment),段又可以继续划分为数据扩展(extent)。而数据扩展是由一组连续的数据块(datablock)构成。
大文件表空间
在Oracle中用户可以创建大文件表空间(bigfile tablespace)。这样Oracle数据库使用的表空间(tablespace)可以由一个单一的大文件构成,而不是若干个小数据文件。这使Oracle可以发挥64位系统的能力,创建、管理超大的文件。在64位系统中,Oracle数据库的存储能力被扩展到了8 EB(1EB =1024PB,1PB = 1024TB,1TB=1024GB)。
当数据库文件由Oracle管理(Oracle-managed files),且使用大文件表空间(bigfile tablespace)时,数据文件对用户完全透明。换句话说,用户只须针对表空间(tablespace)执行管理操作,而无须关心处于底层的数据文件(datafile)。使用大文件表空间,使表空间成为磁盘空间管理,备份,和恢复等操作的主要对象。使用大文件表空间,并与由Oracle管理数据库文件(Oracle-managed files)技术以及自动存储管理(Automatic StorageManagement)技术相结合,就不再需要管理员手工创建新的数据文件(datafile)并维护众多数据库文件,因此简化了数据库文件管理工作。
数据库默认创建的是小文件表空间(smallfile tablespace),即Oracle中传统的表空间(tablespace)类型。数据库中 SYSTEM 和 SYSAUX 表空间在创建时总是使用传统类型只有本地管理的(locally managed),且段空间自动管理(automatic segmentspacemanagement)的表空间(tablespace)才能使用大文件表空间(bigfile
tablespace)。但是有两个例外:本地管理的撤销表空间(undo tablespace)和临时表空间(temporary tablespace),即使其段(segment)为手工管理(manually managed),也可以使用大文件表空间。一个Oracle数据库可以同时包含大文件/小文件表空间(bigfile/smallfiletablespace)。SQL语句执行时无需考虑表空间(tablespace)的类型,除非语句中显式地引用了数据文件(datafile)名。
管理员可以创建一组临时表空间(temporary tablespace),用户在需要时可以利用组内各个表空间(tablespace)提供的临时空间。管理员还可以指定表空间组(tablespace group)为数据库默认的临时表空间。当用户需要大量临时空间进行排序操作时,就可以利用大文件表空间及表空间组。
使用大文件表空间的优势
● 使用大文件表空间(bigfile tablespace)可以显著地增强Oracle数据库的存储能力。一个小文件表空间(smallfile tablespace)最多可以包含1024个数据文件(datafile),而一个大文件表空间中只包含一个文件,这个数据文件的最大容量是小数据文件的1024倍。这样看来,大文件表空间和小文件表空间的最大容量是相同的。但是由于每个数据库最多使用64K个数据文件,因此使用大文件表空间时数据库中表空间的极限个数是使用小文件表空间时的1024倍,使用大文件表空间时的总数据库容量比使用小文件表空间时高出三个数量级。换言之,当一个Oracle数据库使用大文件表空间,且使用最大的数据块容量时(32K),其总容量可以达到8EB。
● 在超大型数据库中使用大文件表空间减少了数据文件的数量,因此也简化了对数据文件的管理工作。由于数据文件的减少,SGA中关于数据文件的信息,以及控制文件(control file)的容量也得以减小。
● 由于数据文件对用户透明,由此简化了数据库管理工作。
使用大文件表空间时需要考虑的因素
● 大文件表空间(bigfile tablespace)应该和自动存储管理(AutomaticStorage Management)或其他逻辑卷管理工具(logical volume manager)配合使用,这些工具应该能够支持动态扩展逻辑卷,也能支持striping(数据跨磁盘分布)或RAID。
● 应该避免在不支持striping的系统上使用大文件表空间,因为这将不利于并行执行(parallel execution)及 RMAN 的并行备份(backup
parallelization)。
● 当表空间正在使用的磁盘组(disk group)可能没有足够的空间,且扩展表空间的唯一办法是向另一个磁盘组加入数据文件时,应避免使用
大文件表空间。
● 不建议在不支持大文件的平台上使用大文件表空间,这会限制表空间(tablespace)的容量。参考相关的操作系统文档了解其支持的最大文
件容量。
● 如果使用大文件表空间替代传统的表空间,数据库开启(open),checkpoints,以及 DBWR 进程的性能会得到提高。但是增大数据文件
(datafile)容量可能会增加备份与恢复的时间。
提示:
当用户在创建表空间(tablespace)时没有指定数据扩展
(extent)的管理方式,默认使用本地管理(locally managed)。
10g 新增的表空间类型:大文件 (Bigfile) 表空间。
大文件表空间从某种角度来说提高了 Oracle 在 VLDB 上的管理能力。只有自动段空间管理的 LMT (Locally Managed Tablespaces ) 支持 BIGFILE 表空间。 大文件表空间只能包含一个文件,但是文件可以达到 4G 个数据块大小。(以下用 BFT 指代 BIGFILE Tablespace。
BFT 可以和以下存储技术结合使用:
自动存储管理(ASM)
LVM
OMF
理论上的 BFT 可以达到下面所列的值:
数据块大小(单位:K) BFT 最大值(单位:T)
2k 8T
4k 16T
8k 32T
16k64T
32k 128T
在实际环境中,这还受到操作系统的文件系统的限制。
BFT基本操作
10g 数据库在创建的时候,会指定默认的表空间类型。如果不特殊指定的话,默认为 SMALLFILE 类型的表空间。
SQL> SELECT *
2 FROM database_properties
3 WHERE property_name = 'DEFAULT_TBS_TYPE';
PROPERTY_NAME PROPERTY_VALUE DESCRIPTION
-------------------- --------------- ----------------------------------------
DEFAULT_TBS_TYPE SMALLFILE Default tablespace type
这种情况下,如果我们创建表空间的时候不指定类型,那么默认创建的都是 SMALLFILE 类型的表空间。可以通过 ALTER DATABASE 命令来修改数据库默认的表空间类型:
SQL> ALTER DATABASE SET DEFAULT bigfile TABLESPACE;
Database altered.
SQL> SELECT *
2 FROM database_properties
3 WHERE property_name = 'DEFAULT_TBS_TYPE';
PROPERTY_NAME PROPERTY_VALUE DESCRIPTION
-------------------- --------------- ----------------------------------------
DEFAULT_TBS_TYPE BIGFILE Default tablespace type
SQL>
SQL> ALTER DATABASE SET DEFAULT smallfile TABLESPACE;
创建 BIGFILE 类型的表空间,只需指定额外的一个参数 BIGFILE 即可,其他和原有创建表空间语法类似:
CREATE BIGFILE TABLESPACEbftbs
DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs01.dbf' SIZE 5M;
DBA_TABLESPACES (USER_TABLESPACES)与 V$TABLESPACE 这两个视图可以查看 BIGFILE 表空间的相关信息。先看看 DBA_TABLESPACES 在 10g 中有了什么变化:
SQL> SELECT tablespace_name, bigfile
2 FROM dba_tablespaces;
TABLESPACE_NAME BIG
------------------------------ ---
SYSTEM NO
UNDOTBS NO
SYSAUX NO
TEMP NO
USERS NO
EXAMPLE NO
TEST NO
BFTBS YES
8 rows selected.
BFT 属性
BFT有一些特有的属性。
1.每个表空间只能包含一个数据文件。如果试图添加新的文件,则会报告 ORA-32771 错误:
SQL> ALTER TABLESPACE bftbs
2 ADD DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 5M;
ALTER TABLESPACE bftbs
*
ERROR at line 1:
ORA-32771: cannot add file to bigfile tablespace
2.只有自动段空间管理的 LMT (locally managed tablespaces ) 支持 BFT
SQL> CREATE BIGFILE TABLESPACE bftbs02
2 DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 5M
3 EXTENT MANAGEMENT DICTIONARY;
CREATE BIGFILE TABLESPACE bftbs02
*
ERROR at line 1:
ORA-12913: Cannot create dictionary managed tablespace
SQL> CREATE BIGFILE TABLESPACE bftbs02
2 DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 5M
3 SEGMENT SPACE MANAGEMENT MANUAL;
CREATE BIGFILE TABLESPACE bftbs02
*
ERROR at line 1:
ORA-32772: BIGFILE is invalid option for this type of tablespace
3.相对文件号(RELATIVE_FNO)为1024 ( 4096 on OS/390)
因为BFT只有一个数据文件,所以其相对文件号也是固定的:1024
SQL> SELECT tablespace_name, file_id, relative_fno
2 FROM dba_data_files;
TABLESPACE_NAME FILE_ID RELATIVE_FNO
------------------------------ ---------- ------------
USERS 4 4
SYSAUX 3 3
UNDOTBS 2 2
SYSTEM 1 1
EXAMPLE 5 5
TEST 6 6
BFTBS 7 1024
7 rows selected.
SQL>