一、Oracle表空间概述
表空间是Oracle数据库中的一种逻辑结构。从逻辑层面上来说,表空间包含段,数据库中的对象是以段的形式来组织的,诸如表段,索引段等;从物理层面上来说,表空间是由文件构成的,数据库中的数据实际上是存储在文件当中的。表空间不是Oracle数据库中的特有概念,如在DB2中也有表空间这个概念。
二、本地管理的表空间
1、本地管理表空间中的扩展(extent)管理
使用extent management local子句显示声明创建本地管理的表空间,对于新的永久表空间来说,这是一个默认的选项(基于数据字典管理的表空间已经过时)。同时,还可以指定扩展管理的方式,使用autoallocate子句表明将由数据库自动分配扩展,使用uniform子句表明将按照统一的大小分配扩展。
如果表空间内的对象对于扩展尺寸的要求是多种多样的,那么使用autoallocate选项是一个不错的选择。另外,由于autoallocate选项简化了对空间的管理,势必会造成一定的空间浪费。如果控制空间的分配和回收对你来说并不是那么重要,那么autoallocate也将是一个不错的选择。autoallocate带来的收益绝对超过其造成的损失。uniform选项可以明确的指出每一次为空间的申请分配多少扩展,如果表空间内的对象每次对空间的请求都是固定的,那么这个选项将会是一个不错的选择。在实际使用过程中,应根据表空间内的对象的具体情况作出抉择。
创建本地管理表空间的分区管理创建语句如下:
# 自动分配扩展 create tablespace lmt_tbs datafile ‘/u02/oracle/data/lmt_tbs.dbf‘ size 50m extent management local autoallocate; # 统一分配扩展 create tablespace uni_tbs datafile ‘/u02/oracle/data/uni_tbs.dbf‘ size 50m extent management local uniform size 128k;
2、本地管理表空间中的段(segment)管理
在本地管理的表空间中,Oracle使用两种方法管理段空间:自动和手动。手动段空间管理使用一个被称为”freelist“的队列来管理段内的空间,由pctused和pctfree两个参数用来控制空间的”入列“和”出列“,与之不同的是,自动段空间管理使用的是位图的管理方式,在自动段空间管理中,只需要设置pctfree参数。自动段空间管理是一种更为有效的空间管理方式。对于新的基于本地管理的表空间来说自动段空间管理是默认的。
自动段空间管理的创建语句如下:
create tablespace lmt_tbs datafile ‘/u02/oracle/data/lmt_tbs.dbf‘ size 50m extent management local autoallocate segment space management auto;
三、大文件表空间
一个小文件表空间最多能容纳1024个数据文件,在Oracle中可以创建大文件表空间,这样Oracle数据库使用的表空间就可以由一个单一的大文件构成,而不是若干个小数据文件。
1、使用大文件表空间的优势
- 使用大文件表空间可以显著地增强Oracle数据库的存储能力。由于每个数据库最多使用64K个数据文件,因此使用大文件表空间时数据库中表空间的极限个数是使用小文件表空间时的1024倍。
- 在超大型数据库中使用大文件表空间减少了数据文件的数量,因此也简化了对数据文件的管理工作。由于数据文件的减少,SGA中关于数据文件的信息,以及控制文件(control file)的容量也得以减小。
- 由于数据文件对用户透明,由此简化了数据库管理工作。
2、使用大文件表空间时需要考虑的问题
- 大文件表空间应该和自动存储管理或其他逻辑卷管理工具配合使用,这些工具应该能够支持动态扩展逻辑卷,也能支持striping(数据跨磁盘分布)或RAID。
- 应该避免在不支持striping的系统上使用大文件表空间,因为这将不利于并行执行及RMAN的并行备份
- 当表空间正在使用的磁盘组可能没有足够的空间,且扩展表空间的唯一办法是向另一个磁盘组加入数据文件时,应避免使用大文件表空间。
- 不建议在不支持大文件的平台上使用大文件表空间,这会限制表空间(tablespace)的容量。参考相关的操作系统文档了解其支持的最大文件容量。
- 如果使用大文件表空间替代传统的表空间,数据库打开,checkpoints,以及 DBWR 进程的性能会得到提高,但是增大数据文件容量可能会增加备份与恢复的时间。
3、创建大文件表空间的语句
CREATE BIGFILE TABLESPACE bigtbs DATAFILE ‘/u02/oracle/data/bigtbs01.dbf‘ SIZE 1024GB;