使用表空间组来管理多个临时表空间
表空间组能让用户使用来自多个临时表空间中的临时空间。使用表空间组,而不是单个临时表空间,可以减少由于一个临时表空间没有足够的空间来处理排序而引发的问题。表空间组能让单个并行操作的并行执行服务器进程使用多个临时表空间。表空间组有以下特性:
.它包含至少一个临时表空间。对于一个表空间组可以包含的临时表空间数量没有限制。
.它共享命名空间,所以表空间组的名字不能与任何表空间名相同。
.当对数据库或用户指定缺省临时表空间时可以使用表空间组来代替。
我们不能显示创建一个表空间组,但可以在创建第一临时表空间时隐式来创建表空间组。当表空间组中的最后一个临时表空间被删除后,表空间组也会被删除。查询dba_tablespace_groups可以查看相关表空间组与相关的临时表空间。
创建表空间组
当执行create temporary tablespace或alter tablespace语句时通过指定tablespace group子句来隐式创建表空间组并且所指定的表空间组要在当前数据库中并不存在。例如,如果表空间组group1,group2不存在,那么下面的语句将会创建这两个表空间组,并且每个表空间组只有一个临时表空间存在。
SQL> create temporary tablespace temp2 tempfile '+DATA/JY/4B2C6373AE2547CCE053AB828A0A7CA3/TEMPFILE/temp2.dbf' size 50M tablespace group group1; Tablespace created. SQL> alter tablespace temp tablespace group group2; Tablespace altered. SQL> select * from dba_tablespace_groups; GROUP_NAME TABLESPACE_NAME ------------------------------ ------------------------------ GROUP2 TEMP GROUP1 TEMP2
更改表空间组成员
可以向现有表空间组增加临时表空间,这可以通过执行包含有tablespace group子句的create temporary tablespace或alter tablespace语句来完成。
下面的语句将向现有表空间组group1中增加一个临时表空间temp3,因些表空间组group1包含临时表空间temp2与temp3。
SQL> create temporary tablespace temp3 tempfile '+DATA/JY/4B2C6373AE2547CCE053AB828A0A7CA3/TEMPFILE/temp3.dbf' size 50M tablespace group group1; Tablespace created. SQL> select * from dba_tablespace_groups; GROUP_NAME TABLESPACE_NAME ------------------------------ ------------------------------ GROUP2 TEMP GROUP1 TEMP2 GROUP1 TEMP3
下面的语句将向现有表空间组group2中增加一个临时表空间temp2,但因为临时表空间temp2已经存在,语句只是将临时表空间temp2从表空间组group1移到表空间组group2中。
SQL> select * from dba_tablespace_groups; GROUP_NAME TABLESPACE_NAME ------------------------------ ------------------------------ GROUP2 TEMP GROUP2 TEMP2 GROUP1 TEMP3
现在表空间组group2包含临时表空间temp,temp2,表空间组group1只包含临时表空间temp3。
下面的语句将从表空间组group1中删除临时表空间temp3
SQL> alter tablespace temp3 tablespace group ''; Tablespace altered. SQL> select * from dba_tablespace_groups; GROUP_NAME TABLESPACE_NAME ------------------------------ ------------------------------ GROUP2 TEMP GROUP2 TEMP2
临时表空间temp3不再属于任何表空间组。因此表空间组group1不包含任何临时表空间,因此隐式地删除了表空间组group1。
指定表空间组作为数据库的缺省临时表空间
通过执行alter database … default temporary tablespace语句来指定一个表空间组作为数据库的临时表空间。
SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE'; PROPERTY_NAME PROPERTY_VALUE -------------------------------------------------- -------------------------------------------------- DEFAULT_TEMP_TABLESPACE TEMP SQL> alter database default temporary tablespace group2; Database altered. SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE'; PROPERTY_NAME PROPERTY_VALUE -------------------------------------------------- -------------------------------------------------- DEFAULT_TEMP_TABLESPACE GROUP2
任何没有显示指定临时表空间的用户,将可以使用临时表空间temp,temp2中的空间。当表空间组被指定作为数据库的临时表空间时,不能删除表空间组中的任何成员。要删除临时表空间必须首先要删除表空间组。同样不能删除作为数据库的缺省临时表空间。