ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 10G新特性: 临时表空间组(temporary tablespace group)

10G新特性: 临时表空间组(temporary tablespace group)

原创 Linux操作系统 作者:kewin 时间:2011-09-14 16:48:48 0 删除 编辑
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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-03-10

  • 博文量
    125
  • 访问量
    579600