Oracle 表空间详解,smallfile 和 bigfile表空间
表空间是Oracle中的一个逻辑存储容器,位于存储体系的顶层。Oracle数据库由n个表空间构成,每个表空间又包括一个或多个数据文件。在Oracle 10g中,推出了Bigfile tablespace的概念,之后表空间就分为了两个类型,smallfile tablespace和bigfile tablespace。10g之前一个表空间对应多个数据文件的方式我们称之为Smallfile Tablespace。
所谓Bigfile Tablespace最显著的差别就是一个表空间只能对应一个数据文件。Bigfile Tablespace虽只对应一个数据文件,但数据文件对应的最大体积大大增加。传统的small datafile每个文件中最多包括4M个数据块,如果按照默认一个数据块8K的大小核算,最大文件大小为32G。每个Small Tablespace理论上能够包括1024个数据文件,这样计算理论的最大值为32TB大小。而Bigfile Datafile具有更强大的数据块block容纳能力,最多能够包括4G个数据块。同样按照默认数据块8K计算,Bigfile Datafile大小为32KG=32TB。理论上small tablespace和big tablespace总容量相同的。
1. 表空间分类
主要包含四种分类方式:
1.1 按数据文件类型划分
大文件表空间(bigfile tablespace)Oracle 10g新增特性
小文件表空间(smallfile tablespace)创建时默认表空间类型
1.1.1 大文件表空间的优点:
1、在一个表空间里只有一个大的数据文件,不需要再去管理数据文件。
2、一个大的数据文件相当于1024个小的数据文件,这样一来,在一个块大小为32K时,整个数据库可以达到(4g*32K)128TB,不过在实际环境中还是要受到操作系统的影响。
3、使用一个大的数据文件可以代替多个小数据文件,这样对数据文件的管理就少多了。
4、当打开数据库,发生检查点,执行DBWR进程时使用大文件表空间会增强性能。
1.1.2 大文件表空间的的注意事项:
1、要使用在ORACLE的ASM(自动存储管理)的存储空间或者分散(striping)存储的LVM中,或者RAID阵列上。
2、不要把大文件表空间建立在不能分散(striping)存储的系统上。
3、不要把大文件表空间建立在没有空间(剩余空间少)的磁盘组上。
4、建立大文件表空间时不推荐建立在不能扩展的存储空间里。
5、大文件表空间只支持本地管理表空间(LMT)和本地段空间管理(ASSM)。
6、在临时表空间与回滚段表空间,只能用手动段空间管理。
7、自动扩展数据文件必须是起用的,而且最大文件大小必须是不限制。
8、系统表空间和系统辅助(SYSAUX)表空间不能使用大文件表空间。
9、每个表空间只能包含一个数据文件。如果试图添加新的文件,则会报告 ora-32771 错误。
10、在 bft 上存储的表的 rowid 和 smallfile 表空间上的 rowid 结构有些不同的。要正确得到 rowid 信息,dbms_rowid 包增加了一个新的参数ts_type_in来解决这个问题。
大文件表空间可以最小化表空间文件数量,从而简化DBA的管理,在大型的数据库中,包含几十、数百文件的表空间随处可见,随着文件数量的增加,很多数据库参数就要做出相应的调整,如db_files,静态参数的调整又要重新启动数据库才能生效,这都给数据库的维护带来不便,而BFT的出现,可以彻底解决这些问题。由于文件数量的减少,控制文件的空间使用也可以随之减少,检查点等数据库内部操作需要同步的文件头数量也大大减少,总之,大文件表空间的出现为超大型数据库(VLDB)的管理带来了极大的便利。
但是需要注意的是,一个大文件自然会带来I/O或存储上的问题,由于BFT只能存在一个数据文件,所以要保证分配的磁盘或磁盘组具有足够的空间;为了避免I/O的竞争,在数据库底层,磁盘的分配和规划也非常重要,通常Striping/RAID或Oracle的ASM技术等需要被采用去分散I/O,避免磁盘上的竞争。
1.2 按管理方式划分
- 本地管理表空间(LMT)
- 数据字典管理表空间(DMT)
1.2.1 本地管理表空间
1、一种比较先进的管理扩展(extent)的方式。
2、是用bitmap来管理表空间里的所有的extent。
3、当使用本地管理表空间时是使用6个块(从第三个到第八个)来标识整个表空间里的每一个扩展(extent)。
4、其中的每一位(bit)来表示每个扩展的状态。1为已被分配,0为可被分配。
5、在本地管理表空间的方式里可以选择每个extent的大小是固定(Uniform)的或是自动的:在自动管理,系统一般是刚开始一个extent8个block,然后逐渐增加;固定大小为每个extent都是固定大小的,推荐使用。
1.2.1 数据字典管理表空间
1、这种方式是为了与之前版本兼容而提供的,不推荐使用。
2、10G里是不能创建字典管理表空间的,被强制推荐,只能倒入老版本中的字典管理表空间。
1.3 按使用类型划分
永久段表空间
临时段表空间
回滚段表空间
1.3.1 永久段表空间
1、一般存储数据的表空间。
2、系统表空间,普通用户使用的表空间都为永久表空间。
3、永久表空间的状态有三种:读写,只读,脱机。
4、只有在永久表空间,才能配置ASSM管理模式。
5、可以设置记录日志模式,建立选yes,以便数据库出问题后进行恢复。
6、已设置为系统默认表空间。这样,创建用户时,没有指定默认表空间,就自动设置为系统默认表空间。
7、设置默认表空间的命令
1 | ALTER DATABASE DEFAULT TABLESPACE <TABLESPACE_NAME>; |
1.3.2 临时段表空间
1、一般用来排序和创建索引时使用。
2、临时表空间里不存放实际的数据,所以,即使出了问题,也不需要恢复,而且,也不需要备份,因此也不需要记录日志。
3、临时表空间只能使是读写模式,而且只能为手动管理段空间模式。
4、可以设置为系统默认临时表空间。这样,创建用户时,没有指定默认临时表空间,就自动设置为系统默认临时表空间,命令如下:
1 | ALTER DATABASE DEFAULT TEMPORARY TABLESPACE <TABLESPACE_NAME>; |
1.3.3 回滚段表空间
1、用来存放修改中数据的原数据。
2、回滚段表空间是用来保证数据读一致性的。
1.4 永久表空间中按存储内容方式划分
1、系统表空间(SYSTEM TABLESPACE)
2、系统辅助表空间(SYSAUX TABLESPACE)
3、非系统表空间
2. 大文件表空间实操
2.1 创建大文件表空间
1 | -- 如果缺省默认是smallfile |
2.2 查看表空间类型
1 | select tablespace_name, bigfile from dba_tablespaces; |
创建bigfile tablespace时,就已经指定了数据文件。如果此时我们尝试加入一个新的数据文件,Oracle系统会报错。
1 | alter TABLESPACE bttest add DATAFILE ‘/data1/oracle/BTTEST2.dbf’ size 128m AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED; |
ERROR at line 1:
ORA-32771: cannot add file to bigfile tablespace
2.4 空间计算原理
1、db_block_size默认为8k,理论上我们可以创建最大 32T
SHOW parameters db_block_size
db_block_size integer 8192
2、oracle文件最大容量:
表空间文件容量与DB_BLOCK_SIZE有关,在初始建库时,DB_BLOCK_SIZE要根据实际需要,设置为4K,8K、16K、32K、64K等几种大小,ORACLE的物理文件最大只允许4194304个块(由操作系统决定)。
3、smallfile tablespace表空间单文件的最大值为 4194304×DB_BLOCK_SIZE/1024M,即:
4k最大表空间为:16384M=16G 最多允许1024个文件,故空间最大值 16T
8K最大表空间为:32768M=32G,同理32T
16k最大表空间为:65536M=64G,同理64T
32K最大表空间为:131072M=128G,同理128T
64k最大表空间为:262144M=256G,同理256T
alter system set db_16k_cache_size=32m;
alter system set db_32k_cache_size=32m;
4、大文件表空间从某种角度来说提高了 Oracle 在 VLDB 上的管理能力。
只有自动段空间管理的 LMT (Locally Managed Tablespaces ) 支持 BIGFILE 表空间。
大文件表空间只能包含一个文件,但是文件可以达到 4G 个数据块大小,BFT(BIGFILE Tablespace)可以和自动存储管理(ASM) LVM、OMF 存储技术结合使用。
2k表空间最大值为8T
4k表空间最大值为16T
8k表空间最大值为32T
16k表空间最大值为64T
32k表空间最大值为128T




