首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 9i 自動 UNDO 管理:簡化維運、避免 Snapshot Too Old 的關鍵技術

     編輯:Oracle 資料庫基礎

從 Rollback Segment 到 Undo Tablespace 的演進

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 表空間。

新增監控視圖:掌握 UNDO 使用狀況

視圖用途
V$UNDOSTAT歷史 UNDO 使用統計(每 10 分鐘一筆),含交易數、空間使用量、調整建議。
V$ROLLSTAT即時回滾段統計(相容舊版視圖)。
V$TRANSACTION目前進行中交易的 UNDO 使用量。
DBA_UNDO_EXTENTSUNDO 區塊詳細資訊(狀態、大小、所屬表空間)。

最佳實務建議

  • 依據 V$UNDOSTAT 的 MAXQUERYLEN 設定 UNDO_RETENTION,確保超過最長查詢時間。
  • 為 UNDO 表空間啟用 AUTOEXTEND 並設定 MAXSIZE,避免空間耗盡導致交易失敗。
  • 定期查詢 DBA_UNDO_EXTENTS 監控 EXPIRED/UNEXPIRED 區塊比例,調整保留時間。

自動 UNDO 管理是 9i 以降維運簡化的里程碑,善用監控視圖即能在最小成本下保障查詢一致性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved