创建和管理表空间
创建表空间
典型语句:
CREATE SMALLFILE TABLESPACE "JWTS"
DATAFILE '/u01/app/oracle/oradata/oraclzjwts01.dbf'
SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 200M
LOGGIN
DEFAULT NOCOMPRESS
ONLINE
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
SEGMENT SPACE MANAGEMENT AUTO;
第1行:表空间使SMALLFILE。这意味着,它可以由多个数据文件组成。替换项是BIGFILE,在这种情况下,将无法在后来添加第二个数据文件(但可以重新调整第一个文件的大小)。SMALLFILE是默认值。
第2行:数据文件的名称和位置
第3行:创建的数据文件大小是100MB,变满时,可以自动扩大10MB,最大为200MB。默认方式下,不会启用自动扩展
第4行:表空间中针对段的所有操作将生成重做内容,这是默认做法。可以为极少操作(如生成索引)仅用重做的生成
第5行:表空间中的对象未压缩。这是默认方式
第6行:表空间将立即联机(可供使用)。这是默认方式
第7行:表空间使用位图来分配空间,其大小会自动设置,这是默认方式
第8行:表空间中的段将使用位图来跟踪块的使用情况,这是默认方式
更改表空间
1.重命名表空间及其数据文件
ALTER TABLESPACE oldname RENAME TO newname;
可以在表空间使用期间对其进行重命名,但要重命名数据文件,数据文件必须处于脱机状态。
2.使表空间联机或脱机
ALTER TABLESPACE tablespacename OFFLINE [ NORMAL | IMMEDIATE | TEMPORARY ];
ALTER TABLESPACE tablespacename ONLINE;
3.将表空间标记为只读
ALTER TABLESPACE tablespacename [ READ ONLY | READ WRITE ];
将表空间标记为只读后,将不能使用DML语句来更新其中的任何对象。但是可以删除它们,删除表并不对表产生实际影响,它是针对数据字典的事务,会删除描述表及其列的行:数据字典位于SYSTEM表空间,此表空间并不是只读的。
4.重新调整表空间的大小
要重新调整表空间的大小,可以向其添加数据文件,也可以调整现有数据文件的大小。如果在创建文件时使用AUTOEXTEND语法,则可以根据需要自动向上重新调整数据文件的大小。否则,必须使用命令手动更改:
ALTER DATABASE DATAFILE 'filename' RESIZE n[ M | G | T ];
添加数据文件:
ALTER DATABASE ADD DATAFILE 'filename' SIZE n[ M | G | T ];
创建文件时,可以添加自动扩展子句:
ALTER DATABASE DATAFILE 'filename' AUTOEXTEND ON NEXT n[ M | G | T ] MAXSIZE n[ M | G | T ] ;
删除表空间
DROP TABLESPACE tablespacename [ INCLUDE CONTENTS [ AND DATAFILES ] ];
如为指定INCLUDE CONTENTS关键字,但表空间中包含任何对象,那么删除操作将失败。使用这些关键字指示Oracle首先删除对象,然后删除表空间。即便如此,在一些环境下同样会失败,如果表空间包含的表与另一个表空间的表存在外键关系,而且此表是父表,则删除将失败。
如果未指定AND DATAFILES关键字,则将删除表空间及其内容,但数据文件仍保存在磁盘上。Oracle将不了解它们位于何处,必须使用操作系统命令删除它们。
区间管理
区间管理方法为每个表空间设置,应用于表空间中的所有段。字典管理已不建议使用。
本地区间管理使用在每个数据文件中存储的位图。位图中的每个位覆盖一个块的范围,在分配空间时,适当的位从0变成1。在创建本地管理的表空是,一个重要的选项是unform size。如果指定了此选项,那么,在表空间中分配的每个区间将使用此大小。这极大地提高了空间管理效率,因为每个位覆盖的块范围可以更大:每个区间只需一位。
默认语法:
create tablespace any_tabs
datafile 'any_tabs_01.dbf' size 10g
extent management local autoallocate;
在表空间中创建多个段时,Oracle将分配一个8块(64KB)的区间。随着段的增长,将需要更多区间,Oracle最多可分配16个这样大小的区间,之后它会分配128块(1MB)的区间。因此,在不断增加的块中为快速增长的段提供空间。
如果数据库从先前版本升级而来,则可能包括字典管理的表空间,检查语句:
select tablespace_name, extent_management from dba_tablespaces;
使用下面的PL/SQL程序,将任何字典管理的表空间转换为本地管理:
excute dbms_space_admin.tablespace_migrate_to_local ('tablespacename');
管理段空间
管理段空间的方法为每个表空间设置,应用于表空间中所有的段。不建议使用手动管理。
自动管理表空间方式创建的每个段都有一组位图,位图描述每个块的满度。每个段有5个位图,一个块将恰好位于一个位图上。位图跟踪块中使用的空间:一个位图用于全满块,多个位图用于满度为75%~100%的块、50%~75%的块、25%~50%的块、0%~25%的块。当搜索在其中插入行的块时,会话服务器进程将首先查看行的大小来确定要搜索的位图。例如,如果块大小是4KB,而要插入的行是1500B,则将通过搜索满度为25%~50%的位图来找到适当的块。此位图中的每个块至少有2KB的可用空间。随着行的插入或删除,或通过更新更改大小,位图将自动更新。
要查看任何表空间是否在使用手动管理,运行此查询:
select tablespace_name, segment_space_management from dba_tablespaces;
此查询应返回的唯一表空间是SYSTEM、撤销表空间和临时表空间。这些表空间中的段由Oracle管理,不需要任何自动机制的帮助。无法将表空间从手动段空间管理转换为自动段空间管理。唯一的解决方案是使用自动段空间管理方法新建表空间,将段移入其中(此时将生成位图),并删除旧的表空间。
OMF
有了Oracle管理的文件(Oracle-Managed Files,OMF),DBA将不必了解有关文件系统的任何知识。将以完全自动的方式完成数据库文件的创建。要启用OMF,请设置一部分或所有下列实例参数:
DB_CREATE_FILE_DEST
DB_CREATE_ONLINE_LOG_DEST_1
DB_CREATE_ONLINE_LOG_DEST_2
DB_CREATE_ONLINE_LOG_DEST_3
DB_CREATE_ONLINE_LOG_DEST_4
DB_CREATE_ONLINE_LOG_DEST_5
DB_RECOVERY_FILE_DEST
DB_CREATE_FILE_DEST参数指定独有数据文件和联机重做日志文件的默认位置。
DB_CREATE_ONLINE_LOG_DEST_n参数指定联机重做日志文件的默认位置,且优先于DB_CREATE_FILE_DEST。
DB_RECOVERY_FILE_DEST设置归档重做日志文件和RMAN备份文件的默认位置。
除了默认文件位置外,OMF还生产文件名并在默认方式下设置文件大小。设置这些参数可以极大地简化与文件相关的操作。启用OMF后,始终可以通过CREATE TABLESPACE命令上指定数据文件名执行重写操作。