Oracle的DataFile大小问题
Oracle的数据文件大小是有限制的,最近在创建datafile的时候就遇到了问题,所以专门去查找了一些资料,把这个问题搞清楚了。限制是很简单直接的,但是作为DBA是必须要了解的。具体的问题是这样的:
在创建一个100G的表空间时遇到了报错:
SQL> create tablespace wxq_tbs datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\WANGXIAOQI\DATAFILE\WXQ_TBS.DBF' size 10G
2 autoextend on next 2G maxsize 100G;
ORA-03206: maximum file size of (13107200) blocks in AUTOEXTEND clause is out of range
按照Oracle文档的描述,每个datafile的最大容量为(2^22-1)个block,即4194303个block,而当前数据库的block大小是8k,也就是说最大的文件大小是32G,要建100G的datafile就不行了。
也就是说,以Oracle的限制,如果要建普通的datafile,最大的大小就是 (2^22-1)*32K = 128G (注:Oracle最大支持block为32k)。存在这个限制是因为Oracle的内部ROWID使用22位2进制数来存储不同的block号,所以22位最多代表(2^22-1)个block。
为了解决数据文件大小的问题,Oracle10g专门引入了bigfile tablespace,在bigfile tablespace里Oracle使用32位来存储block号,即比之前增大了1024倍,其最大文件大小从128G增加到128T。当然如果使用bigfile tablespace,则需要注意OS的文件大小限制。
例如在windows下,单个文件最大限制如下:
FAT12 8M
FAT16 2G
FAT32 4G
NTFS 64GB
NTFS5.0 2TB
下面介绍一下Oracle 10g的bigfile tablespace创建语法,其实很简单:
SQL> create tablespace big_tbs datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\WANGXIAOQI\DATAFILE\BIG_TBS.DBF' size 20G
2 autoextend on next 10G maxsize 100G;
Tablespace created.
至于对其他的一些操作的影响比较复杂,暂时不做研究,有时间了专门了解一下。可以了解的基本特性是:会默认得使用LMT和ASSM来对tablespace进行管理。
需要注意的是,对于bigfile tablespace来说,只允许创建一个datafile,而不允许再添加datafile。
SQL> alter tablespace big_tbs add datafile '/opt/oracle/product/10.2.0/oradata/wangxiaoqi/big_tbs2.dbf' size 20G
2 autoextend on next 10M maxsize 100M;
alter tablespace big_tbs add datafile '/opt/oracle/product/10.2.0/oradata/devMISowb/big_tbs2.dbf' size 20M
*
ERROR at line 1:
ORA-32771: cannot add file to bigfile tablespace
最后删除tablespace
SQL> drop tablespace big_tbs including contents cascade constraints;
About bigfile tablespace restrictions
----------------------------------------