创建和管理表空间

创建表空间

典型语句:

 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命令上指定数据文件名执行重写操作。

05-11 11:30