10G新特性: 临时表空间组(temporary tablespace group)
Kevin Zou
2011-9-13
在生产环境上会遇到在一个DB里有多个临时表空间,不同的应用各自拥有专属的临时表空间;由于应用的特性,有的空间使用率很高,有的就很空闲,如何充分、平均使用的这些临时表空间呢?
在10G,Oracle引入了一个新特性:临时表空间组(temporary tablespace group)。当一个应用/SESSION有较多的排序需要用到临时表空间时,那可以使用GROUP中其他的临时表空间。
GROUP概念就是把具有相同属性的东西放到一起。顾名思义:temporary tablespace group就是把系统的临时表空间放到一起。
临时表空间组至少有一个表空间,就像一个表空间至少有一个数据文件,没有上限;
临时表空间组共享了表空间的名称空间,就是说临时表空间组不能和其他的表空间重名;
当为数据库指定临时表空间或为用户指定临时表空间时,可以使用临时表空间组的名称;
临时表空间组无法显式的创建,没有相关的CREATE GROUP 命令:当第一个临时表空间指定给它时则隐式创建,当最后一个临时表空间移除时则隐式的被删除;
任何一个临时表空间可以从一个GROUP移到另外一个GROUP;从一个GROUP中移走; 如果临时表空间不属于任何一个临时表空间组,那么这个表空间可以被加入一个临时表空间组;
使用临时表空间组可解决如下问题:1.避免由于单一临时表空间不足导致无法而保存排序结果,尤其是分区表的排序;2.当用户通过多个会话同时连接时,可使用不同的临时表空间;3.允许并行执行服务器在单一并行系统中使用多临时表空间;
SQL> select * from v$version where rownum <2;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
当前数据库上没有任何的TEMPORARY TABLESPACE GROUP。
SQL> select * from dba_tablespace_groups;
未选定行
在创建一个新的TABLESPACE时,并指定了加入一个GROUP,这时ORACLE会自动创建一个新的GROUP.
SQL> create temporary tablespace t1 tempfile 'D:\ORACLE\ORADATA\TEST\t01.dbf' si
ze 2M tablespace group g1;
表空间已创建。
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
G1 T1
把一个已经存在的临时表空间加入到G1 组;
SQL> alter tablespace temp tablespace group g1;
表空间已更改。
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
G1 TEMP
G1 T1
把一个临时表空间移到其他组里,这组在ALTER 命令中创建;
SQL> alter tablespace temp tablespace group g2;
表空间已更改。
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
G2 TEMP
G1 T1
把个临时表空间移出组:
SQL> alter tablespace temp tablespace group '';
表空间已更改。
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
G1 T1
由于TEMPORARY TABLESPACE (GROUP) 是共享的命名空间,所以不能重名:
SQL> alter tablespace temp tablespace group t1;
alter tablespace temp tablespace group t1
*
第 1 行出现错误:
ORA-01543: 表空间 'T1' 已存在
当GROUP里最后一个TABLESPACE被移走,该GROUP会自动删除;
SQL> drop tablespace t1 including contents and datafiles;
表空间已删除。
SQL> select * from dba_tablespace_groups;
未选定行
出现DEFAULT TEMPORARY TABLESPACE的地方,都可以用GROUP 来代替:
SQL> alter user kk temporary tablespace g1;
用户已更改。
SQL> alter database default temporary tablespace g1;
数据库已更改。
如果用户kk 有多个session同时登陆上系统,而且执行sort的操作,从v$sort_usage 视图看到不同的tablespace。
在版本10.1.0.4 上会出现这样的BUG: One Tablespace Exists in V$TABLESPACE but Not in DBA_TABLESPACES。而这个TABLESPACE就是GROUP 名称;
-THE END-
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/40239/viewspace-707423/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/40239/viewspace-707423/