Oracle 10g新特性: Temporary Tablespaces Group

10G的新特性:临时表空间组
Grouping temporary tablespaces within a single group enables a user to consume temporary space from multiple tablespaces. (将临时表空间打包成组后,用户就能同时使用多个表空间作为临时表空间)

临时表空间组的内容:
. A temporary tablespace group contains at least one tablespace. There is no limit for a group to have a maximum number of tablespaces.(临时表空间组包含至少一个表空间,至多无上限)
. It shares the namespace of tablespaces, thus its name cannot be the same as that of any tablespace.(共享表空间的命名空间,也就是说,临时表空间组的名称不能与任何一个表空间名称相同)
. A temporary tablespace group name can appear where a tablespace name would appear when assigning a default temporary tablespace for the database or assigning a temporary tablespace for a user.(当为数据库指定临时表空间或为用户指定临时表空间时,可以使用临时表空间组的名称)
. It is not created explicitly. It gets created implicitly when the first temporary tablespace is assigned to it and it is dropped when the last temporary tablespace is removed from it.(临时表空间组无法显式的创建。当第一个临时表空间指定给它时则隐式创建,当最后一个临时表空间移除时则隐式的被删除)
. Any temporary tablespace can be
–> moved from a group to another (if the group does not exist, it gets created)
–> removed from a group
–> added to a group if standalone

(任何一个临时表空间都可以被:1.从一个临时表空间组移动至另一个临时表空间组;2.从某临时表空间组中移除;3.如果临时表空间不属于任何一个临时表空间组,那么这个表空间可以被加入一个临时表空间组)
. The temporary tablespace group helps to
–> avoid the problem where one temporary tablespace is inadequate to hold the results of a sort, particularly on a partition table.
–> to use different temporary tablespaces when a user connects in multiple sessions simultaneously.
–> enable parallel execution servers in a single parallel operation to use multiple temporary tablespaces.
(使用临时表空间组可解决如下问题:1.避免由于单一临时表空间不足导致无法而保存排序结果,尤其是分区表的排序;2.当用户通过多个会话同时连接时,可使用不同的临时表空间;3.允许并行执行服务器在单一并行系统中使用多临时表空间)

以下为针对临时表空间组的实验,验证上面的说法
1. 不用显式创建组,在创建临时表空间时指定组,即可隐式创建。

SQL> create temporary tablespace TTG1 tempfile 'F:\ttg1.dbf' size 50m tablespace group GROUP1;
表空间已创建。

2.查询临时表空间组

SQL> select * from dba_tablespace_groups;
GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
GROUP1                         TTG1

3.向组中加入另一个临时表空间文件

SQL> create temporary tablespace TTG2 tempfile 'F:\ttg2.dbf' size 2m tablespace group GROUP1;
表空间已创建。
SQL> select * from dba_tablespace_groups;
GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
GROUP1                         TTG1
GROUP1                         TTG2

4.不用显式创建组,使用alter变换组的时候,也可以隐式创建组

SQL> alter tablespace TTG2 tablespace group GROUP2;
表空间已更改。
SQL> select * from dba_tablespace_groups;
GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
GROUP1                         TTG1
GROUP2                         TTG2

5.隐式删除组,A temporary tablespace can be removed from a group so as to be standalone

SQL> alter tablespace TTG2 tablespace group '';
表空间已更改。
SQL> select * from dba_tablespace_groups;
GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
GROUP1                         TTG1

6.查询临时表空间

SQL> select tablespace_name from dba_tablespaces where contents='TEMPORARY';
 TABLESPACE_NAME
 ------------------------------
 TEMP
 TTG1
 TTG2

7.将不属于任何组的临时表空间加入某组(Of course, this standalone temporary tablespace can be re-incorporated to a group)

SQL> alter tablespace TTG2 tablespace group GROUP1;
表空间已更改。
SQL> select * from dba_tablespace_groups;
GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
GROUP1                         TTG1
GROUP1                         TTG2

8.临时表空间组的名称不能与任何一个表空间名称相同

SQL> create temporary tablespace lmtemp5
  2           tempfile 'D:\ORACLE10\ORCL\temp1_05.dbf' size 50M
  3           tablespace group lmtemp5;
create temporary tablespace lmtemp5
*
第 1 行出现错误:
ORA-10918: TABLESPACE GROUP name cannot be the same as tablespace name

9.当为数据库指定临时表空间或为用户指定临时表空间时,可以使用临时表空间组的名称

SQL> alter user marshall temporary tablespace GROUP1;
用户已更改。
SQL> alter user marshall temporary tablespace TEMP;
用户已更改。
SQL> alter database default temporary tablespace GROUP1;
数据库已更改。
SQL> alter database default temporary tablespace TEMP;
数据库已更改。

10.当用户通过多个会话同时连接时,可使用不同的临时表空间【NB的演示】
——-DBA session

SQL> show user
USER 为 "SYS"
SQL> create temporary tablespace TTG2 tempfile 'F:\ttg2.dbf' size 250m autoextend on tablespace group GROUP1;
表空间已创建。
SQL> create temporary tablespace TTG3 tempfile 'F:\ttg3.dbf' size 250m autoextend on tablespace group GROUP1;
表空间已创建。
SQL> select * from dba_tablespace_groups;
GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
GROUP1                         TTG2
GROUP1                         TTG3
SQL> alter user marshall temporary tablespace GROUP1;
用户已更改。
SQL> select username, session_num, tablespace from v$sort_usage;
未选定行

——-Marshall session 1,2,3,4(4个session,执行同样的内容)

SQL> conn marshall/marshall
已连接。
SQL> show user
USER 为 "MARSHALL"
SQL> select a.table_name, b.table_name from dict A, dict B order by 1;
-------DBA session
SQL> select username,session_num,tablespace from v$sort_usage;
USERNAME                       SESSION_NUM TABLESPACE
------------------------------ ----------- -------------------------------
MARSHALL                               357 TTG3
MARSHALL                               365 TTG3
MARSHALL                                 3 TTG3
MARSHALL                               130 TTG2

很显然,当用户通过多个会话同时连接时,可使用不同的临时表空间,第四个连上来的用户使用的是TTG2表空间。

在来看一下dba_tablespace_groups的结构:

SQL> desc dba_tablespace_groups
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 GROUP_NAME                                NOT NULL VARCHAR2(30)
 TABLESPACE_NAME                           NOT NULL VARCHAR2(30)

SQL> select * from dba_tablespace_groups;

GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
GROUP1                         TTG2
GROUP1                         TTG3

临时表空间组是10G的新特性,根据上面的一点测试,发现非常有意思,尤其是“当用户通过多个会话同时连接时,可使用不同的临时表空间”。但是,这个特性在某些时候可能会触发Oracle Bug,下次谈。
参考:10g: Temporary Tablespaces Group [ID 245645.1]

普人特福的博客cnzz&51la for wordpress,cnzz for wordpress,51la for wordpress