回滾段是 Oracle 資料庫管理中的關鍵組件,專門用於儲存資料修改前的舊值(前影像),包含修改前的位置與數值。每個回滾段的頭部會記錄正在使用該段的交易資訊。值得注意的是,單一交易只能使用一個回滾段,但一個回滾段可同時服務多個交易。
當使用者執行 ROLLBACK 指令時,Oracle 利用回滾段中保存的前影像,將已修改的資料恢復至原始狀態,確保交易的原子性。
若資料庫例程在交易處理途中異常終止,回滾段資訊會保留在重做日誌檔中。下次資料庫啟動時,Oracle 會透過回滾機制復原未提交的資料,維護資料一致性。
Oracle 提供語句級與交易級兩種讀一致性機制:
SET TRANSACTION READ ONLY 或 SET TRANSACTION SERIALIZABLE 實現,但後者會影響並發效能。長時間查詢遭遇資料塊被修改時,Oracle 會利用回滾段前影像構建讀一致性視圖,確保查詢結果不受干擾。
| 類型 | 說明 |
|---|---|
| 系統回滾段 | 資料庫建立時自動創建,專供 SYSTEM 表空間物件使用。 |
| 非系統回滾段 | 含私有與公有兩種。私有段需在參數檔 ROLLBACK_SEGMENTS 列出以便啟動時自動上線;公有段常見於 OPS 環境。 |
| DEFERRED 回滾段 | 表空間離線時自動創建,上線時自動刪除,處理離線期間產生的回滾資訊。 |
交易啟動時,Oracle 會將擁有最少活動交易的回滾段分配給該交易。亦可透過 SET TRANSACTION USE ROLLBACK SEGMENT 指定特定段。交易以循環順序使用區塊,當前區滿後移至下一區,此過程稱為「翻轉」。多個交易可共用同一區塊,但每個區塊僅屬於單一交易。
當現有區塊用盡且下一區有活動交易時,回滾段會動態擴張新區塊,直到達到 MAXEXTENTS 上限。OPTIMAL 參數定義回滾段閒置時收縮的目標大小,合理設定可有效減少空間浪費。