撤銷段的自動管理
2024-07-21 02:38:45
供稿:網友
作者:gototop
在Oracle 9i里,一個很顯著的新特性就是引入了自動的回滾段治理,當使用了AUM (Automatic Undo Management)時,為了區別,名稱也由原來的ROLLBACK SEGMENT(回滾段)變成UNDO SEGMENT(撤銷段),相對應的是UNDO TABLESPACE。 當然我們也可以繼續使用傳統的MANUAL方式來治理撤銷段。
一、初始化參數
使用下面的參數來設置有ORACLE自動治理撤銷段:
UNDO_MANAGEMENT = AUTO
ORACLE會自動完成撤銷段的創建、刪除以及ONLINE/OFFLINE,而DBA將無法干預所有以上操作。
假如想自己來治理回滾段可以將UNDO_MANAGEMENT設成MANUAL(DEFAULT就是MANUAL的)。雖然我們可以在UNDO表空間上創建回滾段,但ORACLE并不建議這樣做。
當使用了AUM,我們唯一需要做的就是至少創建一個UNDO表空間,我們可以創建多個UNDO表空間,然后使用下面的參數來指定具體使用哪個。
UNDO_TABLESPACE =UNDORBS1
SQL> l
1* select name ,value from v$parameter where name like 'undo%'
SQL> /
undo_management MANUAL
undo_tablespace UNDOTBS1
undo_supPRess_errors FALSE
undo_retention 10800
創建多個UNDO表空間的好處是,我們可以根據不同的應用在不同大小的UNDO表空間之間進行切換。
二、UNDO表空間的創建
1、在建數據庫是創建UNDO表空間,具體方法參見本人寫的Oracle 9i安裝、建庫與升級。文章在www.ncn.cn上有下載。
2、我們也可以通過下面的語句來創建:
Create undo tablespace undotbs2 datafile ‘/dev/rundotbs2_1.dbf’ size 100m;
三、UNDO表空間特性
1、UNDO表空間默認就是LOCAL治理方式:
SQL> l
1 select TABLESPACE_NAME, CONTENTS,EXTENT_MANAGEMENT, ALLOCATION_TYPE,
2 SEGMENT_SPACE_MANAGEMENT
3* from dba_tablespaces where contents='UNDO'
SQL> /
TABLESPACE_NAME CONTENTS EXTENT_MANAGEMENT ALLOCATION_TYPE SEGMENT_SPAC
-------------------- ------------------ -------------------- ------------------ ------------
UNDOTBS1 UNDO LOCAL SYSTEM MANUAL
UNDOTBS2 UNDO LOCAL SYSTEM MANUAL
2、除撤銷段外,我們不能在UNDO表空間上作其他操作:
SQL> create table gototop_t1(c1 number) tablespace undotbs1;
create table gototop_t1(c1 number) tablespace undotbs1
*
ERROR 位于第 1 行:
ORA-30022: Cannot create segments in undo tablespace
SQL> l
1* create rollback segment ncn_rb1 tablespace undotbs1
SQL> /
create rollback segment ncn_rb1 tablespace undotbs1
*
ERROR 位于第 1 行:
ORA-30019: Illegal rollback Segment Operation in Automatic Undo mode
3、一個實例職能使用一個UNDO表空間:
除了在INIT.ORA中指定UNDO表空間外,我們還可以使用下面的語句來在線更改實例所用的UNDO表空間:
SQL> alter system set undo_tablespace=undotbs2;
系統已更改。
四、撤銷段的特性
1、撤銷段自動創建:
Ø n個撤銷段(n基于sessionS參數,后面會具體講)
Ø 名字為_SYSSMUn$
Ø OWNER為PUBLIC(在RAC配置中有用)
Ø 選擇AUM后,無法手動治理
SQL> l
1 select owner,segment_name,tablespace_name,status
2* from dba_rollback_segs order by 4
SQL> /
OWNER SEGMENT_NAME TABLESPACE_NAME STATUS
---------- ------------------ -------------------- --------------------------------
PUBLIC _SYSSMU1$ UNDOTBS1 OFFLINE
PUBLIC _SYSSMU2$ UNDOTBS1 OFFLINE
PUBLIC _SYSSMU3$ UNDOTBS1 OFFLINE
PUBLIC _SYSSMU5$ UNDOTBS1 OFFLINE
PUBLIC _SYSSMU7$ UNDOTBS1 OFFLINE
PUBLIC _SYSSMU9$ UNDOTBS1 OFFLINE
PUBLIC _SYSSMU10$ UNDOTBS1 OFFLINE
PUBLIC _SYSSMU8$ UNDOTBS1 OFFLINE
PUBLIC _SYSSMU6$ UNDOTBS1 OFFLINE
PUBLIC RB1_CYX1 UNDOTBS1 OFFLINE
PUBLIC RB1_CYX UNDOTBS1 OFFLINE
SYS RB1_08 UNDOTBS1 OFFLINE
SYS RB1_07 UNDOTBS1 OFFLINE
SYS RB1_05 UNDOTBS1 OFFLINE
SYS RB1_04 UNDOTBS1 OFFLINE
SYS RB1_03 UNDOTBS1 OFFLINE
SYS RB1_02 UNDOTBS1 OFFLINE
SYS RB1_01 UNDOTBS1 OFFLINE
SYS RB3_06 UNDOTBS3 OFFLINE
SYS RB3_05 UNDOTBS3 OFFLINE
SYS RB3_04 UNDOTBS3 OFFLINE
SYS RB3_03 UNDOTBS3 OFFLINE
SYS RB3_02 UNDOTBS3 OFFLINE
SYS RB3_01 UNDOTBS3 OFFLINE
SYS RB2 INDX OFFLINE
PUBLIC _SYSSMU4$ UNDOTBS1 OFFLINE
SYS SYSTEM SYSTEM ONLINE
PUBLIC _SYSSMU11$ UNDOTBS2 ONLINE
PUBLIC _SYSSMU12$ UNDOTBS2 ONLINE
PUBLIC _SYSSMU13$ UNDOTBS2 ONLINE
PUBLIC _SYSSMU14$ UNDOTBS2 ONLINE
PUBLIC _SYSSMU15$ UNDOTBS2 ONLINE
PUBLIC _SYSSMU16$ UNDOTBS2 ONLINE
PUBLIC _SYSSMU17$ UNDOTBS2 ONLINE
PUBLIC _SYSSMU18$ UNDOTBS2 ONLINE
PUBLIC _SYSSMU19$ UNDOTBS2 ONLINE
PUBLIC _SYSSMU20$ UNDOTBS2 ONLINE
已選擇37行。
SQL>
因為我在系統上作測試,之前手動建過回滾段,所以上面返回結果顯一般多。
2、只有活動的UNDO表空間上的撤銷段和系統回滾段是ONLINE的,其他的撤銷段都是OFFLINE的。
這一點從上面的輸出中可以清楚地看到。
不過,也不一定一開始所有的撤銷段都會ONLINE的,這要依靠于初始化參數SESSIONS的值,默認SESSIONS = 1.1 * PROCESSES + 5,他決定了系統的并發用戶數。下面的實驗可以讓你對這一情況有個明確的熟悉。
我們將SESSIONS調小后重起數據庫,可以看到活動的UNDO表空間UNDOTBS1上共10個撤銷段,但只ONLINE了5個。
SQL> show parameter sessions
NAME TYPE VALUE
------------------------------------ ---------------------- -----------
java_max_sessionspace_size integer 0
java_soft_sessionspace_limit integer 0
license_max_sessions integer 0
license_sessions_warning integer 0
logmnr_max_persistent_sessions integer 1
mts_sessions integer 0
sessions integer 27
shared_server_sessions integer 0
SQL> select owner,segment_name,tablespace_name,status
2 from dba_rollback_segs;
OWNER SEGMENT_NAME TABLESPACE_NAM STATUS
------------ -------------------- -------------- ----------
SYS SYSTEM SYSTEM ONLINE
PUBLIC _SYSSMU1$ UNDOTBS1 ONLINE
PUBLIC _SYSSMU2$ UNDOTBS1 ONLINE
PUBLIC _SYSSMU3$ UNDOTBS1 ONLINE
PUBLIC _SYSSMU4$ UNDOTBS1 ONLINE
PUBLIC _SYSSMU5$ UNDOTBS1 ONLINE
PUBLIC _SYSSMU6$ UNDOTBS1 OFFLINE
PUBLIC _SYSSMU7$ UNDOTBS1 OFFLINE
PUBLIC _SYSSMU8$ UNDOTBS1 OFFLINE
PUBLIC _SYSSMU9$ UNDOTBS1 OFFLINE
PUBLIC _SYSSMU10$ UNDOTBS1 OFFLINE
PUBLIC _SYSSMU11$ UNDOTBS2 OFFLINE
PUBLIC _SYSSMU12$ UNDOTBS2 OFFLINE
PUBLIC _SYSSMU13$ UNDOTBS2 OFFLINE
PUBLIC _SYSSMU14$ UNDOTBS2 OFFLINE
PUBLIC _SYSSMU15$ UNDOTBS2 OFFLINE
PUBLIC _SYSSMU16$ UNDOTBS2 OFFLINE
PUBLIC _SYSSMU17$ UNDOTBS2 OFFLINE
PUBLIC _SYSSMU18$ UNDOTBS2 OFFLINE
PUBLIC _SYSSMU19$ UNDOTBS2 OFFLINE
PUBLIC _SYSSMU20$ UNDOTBS2 OFFLINE
SYS RB1_01 UNDOTBS1 OFFLINE
SYS RB1_02 UNDOTBS1 OFFLINE
SYS RB1_0