当前位置导航:炫浪网>>网络学院>>编程开发>>Oracle教程

[Oracle 10g] 大文件表空间


  简单介绍
  
  Oracle 10g 的存储能力有了显著的增强。这表现在很多方面,下面介绍 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
  16k 64T
  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 TABLESPACE bftbs
  DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs01.dbf' SIZE 5M;
  DBA_TABLESPACES (USER_TABLESPACES)与 V$TABLESPACE 这两个视图可以查看 BIGFILE 表空间的相关信息。先看看 DBA_TABLESPACES 在 10g 中有了什么变化:
  
  SQL> desc DBA_TABLESPACES
  Name                   Null?  Type
  ----------------------------------------- -------- ------------------------
  TABLESPACE_NAME              NOT NULL VARCHAR2(30)
  BLOCK_SIZE                NOT NULL NUMBER
  INITIAL_EXTENT                   NUMBER
  NEXT_EXTENT                    NUMBER
  MIN_EXTENTS                NOT NULL NUMBER
  MAX_EXTENTS                    NUMBER
  PCT_INCREASE                    NUMBER
  MIN_EXTLEN                     NUMBER
  STATUS                       VARCHAR2(9)
  CONTENTS                      VARCHAR2(9)
  LOGGING                      VARCHAR2(9)
  FORCE_LOGGING                   VARCHAR2(3)
  EXTENT_MANAGEMENT                 VARCHAR2(10)
  ALLOCATION_TYPE                  VARCHAR2(9)
  PLUGGED_IN                     VARCHAR2(3)
  SEGMENT_SPACE_MANAGEMENT              VARCHAR2(6)
  DEF_TAB_COMPRESSION                VARCHAR2(8)
  RETENTION                     VARCHAR2(11)
  BIGFILE                      VARCHAR2(3)
  
  SQL>
  
  和 9i 相比, DBA_TABLESPACES 视图多了两列:RETENTION 和 BIGFILE。其中 BIGFILE 列说明该表空间是否为 BFT:
  
  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.
  
  V$TABLESPACE 视图相对 9i 也增加了新的列:
  
  SQL> desc V$TABLESPACE
  Name                   Null?  Type
  ----------------------------------------- -------- ------------------------
  TS#                        NUMBER
  NAME                        VARCHAR2(30)
  INCLUDED_IN_DATABASE_BACKUP            VARCHAR2(3)
  BIGFILE                      VARCHAR2(3)
  FLASHBACK_ON                    VARCHAR2(3)
  其中 FlASHBACK_ON 和 BIGFILE 列都是新增的。
  
  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>
  
  4.rowid的变化
  
  在 BFT 上存储的表的 ROWID 与 smallfile 表空间上的 rowid 结构有些不同的。要正确得到 rowid 信息,dbms_rowid 包增加了一个新的参数 ts_type_in 来解决这个问题。参考这个范例:
  
  SQL> SELECT DBMS_ROWID.rowid_block_number (ROWID, 'BIGFILE')
  2  FROM foo;
  
  DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID,'BIGFILE')
  ----------------------------------------------
  24
  
  SQL>
  
  你可以创建多大的表空间?
  
  我们在前面提及,BFT 还受到操作系统的文件系统的限制。下面我们以 Linux 操作系统为例:
  
  SQL> SHOW parameters db_block_size
  
  NAME                 TYPE    VALUE
  ------------------------------------ ----------- ------------------------------
  db_block_size            integer   8192
  SQL>
  
  也就是说,理论上我们可以创建最大 32T (4
相关内容
赞助商链接