UNDO資料表空間用於存放UNDO資料,當執行DML操作(insert、update、delete)的時候,oracle會將這些操作的舊資料寫入到UNDO段。
UNDO資料也稱為復原資料,用於確保資料的一致性。作用包括:
1、回退事務
2、讀一致性
3、事務恢複
4、閃回查詢
9i開始,管理UNDO資料可以使用UNDO資料表空間,也可以使用復原段。10g開始,oracle已經放棄使用復原段。
用於undo管理的參數:
1、UNDO_MANAGEMENT
用於指定undo資料的管理方式。如果使用自動管理,必須設定為AUTO;如果手動管理,必須設定為MANUAL。
使用自動管理的時候,oracle會使用UNDO資料表空間管理UNDO資料;使用手動管理時,oracle會使用復原段管理UNDO資料。
如果使用自動管理員模式,必須建立UNDO資料表空間,並且配置UNDO_TABLESPACE參數,否則oracle會使用SYSTEM復原段存放UNDO紀錄,並在警告日誌中紀錄提示。
2、UNDO_TABLESPACE
用於指定常式所要使用的UNDO資料表空間。設定的時候,必須保證該資料表空間存在,否則會導致常式啟動失敗。
使用RAC的時候,因為一個UNDO不能由多個常式同時使用,所以必須為每個常式配置一個獨立的UNDO資料表空間。
3、UNDO_RETENTION
用於控制UNDO資料的最大保留時間,其預設值為900秒。從9i開始,通過配置該初始化參數,可以指定UNDO資料的保留時間,從而確定閃回查詢可以查看到的最早時間點。
建立UNDO資料表空間
1、使用CREATE DATABASE命令建立UNDO資料表空間
如果使用的是UNDO管理員模式,但是沒有指定UNDO TABLESPACE,那麼建立資料庫的時候oracle會自動產生名稱為SYS_UNDOTBS的UNDO資料表空間。
2、使用CREATE UNDO TABLESPACE 命令建立UNDO資料表空間
建立資料庫以後,可以使用該命令建立UNDO資料表空間。
修改UNDO資料表空間
當事務用盡UNDO資料表空間後,增加資料檔案:
ALTER TABLESPACE ... ADD DATAFILE;
當UNDO資料表空間所在磁碟填滿時,移動資料檔案到其他磁碟:
ALTER TABLESPACE ...RENAME DATAFILE;
當在OPEN狀態下移動UNDO資料表空間時,可以使資料表空間離線/聯機:
ALTER TABLESPACE ... OFFLINE/ONLINE;
當資料庫處于歸檔模式時,備份UNDO資料表空間:
ALTER TABLESPACE ... BEGIN BACKUP/END BACKUP
切換UNDO資料表空間
啟動並開啟oracle資料庫後,同一時刻只能使用一個UNDO資料表空間。可以切換UNDO資料表空間:
ALTER SYSTEM SET undo_tablespace=undotbs02;
刪除UNDO資料表空間
當前使用的UNDO資料表空間不能被刪除,如果要刪除當前執行個體使用的UNDO,需要先切換,然後刪除:
DROP TABLESPACE undotbs01;
監控UNDO資料表空間的使用:
1、確定當前正在使用的undo資料表空間:
show parameter undo_tablespace
NAME TYPE VALUE
------------------------------------ -------------------------------- ------------------------------
undo_tablespace string UNDOTBS1
2、顯示資料庫的所有UNDO資料表空間:
SQL> select tablespace_name from dba_tablespaces where contents='UNDO';
TABLESPACE_NAME
------------------------------
UNDOTBS1
3、顯示UNDO資料表空間統計資訊:
SQL> select to_char(begin_time,'hh24:mi:ss') begin_time,to_char(end_time,'hh24:mi:ss') end_time,undoblks from v$undostat where rownum < 4;
BEGIN_TIME END_TIME UNDOBLKS
--------------------------------------------------------------------------- --------------------------------------------------------------------------- ----------
14:52:52 14:54:56 1
14:42:52 14:52:52 61
14:32:52 14:42:52 27
4、顯示UNDO段統計資訊:
使用自動管理員模式時,oracle會在UNDO資料表空間上自動建立10個UNDO段。通過查詢動態效能檢視V$ROLLNAME,可以顯示所有聯機UNDO的名稱;通過查詢動態效能檢視V$ROLLSTAT可以顯示UNDO段的統計資訊。
SQL> select a.name,b.xacts,b.writes,b.extents from v$rollname a,v$rollstat b where a.usn = b.usn;
NAME XACTS WRITES EXTENTS
------------------------------ ---------- ---------- ----------
SYSTEM 0 176730 6
_SYSSMU1$ 0 524055286 6
_SYSSMU2$ 0 555250470 3
_SYSSMU3$ 0 1477369722 6
_SYSSMU4$ 0 281773370 5
_SYSSMU5$ 0 149888652 2
_SYSSMU6$ 0 101947936 2
_SYSSMU7$ 0 158121686 2
_SYSSMU8$ 0 203385052 3
_SYSSMU9$ 0 84385448 3
_SYSSMU10$ 0 426643090 4
xacts用於標示undo段所包含的活動事務個數,writes用於標示undo段上所寫入的位元組數,extents用於標示undo段的區個數。
5、顯示活動事務資訊:
SQL> select a.username,b.name,c.used_ublk from v$session a,v$rollname b,v$transaction c where a.saddr=c.ses_addr and b.usn = c.xidusn;
6、顯示UNDO區資訊:
SQL> select extent_id,bytes,status from dba_undo_extents where segment_name='_SYSSMU10$';
EXTENT_ID BYTES STATUS
---------- ---------- ---------
0 65536 UNEXPIRED
1 65536 UNEXPIRED
2 1048576 EXPIRED
3 1048576 UNEXPIRED