回滾段核心概念
- 前映像:資料修改前的值(位置+內容),存放於回滾段。
- 事務對應:一事務僅用一回滾段;一回滾段可服務多事務。
- 三大作用:事務回滾、崩潰恢復、讀一致性(Statement/Transaction Level)。
回滾段類型
| 類型 | 說明 |
| System | 建庫自動建立,僅服務 SYSTEM 表空間物件 |
| Non-System (Private) | 參數 ROLLBACK_SEGMENTS 列出,啟動自動上線 |
| Non-System (Public) | OPS/RAC 環境,啟動自動上線 |
| Deferred | 表空間離線時自動建立,上線自動刪除 |
空間管理機制
- Extent 循環使用:事務循序寫入 Extent,滿則 WRAP 到下一個。
- EXTEND 擴展:下一 Extent 被活動事務佔用時,動態分配新 Extent,至
MAXEXTENTS 為止。
- OPTIMAL 收縮:閒置時自動釋放至
OPTIMAL 大小,避免空間浪費。
建立與管理語法
-- 建立
CREATE ROLLBACK SEGMENT rbs01
TABLESPACE rbs
STORAGE (INITIAL 100K NEXT 100K MINEXTENTS 10 MAXEXTENTS 500 OPTIMAL 1000K);
-- 上線
ALTER ROLLBACK SEGMENT rbs01 ONLINE;
-- 參數檔自動上線
ROLLBACK_SEGMENTS = (rbs01, rbs02)
-- 修改儲存參數
ALTER ROLLBACK SEGMENT rbs01 STORAGE (MAXEXTENTS 1000);
-- 手動收縮
ALTER ROLLBACK SEGMENT rbs01 SHRINK [TO 2M];
-- 離線
ALTER ROLLBACK SEGMENT rbs01 OFFLINE; -- 狀態變 PENDING OFFLINE
-- 刪除
DROP ROLLBACK SEGMENT rbs01;
監控查詢
-- 基本資訊
SELECT SEGMENT_NAME, TABLESPACE_NAME, OWNER, STATUS FROM DBA_ROLLBACK_SEGS;
-- 統計資訊
SELECT n.NAME, s.EXTENTS, s.RSSIZE, s.OPTSIZE, s.HWMSIZE, s.XACTS, s.STATUS
FROM V$ROLLNAME n, V$ROLLSTAT s WHERE n.USN = s.USN;
-- 活動事務
SELECT s.USERNAME, t.XIDUSN, t.UBAFIL, t.UBABLK, t.USED_UBLK
FROM V$SESSION s, V$TRANSACTION t WHERE s.SADDR = t.SES_ADDR;
數量規劃建議
| 系統類型 | 策略 |
| OLTP (高併發小事務) | 多小段:每 4 事務 1 段,單段 ≤ 10 事務 |
| 批次/決策支援 (大事務) | 少大段:每事務 1 段 |
常見問題與解決
| 問題 | 錯誤碼 | 解決 |
| 空間不足 | ORA-01560 / ORA-01628 | 加檔案、增 MAXEXTENTS |
| 讀一致性失敗 | ORA-01555 Snapshot Too Old | 增 MINEXTENTS、增 Extent 大小、設高 OPTIMAL |
現代化替代:自動 UNDO 管理 (9i+)
-- 建立 UNDO 表空間
CREATE UNDO TABLESPACE undotbs1 DATAFILE '/u01/undotbs01.dbf' SIZE 500M AUTOEXTEND ON;
-- 參數啟用
UNDO_MANAGEMENT = AUTO
UNDO_TABLESPACE = UNDOTBS1
UNDO_RETENTION = 900 -- 秒,保證查詢一致性
-- 監控
SELECT * FROM V$UNDOSTAT;
強烈建議:9i 以降棄用手動回滾段,全面採用自動 UNDO 管理。
- 上一篇文章: Google 搜尋引擎快速收錄新站技巧
- 下一篇文章: Oracle on Linux 常見問題權威 FAQ
Copyright ©
程式碼之家 All Rights Reserved