​ 表空间是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
2
3
4
5
6
7
-- 如果缺省默认是smallfile
create bigfile tablespace mytest datafile ‘/data1/oracle/mytest.dbf’ size 128m AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED;
-- 修改数据库的默认表空间类型
ALTER DATABASE SET DEFAULT smallfile TABLESPACE;
ALTER DATABASE SET DEFAULT bigfile TABLESPACE;
-- 查看默认表空间类型
SELECT * FROM database_properties WHERE property_name = ‘DEFAULT_TBS_TYPE’;

2.2 查看表空间类型

1
select tablespace_name, bigfile from dba_tablespaces;
img
#### 2.3 追加

​ 创建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    

Oracle表空间概述_smallfile tablespace-CSDN博客

oracle 创建超大表空间文件,不用担心表空间占用满了_51CTO博客_oracle 表占用表空间大小