日期:2014-05-16  浏览次数:20477 次

管理表空间(前言)【引】 (转)

表空间(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.可以将表空间设置成只读状态而保持大量的静态数据。

(二)表空间的类型
一个数据库通常有SYSTEM,SYSAUX,TEMP三个默认表空间,一个或多个临时表空间,而且还有一个撤销表空间和几个应用程序专用的应用表空间。
这些表空间可以划分为系统表空间和非系统表空间两类。
系统数据(数组字典表及其数据) 系统表空间
用户数据(表、索引) 大表空间、小表空间
临时数据 临时表空间
撤销数据 撤销表空间

(1)系统表空间
系统表空间包括SYSTEM表空间和SYSAUX表空间,其余的表空间就是非系统表空间。系统表空间在所有数据库中都是必须的。一般存放到ORACLE的数据字典及其数据。

(2)临时表空间
撤了撤销(UNDO)表空间、相对于临时(TEMPORARY)空间而言,其他表空间就是永久(PERMANENT)表空间。
当执行排序(ORDER BY)、分组汇总(GROUP BY)、索引(CREATE INDEX)等功能的SQL语句时,会产生大量的临时数据。服务器进程首先将临时数据存放到内存结构的PGA区的排序区中,当排序区不够用时,服务器进程就会在临时表空间中建立临时段,并将这些临时数据存放到临时段中。
如果在创建用户时没有为用户指定一个临时表空间,那么就会使用SYSTEM表空间来说创建临时段,存放临时数据。这样做的结果是:
1.占用了SYSTEM表空间的存储空间,使可用的存储空间下降;
2.频繁的分配和释放临时段,会在SYSTEM表空间中产生大量的存储碎片,使磁盘的读取效率下降。

如果在数据运行过程中,经常有大量的并发排序,那么为了避免在SYSTEM表空间中存储临时数据,数据库管理员应该在数据库中创建一个专门的用来存储临时数据的临时表空间。
临时表空间对应的是临时文件,它与数据文件是有区别的。数据文件在创建时就被完全分配和初始化,而临时文件不一定保证被分配到指定的磁盘空间。如:在 UNIX操作系统中,将不实际分配临时文件的磁盘空间,而是知道某个操作需要临时表空间时才为临时文件分配磁盘空间。这种延迟式的分配方法允许临时文件被快速创建,但如果没有预留出实际运行时所需的磁盘空间,就可能在运行时发生问题。
临时表空间可以被所有用户共享使用,如TEMP表空间可以被所有用户共享使用。在ORACLE 8I中可以使用其他表空间作为临时表空间,而在ORACLE 9I中就开始引入默认临时表空间(DEFAULT TEMPORARY TABLESPACE)的设计了,使用户不能使用其他表空间作为临时表空间。
某个用户使用哪个临时表空间应该是在创建该用户时指定的。数据库的默认临时表空间是在创建(CREATE DATABASE)数据库时,由DEFAULT TEMPORARY TABLESPACE子句来指定的。
在临时表空间中,同一个例程的所有SQL语句的排序操作将共享使用一个排序段(SORT SEGMENT)。排序段在执行第一条排序操作的SQL语句时被创建,在例程关闭时被释放。可以通过动态性能视图V$SORT_SEGMENT来查询排序段的使用情况,通过动态性能视图V$SORT_USAGE来查询使用排序段的会话和用户信息。

(3)撤销表空间
在ORACLE 9I以前,对于回退段(ROLLBACK SEGMENT)的设置与管理是一项十分复杂的工作。从ORACLE 9I开始,引入了一个全新的概念,即自动撤销管理(AUTOMATIC UNDO MANAGEMENT),用撤销(UNDO)表空间取代已经使用了20年的回退段。实际上是将回退段(撤销段)放入了撤销表空间,而由例程自动处理撤销表空间中的回退段。使用自动撤销管理方式后,不仅可以减轻DBA的工作负担,而且还可以获得较好的回退性能。通过查询数据字典视图 DBA_ROLLBACK_SEGS,可以得到撤销表空间中回退段的信息。
撤销表空间存储撤销段,撤销段主要用于入下目的:
1.用一条ROLLBACK语句明确的回退一个事务;
2.隐含的回退一个事务;
3.重构数据的一个读一致图像;
4.从逻辑错误中恢复。

在ORACLE中可以创建多个撤销表空间,但同一时刻值允许激活一个撤销表空间。在初始化参数文件中用UNDO_TABLESPACE指出要激活的撤销表空间。撤销表空间的组织与管理由ORACLE内部自动完成。当回退段不足时,一个事务可以使用多个回退段,不会中止事务的运行。数据库管理员只需了解撤销表空间是否有足够的空间,而不必为每个事务设置回退段。

(4)大文件表空间与小文件表空间
大文件(BIGFILE)表空间是ORACLE 10G新引进的表空间。大文件表空间只能放置一个数据文件(或临时文件)。但其数据文件可以包括4G个数据块。
大文件表空间都是为超大型数据库设计的。如果一个超大型数据库具有上千个数据文件的话,更新数据文件头部信息的操作就会花费很长时间。如果使用了大文件表空间,就可以使用大数据文件来减少数据文件的数量,使更新数据文件头部信息的操作更快一些。
要想创建一个大文件表空间,可以使用CREATE语句中的使用的BIGFILE关键字。CREATE BIGFILE TABLESPACE mybigtbs01 DATAFILE 'e:\mybigtbs01_1.dbf' SIZE 20G SEGMENT SPACE MANAGEMENT AUTO;
小文件(SMALLFILE)表空间是以前ORACLE表空间的新命名。在小文件表空间中可以放置多个数据文件。一个数据库可以放置多达64K个数据文件。
SYSTEM和SYSAUX表空间总是被创建为小文件表空间。
想要创建一个小文件表空间,可以在CREATE语句中使用SMALLFILE关键字(或者不适用此类关键字)。CREATE SMALLFILE TEMPORARY TABLESPACE mytmptbs01 TEMPFILE 'e:\mytmptbs01_1.dbf' SIZE 4M UNIFORM SIZE 64K;

(三)表空间的区、段管理方式
ORACLE 10G的表空间是按照区和段空间进行管理的。
(1)区管理方式
针对区的分配方式不同,表空间有两种管理方式。ORACLE各个版本所支持的管理方式如下:
字典管理方式 ORACLE 7,ORACLE 8,ORACLE 8I,ORACLE 9I;
本地管理方式 ORAC