Oracle 9i 將傳統「回滾段」重命名為「撤銷段」,並引入自動撤銷管理,讓 DBA 免於手動規劃、監控、擴展回滾段的繁瑣工作。
UNDO_RETENTION(預設 900 秒)指定提交後保留撤銷資料的時間,有效避免長時間查詢出現 ORA-01555: snapshot too old。UNDO_MANAGEMENT=AUTO,Oracle 自動建立/收縮撤銷段。CREATE UNDO TABLESPACE ts_undo
DATAFILE '/u01/oradata/prod/ts_undo.dbf' SIZE 2M REUSE AUTOEXTEND ON;
ALTER SYSTEM SET undo_tablespace = ts_undo SCOPE=BOTH;
ALTER SYSTEM SET undo_management = auto SCOPE=SPFILE; -- 需重啟生效
| 視圖 | 用途 |
|---|---|
| V$UNDOSTAT | 撤銷統計(每 10 分鐘),含 UNXPSTEALCNT、SSOLDERRCNT 等關鍵指標 |
| V$ROLLSTAT | 即時撤銷段狀態(延伸自 V$ROLLSTAT) |
| V$TRANSACTION | 目前進行中交易的撤銷使用量 |
| DBA_UNDO_EXTENTS | 撤銷區塊狀態(ACTIVE/UNEXPIRED/EXPIRED) |
UNDO_RETENTION 設大(如 3600+ 秒),並確保撤銷表空間足夠大。V$UNDOSTAT.SSOLDERRCNT,若非零則需增加表空間或調高保留時間。ALTER TABLESPACE ts_undo RETENTION GUARANTEE; 強制保留未過期撤銷,防止被覆寫。自動撤銷管理是 9i 以降標準配置,善用參數與視圖,即可兼顧效能與查詢一致性。