分类:
2008-10-28 20:07:16
表空间管理方式有以下两种:
第一、字典管理表空间
将Oracle的区管理信息存放在表空间的字典中进行管理,所有区的分配与释放,都会使字典的记录的增减变动。也就是在字典的记录中会执行更新、插入、删除操作,在执行上述操作时,都会生成重做日志,对字典的管理,将影响正常操作的效率,并且在区分配、回收的过程中,产生磁盘碎片,如果磁盘碎片增加到一定的程度,会浪费空间,严重影响效率,同时,Oracle 在管理表空间的管理中,会产生递归SQL。
如果要用字典的方式管理表空间,可以在创建表空间时,使用: EXTENT MANAGEMENT DICTIONARY 选项。
第二、本地管理表空间
本地管理是以位图的方式,将区的分配信息保存在数据文件本身,所有区的分配等操作都只是位图的运算,位图中的每一位对应数据文件中的一个区或几个连续的区,这样在进行区管理时,生成的重做日志将非常少,并且运行的效率很高。并且产生磁盘碎片很少。
如果要用本地管理表空间,可以在创建表空间时,使用: EXTENT MANAGEMENT LOCAL 选项。
在表空间的管理中,Oracle8I中可以采用字典管理,也可以采用本地管理,如果不指定,将采用字典管理方式。
在 Oracle9I中,推荐采用本地管理的方式,如果不指定,将采用本地管理的方式。
从Oracle 10g开如,要求采用本地管理的方式。
SQL>conn /as sysdba SQL> create user test1 identified by test1 default tablespace ringidx;
SQL> alter database default tablespace ring;
SQL> create user test identified by test;
SQL> select username, default_tablespace defspace from dba_users where username='TEST'; USERNAME DEFSPACE -------------- ---------------- TEST RING
SQL> select username, default_tablespace defspace from dba_users where username='TEST1'; USERNAME DEFSPACE -------------- ---------------- TEST1 RING
SQL> select username, default_tablespace defspace from dba_users where username='TEST1'; USERNAME DEFSPACE -------------- ---------------- TEST1 RING
select * from V$SYSAUX_OCCUPANTS where OCCUPANT_NAME = 'ODM' OCCUPANT_NAME OCCUPANT_DESC SCHEMA_NAME MOVE_PROCEDURE MOVE_PROCEDURE_DESC SPACE_USAGE_KBYTES ------------- ------------- ----------- -------------- ------------------- ------------------ ODM Oracle Data Mining DMSYS MOVE_ODM Move Procedure for Oracle Data Mining 5568 1 rows selected
SQL> alter tablespace ring rename to ring1;
SQL> select username, default_tablespace defspace from dba_users where username='TEST'; USERNAME DEFSPACE -------------- ---------------- TEST RING1
表空间是ORACLE数据库中最大的逻辑结构,ORACLE数据库就是由一个或多个表空间组成的。
(一)表空间概述:
一个表空间的大小等于其中所有数据文件的大小之和。数据库的大小等于其中所有表空间的大小之和。表空间可以被联机和脱机,SYSTEM表空间不能脱机。
表空间可以分为系统表空间和非系统表空间
系统表空间包括SYSTEM表空间和SYSAUX表空间,其余的表空间就是非系统表空间。非系统表空间分位临时表空间和撤销表空间
临时表空间可以被所有用户共享使用,例如TEMP表空间可以被所有用户共享使用。某个用户使用哪个临时表空间应该是在创建该用户时候制定的。数据库默认临时表空间是在创建数据库时由DEFAULT TEMPORARY TABLE SPACE子句来指定的。撤销表空间是将回退段放入了撤销表空间,而由例程自动处理撤销表空间中的回退段,通过查询数据字典DBA_ROLLBACK_SEGS可以得到撤销表空间中回退段的信息。在ORACLE中可以创建多个撤销表空间但是同一时刻只允许激活一个撤销表空间,在初始化参数文件中用UNDO_TABLESPACE指出要激活的撤销表空间。
大文件表空间是ORACLE 10G新引进的表空间大文件表空间只能放置一个数据文件但其 数据文件可以包括4G个数据块,如果每个数据块的大小是8KB那么大文件表空间可以达到32TB。创建语句如下:
CREATE BIGFILE TABLESPACE MYBIGTBS01
DATAFILE 'E:\MYBIGTBS01_1.DBF' SIZE 20G
SEGMENT SPACE MANAGMENT AUTO
小文件表空间是以前的ORACLE表空间的新名称,在小文件表空间中可以放置多个数据文件,一个数据库可以放置多达64K个数据文件,SYSTEM表空间和SYSAUX表空间总是被创建位小文件表空间。
CREATE SMALLFILE TEMPORARY TABLESPACE MYTMPTBS01
TEMPFILE 'E:\MYTMPTBS01_1.DBF' SIZE 4M
UNIFORM SIZE 64K
表空间的区、段管理:
区管理方式分为字典管理方式和本地管理方式。
字典管理方式是传统的管理方式在字典管理方式下使用数据字典来管理存储空间的分配。
ORACLE强烈建议使用本地管理方式代替字典管理方式,在本地管理方式下表空间中区分配和区回收的管理信息都被存储在表空间的数据文件中而与数据字典无关。在本地管理方式下可以用UNIFORM统一分配表空间中所有区的大小都相同和AUTOALLOCATE自动分配两个选项来指定表空间区的分配方式。
在本地管理方式下指定段空间的管理方式可以用MANUAL(手动)方式和AUTO(自动)方式来指定管理方式。通过DBA_TABLESPACES数据字典视图可以查询当前数据库中各个表空间的区、段空间管理方式。此外创建表空间这种修改数据库的物理结构的信息会同时被记录到预警日志文件中
表空间的状态分为读写(READ_WRITE)和只读(READ_ONLY)两种。
(二)管理表空间的准则:
表空间的管理主要包括确定表空间的大小、安排表空间,创建、修改、删除表空间,选择修改表空间的区、段管理方式,设置表空间的状态等
要确定表空间的大小需要了解1.每行大约有多少字节,2.该表最初或至少要包含多少行,3.每个时间段该表中的行的增长情况,4.在该表上进行的操作的类型,5.哪种操作类型比较多
(三)创建表空间创建不同类型的表空间:
1.创建永久表空间:
CREATE TABLESPACE MYTBS01
DATAFILE 'E:\AAA.DBF' SIZE 2M
AUTOALLOCATE; ----自动分配区的大小
CREATE TABLESPACE MYTBS01
DATAFILE 'E:\AAA.DBF' SIZE 2M
UNIFORM SIZE 128K; ----手动分配区的大小
CREATE TABLESPACE MYTBS01
DATAFILE 'E:\AAA.DBF' SIZE 1M AUTOEXTEND ON NEXT 2M MAXSIZE 11M; ---可以在数据文件子句中指定文件的扩展方式
CREATE TABLESPACE MYTBS01
DATAFILE 'E:\AAA,DBF' SIZE 3M REUSE
UNIFORM
SEGMENT SPACE MANAGEMENT AUTO;---使用SEGMENT SPACE MANAGEMENT指定AUTO,如不使用就是MANUAL段管理方式
CREATE TABLESPACE MYTBS01
DATAFILE 'E:\AAA,DBF' SIZE 3M REUSE
BLOCKSIZE 8K ----指定标准的ORACLE块大小的表空间
SEGMENT SPACE MANAGEMENT AUTO;
2.创建大文件表空间:
CREATE TABLESPACE MYTBSBIG01
DATAFIEL 'E:\AAA.DBF' SIZE 2M
SEGMENT SPACE MANAGEMENT AUTO;
创建大文件表空间可以指定区分配方式但不能将段管理方式指定为MANUAL方式
3.创建临时表空间:
如果指定了TEMPORARY选项则创建的就是临时表空间,即ORACLE会用这种表空间来创建临时段,以便排序操作时使用
CREATE SMALLFILE TEMPORARY TABLESPACE MYTMPTBS01
TEMPFILE 'E:\AAA.DBF' SIZE 4M
UNIFORM SIZE 64K; ----创建临时表空间时区分配方式不能指定为AUTOALLOCATE方式
4.创建撤销表空间:
CREATE UNDO TABLESPACE MYUNDO
DATAFILE 'E:\AAA.DBF' SIZE 4M
AUTOALLOCATE; ----创建撤销表空间不能使用UNIFORM指定统一的区大小
如果要使用UNDO表空间的管理功能就需要在初始化参数文件中设置如下参数:
*.UNDO_MANAGEMENT='AUTO' *.UNDO_TABLESPACE='UNDOTBS1'
其中UNDO_MANAGEMENT参数必须设置成AUTO否则将使用回退表空间;UNDO_TABLESPACE参数用于指定要使用哪个UNDO表空间
可以使用如下语句修改初始化参数文件,将当前使用的UNDO表空间切换到另一个UNDO表空间
ALTER SYSTEM SET UNDO_TABLESPACE='NEW_UNDO_TABLESPACE' SCOPE=SPFILE;
正在使用的UNDO表空间是不能被删除的,只有在没有未提交的事务时才能将其删除,可以使用V$TRANSACTION视图检查其中是否还有未提交的事务。
(四)修改表空间:
通常扩展表空间的方法有添加数据文件、改变数据文件的大小、允许数据文件自动扩展三种方法
1.添加数据文件:
ALTER TABLESPACE MYTBS01 ADD DATAFILE 'E:\BBB.DBF' SIZE 3M;
ALTER TABLESPACE MYTBS01 ADD TEMPFILE 'E:\BBB.DBF' SIZE 3M;
2.改变数据文件大小:
ALTER DATABASE DATAFILE 'E:\AAA.DBF' RESIZE 4M;
3.允许数据文件自动扩展:
ALTER DATABASE DATAFILE 'E:\BBB.DBF' AUTOEXTEND ON NEXT 1M MAXSIZE 20M;
4.使表空间脱机:
ALTER TABLESPACE MYTBS01 OFFLINE;
当表空间处于脱机状态就不能访问该表空间了,SYSTEM\SYSAUX\TEMP\UNDOTBS1表空间不能被脱机
5.使表空间联机:
ALTER TABLESPACE NYTBS01 ONLINE;
6.使表空间只读:
ALTER TABLESPACE MYTBS01 READ ONLY;
7.使表空间可读写:
ALTER TABLESPACE MYTBS01 READ WRITE;
8.修改表空间的备份模式:
首先执行ALTER TABLESPACE TABLESPACE_NAME BEGIN BACKUP语句将表空间TABLESPACE_NAME设置成备份模式,类似于系统给需要备份的表空间加锁,防止在备份的过程中用户对此表空间进行操作
最后执行ALTER TABLESPACE TABLESPACE_NAME END BACKUP语句将表空间TABLESPACE_NAME设置成备份结束,类似于系统给正在备份的表空间解锁,以便用户对此表空间进行操作
9.修改表空间名称:
ALTER TABLESPACE MYTBS01 RENAME TO MYTBS01_NEW;
当表空间处于脱机状态时不能修改表空间名称
10.设置数据库默认表空间:
ALTER DATABASE DEFAULT TABLESPACE MYTBS01;
11.设置数据库默认临时表空间:
ALTER DATABSE DEFAULT TTMPORARY TABLESPACE MYTMP01;
12.查询数据库的默认表空间:
SELECT USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE FROM DBA_USERS;
13.删除表空间:
DROP TABLESPACE MYTBS01;
如果要删除一个非空的表空间就要使用INCLUDING CONTENTS选项
DROP TABLESPACE MYTBS07 INCLUDING CONTENTS;
14.查询表空间的基本信息查询视图DBA_TABLESPACES
15.查询表空间中数据文件的信息可以查询视图DBA_DATA_FILES
16.要统计数据库中每个表空间的空闲盘区的信息可以查询DBA_FREE_SPACE视图
17.查询表空间组的信息可以查询DBA_TABLESPACE_GROUPS视图
18.查询临时表空间的临时文件信息可以查询DBA_TEMP_FILES视图