10G新特性: 臨時表空間組(temporary tablespace group)

kewin發表於2011-09-14
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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章