一、表空间结构
1、 区管理方式
指为一个数据库对象分配存储空间的方式,创建表空间时需要指定区管理方式。
Oracle支持字典管理和本地管理两种区管理方式。
A、字典管理方式
创建字典管理表空间的时,可指定以下参数进行区的管理:
- INITIAL:首先为数据库分配的区大小;
- NEXT:指定下一个区的大小;
- MINEXTENTS:为数据库对象分配的最少区的个数,默认为1;
- MAXEXTENTS:最多为数据库对象分配的区个数;
- PCTINCREASE:从第三个区开始,每一个区在前一个区的基础上增长的百分比
该方式区的分配和回收都基于数据字典,需要在数据字典上执行很多查询和DML操作,,并且产生重做日志和回滚数据。另外,由于数据库对象中的区大小不同,随着数据库服务器的运行,在段中将产生越来越多的存储碎片。
B、本地管理方式(推荐)
本地管理表空间中区的大小都是一样的,可以通过参数指定区大小,也可以通过数据库服务器根据实际情况自动指定区大小
字典管理方式转换为本地管理方式:
调用DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL(“tablespace_name”)
2、 段管理方式
A、 手工管理
每个段的头部都有一段保留空间,维护一个空闲列表,记录当前段中所有空闲块。当向表中写入数据时,服务器进程查找足够数量的空闲块,将数据写入这些块,并从空闲列表删除。
B、自动管理(默认)
每个段的头部有一个位图,在位图中记录当前段中每个数据块的状态,用二进制0和1表示数据块的状态,每个数据块在位图中只占一位。
3、 数据文件
表空间所有数据都是以数据文件存储在磁盘上,一个表空间可以包含一个或者多个数据文件。
二、本地管理表空间的管理
创建表空间是需要指定区管理方式、段管理方式、表空间包含对的数据文件。
CREATE TABLESPACE tablespace_name
DATAFILE ‘dir/filename’ SIZE datafile_size
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
SEGMENT SPACE MANAGEMENT AUTO
BLOCKSIZE 16K;
EXTENT MANAGEMENT LOCAL指定表空间的管理方式为本地管理;
AUTOALLOCATE表示表空间区的大小由数据库服务器根据实际情况指定,UNIFORM SIZE为表空间指定统一大小的区;
SEGMENT MANAGEMENT指定表空间中段的管理方式,有AUTO和MANUAL两种;
BLOCKSIZE指定标准块大小。
dba_tablespaces:获得表空间的基本信息
dba_data_files:获得表空间中数据文件的相关信息
删除表空间:
DROP TABLESPACE ts_name INCLUDING CONTENTS AND DATAFILES;
三、大文件表空间的管理
特殊类型表空间,每个大文件表空间只包含一个数据文件。主要目的是支持自动存储管理(ASM)和RAID、条带状逻辑卷,为数据库提供大容量的、对用户透明的存储空间。
大文件表空间的区管理方式只能是本地管理段管理方式只能是自动管理。UNDO表空间、临时表空间和SYSTEM表空间属于例外情况,区管理方式只能是本地管理,段管理方式可以是自动或手动。
在CREATE DATABASE时可使用SET DEFAULTBIGFILE TABLESPACE设置表空间默认大文件表空间。
创建大文件表空间:
CREATE BIGFILE TABLESPACE bts_name
DATAFILE ‘dir/filename’ SIZE
修改表空间大小:
ALTER TABLESPACE bts_name RESIZE 20G;
修改数据文件的自动扩展属性:
ALTER TABLESPACE bts AUTOEXTEND ON NEXT 5g MAXSIZE 10T;
四、临时表空间的管理:
CREATE TEMPORARY TABLESPACE.
Oracle建议将临时表空间的大小设置为排序区的整数倍。
临时表空间的数据文件信息通过dba_temp_files查看。
为某个用户指定临时表空间:
ALTER USER u_name TEMPORARY TABLESPACE tts_name;
修改表空间属于某个临时表空间组:
ALTER TABLESPACE tts TABLESPACE GROUP group1;
从dba_tablespace_groups数据字典视图可查看表空间组相关信息。
五、UNDO表空间管理
CREATE UNDO TABLESPACE创建UNDO表空间。
UNDO_TABLESPACE参数指定可用的UNDO表空间。
UNDO_RETENTION参数指定无效UNDO数据在UNDO表空间保留时间。
六、表空间的扩展
表空间数据文件指定原则:
Ø 使用少量大文件
Ø 同一表空间,不同数据文件存放在不同的磁盘上
Ø 数据文件和重做日志文件分别放在不同的磁盘上
数据文件的数目受MAXDATAFILES永久参数和初始化参数DB_FILES制约。
1、添加数据文件
ALTER TABLESPACEts1
ADD DATAFILE|TEMPFILE‘………’ SIZE 10G;
2、扩展数据文件
ALTER DATABASEDATAFILE ‘……’
AUTOEXTEND ONNEXT 128K MAXSIZE 100M;
取消自动扩展
ALTER DATABASE DATAFILE‘……’ AUTOEXTEND OFF;
重新制定文件大小
ALTER DATABASEDATAFILE ‘……’ RESIZE 10G;
七、表空间的维护
1、 表空间的联机与脱机
对某个表空间进行备份,对某些数据进行保护,不允许用户访问。
SYSTEM表空、默认的临时表空间、正在使用的UNDO表空间不能脱机。
脱机命令格式:
ALTER TABLESPACE 表空间名 OFFLINE 脱机方式
脱机方式:
NORMAL,默认脱机方式,指将表空间置于正常的脱机方式。脱机前,首先要保证数据库高速缓存中的数据与数据文件一致。当表空间再次联机的时候不需要恢复数据。
TEMPRORAY,指以临时方式将表空间脱机。在脱机前CKPT进程发出一次检查点,将数据库高速缓存区的脏数据写入数据文件,但是CKPT不检查数据文件的状态,如果某个数据文件损坏,部分脏缓冲区的数据无法写入文件,所以表空间下次重新联机时需要进行数据恢复。
IMMEDIATE,将表空间立即置于脱机状态,表空间下次重新联机时需要进行数据恢复。
FOR RECOVER,用户恢复表空间的脱机状态。已经对表空间进行了备份,联机后,并希望用以前的备份对表空间进行恢复。
联机命令:
ALTER TABLESPACE 表空间名 ONLINE;
2、 数据文件的联机与脱机
数据文件属于表空间,当表空间处于联机状态时,所有数据文件处于联机状态,除非数据文件损坏。表空间处于脱机状态时所有的数据文件处于脱机状态。
改变数据文件状态的命令:
ALTER DATABASE DATAFILE ‘FILE’OFFLINE|ONLINE;
如果数据文件损坏,数据库服务器将使其自动脱机。
3、 改变表空间读写状态
ALTER TABLESPACE ts_name READ ONLY|READE WRITE;
4、 数据文件的移动和重命名
目的是为了更换磁盘或者平衡磁盘的IO操作。
数据文件移动和重命名的步骤:
Ø 将数据文件处于脱机状态
a、 对于普通表空间,将表空间置于脱机状态
b、 对于SYSTEM表空、默认的临时表空间、正在使用的UNDO表空间,将数据库切换到MOUNT状态。
Ø 在磁盘系统中将磁盘上的数据文件移动到另一位置,或者仅仅修改名字
Ø 在数据库中对文件重命名
ALTER TABLESPACE TS1 RENAME DATAFILE
‘file1’ TO ‘file2’
Ø 将数据文件置于联机状态