表空间(TABLESPACE)是ORACLE数据库中最大的逻辑结构。ORACLE数据库是由一个或多个表空间组成的。它在物理上与磁盘上的数据文件相对应(一个表空间由一个或多个数据文件组成,但一个数据文件只能属于一个表空间)。从物理上说数据库的数据被存放在数据文件中,而从逻辑上说是被存放在表空间中的。
数据库的逻辑配置实际上就是指表空间的配置。
一、表空间概述
表空间是ORACLE数据库中最大的逻辑结构。数据库的所有对象和方案都被逻辑的保存在表空间中。
表空间的特性与作用 :
数据库管理系统(DBMS)是建立在操作系统(OS)基础上的,它的数据也必须存储在各个文件中,如数据文件、重做日志文件、归档日志文件等。
表不是文件,表不是空间。
表空间是组织结构和分配空间的逻辑结构。除了数据文件之外,控制文件、重做日志文件、归档日志文件等其他文件都不属于任何表空间。
表空间的特性如下:
1.一个数据库可以有多个表空间。可以在数据库中创建、删除表空间;
2.一个表空间只属于一个数据库;
3.一个表空间必须要有一个数据文件;
4.一个表空间的大小等于其中所有数据文件的大小之和。数据库的大小等于其中所有表空间的大小之和;
5.表空间可以被联机和脱机。SYSTEM表空间不能被脱机;
6.表空间可以在读写、只读状态之间切换;
7.每个表空间由一个或多个物理存在的操作系统的数据文件组成。这种数据文件可以具有固定的大小,或允许其自动变大。可以在表空间中添加、删除数据文件;
8.方案对象、表、索引的数据都被存储在表空间的数据文件中。一个数据文件存储不下,就存储在另一个数据文件中,只要该数据文件是本表空间中的就可以;
9.一个用户默认使用一个表空间,但他的不同方案对象的数据可以被存储在不同表空间中;
10.一个用户使用的表空间的数量是有一定配额的,不能超出这个配额;
11.可以根据使用目的,创建不同类型的表空间,如永久表空间、临时表空间、撤销表空间、大表空间等。不同类型的表空间的格式、使用方式及目的是不同的。
表空间的作用:
1.控制数据库所占用的磁盘空间;
2.控制用户所占用的表空间配额,也就等于控制用户所占用的配额空间;
3.通过将不同表的数据、分区表中不同分区的数据放置到不同的表空间中,可以提高数据库的I/O性能,并有利于进行部分备份和恢复等管理工作;
4.能够将一个表的数据和这个表的索引数据分别防止到不同的表空间中,同样可以提高数据库的I/O性能;
5.可以将表空间设置成只读状态而保持大量的静态数据。
二、TableSpace管理准则
1、使用多个TableSpace
* 用户数据与数据字典数据分离,减少竞争
* 应用程序之间的数据分离,防止某个TableSpace脱机后对多个程序造成影响
* 不同磁盘驱动器上存储数据,减少I/O竞争
* 回滚段数据与用户数据分离,防止单磁盘故障造成数据永久丢失
* 可以控制单个TableSpace脱机,提供更高的整体可用性
* 为特定类型数据库使用保留TableSpace,可优化TableSpace的使用
* 可以备份单独的TableSpace
2、指定表空间默认的存储参数
为TableSpace设置合适的参数,下文中详细介绍。
3、为用户指定表空间限额
可以有效控制TableSpace的大小,限制用户权限防止发生意外。
三、创建TableSpace
1、创建本地管理TableSpace
Oracle创建的TableSpace默认均是本地管理的,明确的表述应该是:
在CREATE TABLESPACE 语句中 EXTENT MANAGEMENT 子句中指定 LOCAL
然后可以用 AUTOALLOCATE 选项(默认)来使Oracle自动管理盘区
CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
也可以使用一个指定大小(UNIFORM SIZE)的同意盘区来管理该TableSpace
CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;
如果未指定盘区大小,则默认为1M,说明数据文件至少要大于1MB
注:如果TableSpace被期望用于包含需要不同盘区大小和拥有很多盘区的大小变动的对象,那选择AUTOALLOCATE是最好的选择。AUTOALLOCATE是一种管理TableSpace的简便方法,只是有可能会对一些空间造成浪费。如果需要准确控制未用空间,并能够精确预计为一个或多个对象要非配的空间和盘区大小,那就可以使用UNIFORM。
2、在本地管理TableSpace中指定段空间管理
可使用 SEGMENT SPACE MANAGEMENT子句来设置端控件的管理模式,有以下几种模式:
MANUAL(默认):使用段中管理空闲空间的空闲列表。
AUTO:使用位图来管理段中的空闲空间。又称为自动段空间管理。
AUTO立功了一种更加简单、有效的管理方法,完全消除了为表空间中创建的段指定和调整PCTUSED、FREELISTS、FREELISTS GROUPS属性的任何必要。
CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
注:LOB类型不能指定自动段空间管理。
3、修改本地管理TableSpace
* 不能讲本地管理TableSpace改为本地管理的temp TableSpace
* 不能改变TableSpace的段空间管理办法
* 本地管理TableSpace没有必要合并空闲盘区
* 可以添加数据文件
* 可以改变TableSpace状态(ONLINE/OFFLINE)
* 修改TableSpace为只读or只写
* rename数据文件
* 启用/禁用该TableSpace数据文件的自动盘区大小
4、创建字典管理的TableSpace
CREATE TABLESPACE tbsb
DATAFILE '/u02/oracle/data/tbsb01.dbf' SIZE 50M
EXTENT MANAGEMENT DICTIONARY
DEFAULT STORAGE (
INITIAL 50K
NEXT 50K
MINEXTENTS 2
MAXEXTENTS 50
PCTINCREASE 0);
使用ALTER TABLESPACE语句可以进行以下操作:
* 添加一个新的文件
* 改变默认的存储参数
* 合并TableSpace的空闲空间
* 可以改变TableSpace状态(ONLINE/OFFLINE)
* 修改TableSpace为只读or只写
* rename数据文件
* 启用/禁用该TableSpace数据文件的自动盘区大小
5、临时表空间
临时表空间主要用于提高多个排序操作的并发能力、减小开销,或避免Oracle空间管理操作在一起进行。临时表空间创建之后,可以被多个用户共享。
一个给定实例和表空间的所有排序操作共享一个单一的排序段。即排序段为一个给定表空间的每个执行排序操作的实例而存在。
排序段由使用临时表空间用于排序的第一个语句创建,并在关闭时释放,一个盘区不能被多个事务共享。
可以使用V$SORT_SEGMENT视图来查看临时表空间排序段的空间分配和回收情况
用V$SORT_USAGE视图查看这些段的当前排序用户
注:临时表空间中不能创建明确对象。
6、创建本地管理的临时表空间
CREATE TEMPORARY TABLESPACE lmtemp TEMPFILE '/u02/oracle/data/lmtemp01.dbf' SIZE 20M REUSE
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M;
注1:临时数据文件信息查询与数据文件不同,需要查询V$TEMPFILE和DBA_TEMP_FILES,但结构与V$DATAFILE和DBA_DATA_FILES类似。
注2:临时表空间在初次使用时才分配空间,可以更快创建和修改大小,但要注意磁盘大小。
7、本地管理临时表空间的修改
* 添加临时文件
ALTER TABLESPACE lmtemp ADD TEMPFILE '/u02/oracle/data/lmtemp02.dbf' SIZE 20M REUSE;
* 改变临时文件状态
ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' ONLINE|OFFLINE;
* 更改临时文件大小
ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' RESIZE 4M;
* 取消临时文件并删除相应操作系统文件
ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' DROP
INCLUDING DATAFILES;
8、创建字典管理的临时表空间
CREATE TABLESPACE sort
DATAFILE '/u02/oracle/data/sort01.dbf' SIZE 50M
DEFAULT STORAGE (
INITIAL 2M
NEXT 2M
MINEXTENTS 1
PCTINCREASE 0)
EXTENT MANAGEMENT DICTIONARY
TEMPORARY;
注1:不能以这种方式创建EXTENT MANAGEMENT LOCAL的临时表空间。
注2:可以使用ALTER TABLESPACE tbsa TEMPORARY;语句将一个现有的字典管理永久表空间改为临时表空间。