回滾段是 Oracle 資料庫管理的核心課題之一。本文透過實例深入解析回滾段的概念、作用、分類、空間管理機制與常見問題解決方案。
一、回滾段核心概念與三大作用
- 定義:儲存資料修改前的舊值(前影像),包含位置與數值。段頭記錄正在使用該段的交易資訊。
- 交易回滾:用戶執行 ROLLBACK 時,利用前影像將資料還原。
- 交易恢復:執行個體失敗後重啟,透過 Redo Log 中的回滾資訊回復未提交交易。
- 讀一致性:依據 SCN(系統變更號)確保查詢看不到查詢開始後的未提交變更。長時間查詢若遇區塊被修改,Oracle 會用回滾段構建一致性視圖。
交易級讀一致性實現
SET TRANSACTION READ ONLY;
-- 或
SET TRANSACTION SERIALIZABLE; -- 影響並發效能
二、回滾段四大類型
| 類型 | 說明 |
| 系統回滾段 | 建庫時自動建立,專供 SYSTEM 表空間物件使用。 |
| 非系統回滾段 | 至少一個,供非 SYSTEM 表空間使用。分私有(需在參數 ROLLBACK_SEGMENTS 列出)與公有(OPS 環境自動上線)。 |
| DEFERRED 回滾段 | 表空間離線時自動建立,上線時自動刪除,暫存離線期間產生的回滾資訊。 |
三、空間分配與循環機制
- 分配原則:交易開始時指派擁有最少活動交易的回滾段;可用
SET TRANSACTION USE ROLLBACK SEGMENT 指定。
- 區塊使用:循環、順序使用 Extent。多交易可共用同一 Extent,但每個區塊僅屬單一交易。
- 擴展:當下一 Extent 被活動交易佔用且未達 MAXEXTENTS,系統自動分配新 Extent。
- 收縮與 OPTIMAL:設定 OPTIMAL 參數可讓閒置段自動收縮至指定大小,減少空間浪費。
四、常見問題與規劃建議
- 快照過舊 (ORA-01555):長查詢需的回滾資訊已被覆寫。解決:增大回滾段、調高 OPTIMAL、避免長交易與長查詢並行。
- 回滾段爭用:高併發下等待區塊。解決:增加私有回滾段數量、調整 MAXEXTENTS、監控 V$ROLLSTAT。
- 規劃原則:依交易量與併發度規劃段數與大小;OLTP 建議多小段,批次作業建議少大段;善用自動取消管理 (AUM) 或 UNDO 表空間簡化管理。
掌握回滾段運作細節,能有效預防效能瓶頸與資料不一致風險,是資料庫調校的關鍵基石。