【臨時表空間組】臨時表空間組的建立、維護及應用

eddy0lion發表於2018-02-08
關於臨時表空間組的概念和簡單描述可以參考Oracle官方文件的“Oracle Database SQL Reference”()。更多資訊可以參考MOS的“10g: Temporary Tablespaces Group [ID 245645.1]”文章。
本文就臨時表空間組的建立及簡單維護做一個實踐。

1.資料庫版本資訊
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

2.建立臨時表空間組TEMP_GRP,其中包含兩個臨時表空間TEMP1、TEMP2
sys@ora10g> create temporary tablespace TEMP1 tempfile '/oracle/oradata/ora10g/temp1_01.dbf' size 10m autoextend on tablespace group group1;

Tablespace created.

sys@ora10g> create temporary tablespace TEMP2 tempfile '/oracle/oradata/ora10g/temp2_01.dbf' size 10m autoextend on tablespace group group1;

Tablespace created.

3.使用DBA_TABLESPACE_GROUPS檢視可以檢視臨時表空間組的資訊
sys@ora10g> select * from dba_tablespace_groups;

GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
GROUP1                         TEMP1
GROUP1                         TEMP2

可見,臨時表空間組GROUP1包含了兩個臨時表空間TEMP1和TEMP2。滿足了我們臨時表空間組建立的要求。

4.指定臨時表空間組GROUP1為所有新建立的使用者的預設臨時表空間
sys@ora10g> alter database default temporary tablespace GROUP1;

Database altered.

sys@ora10g> create user secooler identified by secooler;

User created.

sys@ora10g> select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users where username = 'SECOOLER';

USERNAME       DEFAULT_TABLESPACE    TEMPORARY_TABLESPACE
-------------- --------------------- ---------------------
SECOOLER       USERS                 GROUP1

OK,此時新建立的secooler使用者的預設臨時表空間已經指定到了臨時表空間組GROUP1上。

5.將臨時表空間TEMP2移動到臨時表空間組GROUP2
sys@ora10g> alter tablespace TEMP2 tablespace group GROUP2;

Tablespace altered.

sys@ora10g> select * from dba_tablespace_groups;

GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
GROUP1                         TEMP1
GROUP2                         TEMP2

系統中本沒有GROUP2臨時表空間組,此處系統會自動建立這個資料庫物件。

6.移除臨時表空間組中所有臨時表空間後臨時表空間組會自動刪除
sys@ora10g> select * from dba_tablespace_groups;

GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
GROUP1                         TEMP1
GROUP2                         TEMP2

sys@ora10g> alter tablespace TEMP2 tablespace group '';

Tablespace altered.

sys@ora10g> select * from dba_tablespace_groups;

GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
GROUP1                         TEMP1

7.臨時表空間組應用一例
sys@ora10g> alter tablespace TEMP2 tablespace group GROUP1;

Tablespace altered.

sys@ora10g> select * from dba_tablespace_groups;

GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
GROUP1                         TEMP1
GROUP1                         TEMP2

開啟兩個不同的session連線到secooler使用者執行下面排序語句
secooler@ora10g> select a.table_name, b.table_name from all_tables a, all_tables b order by 1;

經過反覆嘗試之後可以看到同一個使用者的不同session可以使用到臨時表空間組中的不同臨時表空間
sys@ora10g> select username, session_num, tablespace from v$sort_usage;

USERNAME                       SESSION_NUM TABLESPACE
------------------------------ ----------- -------------------------------
SECOOLER                              1506 TEMP1
SECOOLER                              3662 TEMP2

8.小結
使用臨時表空間組的優勢及注意事項:
1.臨時表空間組中可以包含無數個臨時表空間,沒有限制,這樣擴大了臨時表空間的大小,保證有充足的臨時表空間;
2.臨時表空間組的名字不可以和已有的臨時表空間名字相同;
3.臨時表空間組不是顯式建立的,而是隨臨時表空間被指定到臨時表空間組時隱式建立的。當臨時表空間組中的所有臨時表空間被移除或被刪除之後,該臨時表空間組也隨即被刪除;
4.同一個使用者連線的多個會話可以使用到臨時表空間組中的不同臨時表空間,提高系統的效能。

Good luck.

secooler
10.07.13

-- The End --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28853590/viewspace-2150958/,如需轉載,請註明出處,否則將追究法律責任。

相關文章