分享
 
 
 

[Oracle 10g] 大文件表空间

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

作者:Fenng

日期:27-Nov-2004

出处:http://www.dbanotes.net

版本:0.1

简单介绍

Oracle 10g 的存储能力有了显著的增强。这表现在很多方面,下面介绍 10g 新增的表空间类型:大文件 (Bigfile) 表空间。

大文件表空间从某种角度来说提高了 Oracle 在 VLDB 上的治理能力。 只有自动段空间治理的 LMT (Locally Managed Tablespaces ) 支持 BIGFILE 表空间。 大文件表空间只能包含一个文件,但是文件可以达到 4G 个数据块大小。(以下用 BFT 指代 BIGFILE Tablespace。)

BFT 可以和以下存储技术结合使用:

自动存储治理(ASM) LVM OMF

理论上的 BFT 可以达到下面所列的值:

数据块大小(单位:K)BFT 最大值(单位:T)2k8T4k16T8k32T16k64T32k128T

在实际环境中,这还受到操作系统的文件系统的限制。

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 typeSQL>

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 NOUNDOTBS NOSYSAUX NOTEMP NOUSERS NOEXAMPLE NOTEST NOBFTBS YES8 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 tablespaceSQL> 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 4SYSAUX 3 3UNDOTBS 2 2SYSTEM 1 1EXAMPLE 5 5TEST 6 6BFTBS 7 10247 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')---------------------------------------------- 24SQL>

你可以创建多大的表空间?

我们在前面提及,BFT 还受到操作系统的文件系统的限制。

下面我们以 Linux 操作系统为例:

SQL> SHOW parameters db_block_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_block_size integer 8192SQL>

也就是说,理论上我们可以创建最大 32T (4G*8K) 的表空间。我们可以做到么?

SQL> CREATE BIGFILE TABLESPACE bftbs02 2 DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 20T reuse;CREATE BIGFILE TABLESPACE bftbs02*ERROR at line 1:ORA-01119: error in creating database file '/u01/app/oracle/oradata/DEMO/bftbs02.dbf'ORA-27059: could not redUCe file sizeLinux Error: 27: File too largeAdditional information: 2SQL>

注重我们得到的操作系统信息(黑色部分):File too large 。这说明超出了操作系统答应值。我所用的环境是Fedora Core Linux, 内核的版本是2.6.9,文件系统是 EXT3 。2.4以后的版本的内核都是支持 LFS (Large File Support)的。

文件系统(块)文件大小限制文件系统大小限制ext2/3 (2K)256G8Text2/3 (4K)2T16Text2/3 (8K)64T32TReiserFS 3.6 1E16T

我们检查一下OS文件系统块大小:

[root@FC3 ~]# tune2fs -l /dev/hda7 grep BlockBlock count: 2621440Block size: 4096Blocks per group: 32768[root@FC3 ~]#

也即,我们可以在操作系统上创建不大于 2T 的文件。虽然我们没有那么大的存储空间,不妨也测试一下:

SQL> CREATE BIGFILE TABLESPACE bftbs02 2 DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 1800g;

在另外一个终端中,观察该目录的变化情况:

[root@FC3 DEMO]# ls -ltrtotal 1159048-rw------- 1 oracle oracle 5251072 Nov 28 20:05 bftbs01.dbf-rw------- 1 oracle oracle 1932735291392 Nov 28 20:49 bftbs02.dbf[root@FC3 DEMO]#

哇,我们真的能观察到Oracle在创建“超大”文件呢,接近1.8T 的文件 :-) 要过一会儿,Oracle 才会报告错误(究竟1800G 的大文件):

CREATE BIGFILE TABLESPACE bftbs02*ERROR at line 1:ORA-19502: write error on file "/u01/app/oracle/oradata/DEMO/bftbs02.dbf",blockno 898048 (blocksize=8192)ORA-27072: File I/O errorAdditional information: 898047

可见,在本例中,由于操作系统文件系统的限制,我们只可以创建2T以下的 BFT。

你需要BFT么?

应用 BFT 的话,优点缺点都存在。根据 Oracle 官方的文档,DB_FILES 和 MAXDATAFILES 这两个参数的值给 SGA 带来的压力会减轻(原来的压力就很大么?)。数据库中最大数据文件数是有限的 (64K files),BFT 的出现的确对海量数据库有一定的积极意义。从一定程度上来说,BFT 简化了治理,但是在恢复的时候可能是一场灾难。

在笔者看来,至少我们现在在大多数情况下不需要用 BFT 。"你要把鸡蛋都放到一个篮子里么? "

参考信息

Oracle Database Administrator's Guide 10g Release 1 (10.1) Part Number B10739-01 ( Note 62294.1 )

Large File Support in Linux - http://www.suse.de/~aj/linux_lfs.Html

Metalink [NOTE:262472.1] 10g: BIGFILE Type Tablespaces Versus SMALLFILE Type

本文作者Fenng,某美资公司DBA,业余时间混迹于各数据库相关的技术论坛且乐此不疲。目前关注如何利用ORACLE数据库有效地构建企业应用。对Oracle tuning、troubleshooting有一点研究。

个人技术站点:http://www.dbanotes.net/ 。可以通过电子邮件 dbanotes@gmail.com 联系到他。

原文出处http://www.dbanotes.net/Oracle/10g_Bigfile_Tablespaces.htm

All Articles (by Fenng) are licensed under a Creative Commons License.

I would welcome any feedback. Please send questions, comments or corrections to dbanotes@gmail.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有