Oracle 9i 將傳統「回滾段」重新命名為「撤銷日誌」,並引入自動 UNDO 管理,讓 DBA 從手動建立、調整回滾段的繁瑣工作中解脫。
透過參數 UNDO_RETENTION(預設 900 秒 / 15 分鐘),DBA 可指定提交後 UNDO 資料保留時長,有效防止長時間查詢出現 ORA-01555: snapshot too old 錯誤。此參數可動態調整:
ALTER SYSTEM SET UNDO_RETENTION = 3600 SCOPE=BOTH; -- 保留 1 小時
-- 1. 建立本地管理的 UNDO 表空間
CREATE UNDO TABLESPACE ts_undo
DATAFILE '/u01/oradata/prod/ts_undo.dbf' SIZE 2M REUSE AUTOEXTEND ON;
-- 2. 指定資料庫使用此 UNDO 表空間
ALTER SYSTEM SET UNDO_TABLESPACE = ts_undo;
-- 3. 啟用自動 UNDO 管理
ALTER SYSTEM SET UNDO_MANAGEMENT = AUTO;
啟動執行個體時,Oracle 自動選取第一個可用的 UNDO 表空間。
| 視圖 | 用途 |
|---|---|
V$UNDOSTAT | 歷史 UNDO 使用統計(每 10 分鐘一筆),含交易數、空間使用量、調整建議。 |
V$ROLLSTAT | 即時回滾段統計(相容舊版視圖)。 |
V$TRANSACTION | 目前進行中交易的 UNDO 使用量。 |
DBA_UNDO_EXTENTS | UNDO 區塊詳細資訊(狀態、大小、所屬表空間)。 |
V$UNDOSTAT 的 MAXQUERYLEN 設定 UNDO_RETENTION,確保超過最長查詢時間。AUTOEXTEND 並設定 MAXSIZE,避免空間耗盡導致交易失敗。DBA_UNDO_EXTENTS 監控 EXPIRED/UNEXPIRED 區塊比例,調整保留時間。自動 UNDO 管理是 9i 以降維運簡化的里程碑,善用監控視圖即能在最小成本下保障查詢一致性。