1、smallfile
Oracle的限制,如果要建普通的datafile,最大的大小就是 (2^22-1)*32K = 128G (注:Oracle最大支持block为32k)。存在这个限制是因为Oracle的内部ROWID使用22位2进制数来存储不同的block号,所以22位最多代表(2^22-1)个block。
(2^22-1)*8k=32
2、bigfile
为了解决数据文件大小的问题,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 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