首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 回滾段全解析:概念、分類、運作機制、OPTIMAL 參數與疑難雜症

     編輯:Oracle 資料庫相關知識

回滾段核心角色

  • 儲存前像:資料修改前的值與位置
  • 交易回滾:ROLLBACK 時用前像恢復原值
  • 交易恢復:實例失敗後,用 Redo 中的回滾段資訊恢復未提交交易
  • 讀一致性:構建一致性讀視圖,查詢只看 SCN < 查詢起始 SCN 的版本

讀一致性層級

  • 陳述式級 (預設):SELECT 只看啟動瞬間的資料庫快照
  • 交易級:SET TRANSACTION READ ONLY 或 SERIALIZABLE (影響並發與效能)

回滾段四大分類

類型建立時機用途備註
System建庫自動SYSTEM 表空間物件前像不可刪除/離線
Non-System (Private)手工建立非 SYSTEM 表空間物件前像在 init.ora ROLLBACK_SEGMENTS 列出自動上線
Non-System (Public)手工建立OPS/RAC 環境共用實例啟動自動上線
Deferred表空間離線時自動離線期間產生的回滾資訊表空間上線自動刪除

運作機制:分配、擴展、縮減、OPTIMAL

分配規則

  • 交易啟動時分配,**擁有最少作用中交易的回滾段**優先
  • 可指定:SET TRANSACTION USE ROLLBACK SEGMENT rbs_name

循環使用 Extents

交易循序使用 Extents,滿則移至下一個 (Wrap)。多交易可共用同一 Extent,**但一個區塊只屬於單一交易**。

擴展

  • 當前 Extent 滿、下一 Extent 被作用中交易佔用 → 分配新 Extent
  • 持續擴展至 MAXEXTENTS 上限

OPTIMAL 參數:空間回收的關鍵

  • 指定回滾段閒置時應縮減到的大小 (Extents 數或位元組)
  • 交易結束釋放 Extent 時,若超過 OPTIMAL,自動歸還多餘 Extents 到表空間
  • 正確設定 OPTIMAL 可大幅減少空間浪費與動態擴展開銷
  • 建議:OPTIMAL = INITIAL + NEXT * (預估並發交易數 - 1)

常見問題與解決對策

問題現象根因對策
ORA-01555 Snapshot Too Old長查詢失敗回滾段太小/被覆寫、OPTIMAL 過小、提交太頻繁增大回滾段、調大 OPTIMAL、使用大回滾段、減少長查詢並發
ORA-01650 Unable Extend RollbackDML 失敗表空間滿、MAXEXTENTS 達上限擴充表空間、增加回滾段、調大 MAXEXTENTS
回滾段爭用效能下降回滾段數量不足、熱點段增加回滾段數量 (建議: 交易數/4)、均勻分佈表空間
Deferred Rollback Segment 殘留表空間無法離線/刪除異常關機導致未清理啟動資料庫自動清理、或手工 DROP

現代替代方案:自動 UNDO 管理 (9i+)

-- 建立 UNDO 表空間
CREATE UNDO TABLESPACE undotbs1
DATAFILE '/u01/oradata/undotbs01.dbf' SIZE 2G
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

-- 參數檔設定
UNDO_MANAGEMENT = AUTO
UNDO_TABLESPACE = undotbs1
UNDO_RETENTION = 900  -- 秒,滿足 ORA-01555 需求
  • 完全取代手工回滾段管理
  • 自動調整 Extent 大小/數量、自動縮減、保證 UNDO_RETENTION 秒內的前像
  • Oracle 11g+ 強制使用自動 UNDO,手工回滾段已廢除

DBA 管理檢查清單

-- 監控回滾段狀態
SELECT segment_name, status, extents, rssize, optsize, hwmsize, xacts
FROM dba_rollback_segs;

-- 監控爭用
SELECT class, count FROM v$waitstat
WHERE class IN ('system undo header','system undo block','undo header','undo block');

-- 監控 ORA-01555 風險
SELECT max(undoblks) FROM v$undostat;  -- 10g+ 自動 UNDO 統計

回滾段是 Oracle 交易引擎的「時光機」。從手工精細調校到自動 UNDO 智能管理,核心邏輯不變:**為每個修改保留足夠久的前像,支撐回滾、恢復、一致性讀三大支柱**。掌握其運作機制,才能在 ORA-01555 風暴中從容應對。

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