[Oracle10g]大文件表空间

王朝oracle·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

简单介绍

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航