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

Oracle 回滾段完整指南:概念、規劃、問題與解決

     編輯:Oracle 資料庫基礎

回滾段核心概念

  • 前映像:資料修改前的值(位置+內容),存放於回滾段。
  • 事務對應:一事務僅用一回滾段;一回滾段可服務多事務。
  • 三大作用:事務回滾、崩潰恢復、讀一致性(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 段

常見問題與解決

現代化替代:自動 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 管理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
問題錯誤碼解決
空間不足ORA-01560 / ORA-01628加檔案、增 MAXEXTENTS
讀一致性失敗ORA-01555 Snapshot Too Old增 MINEXTENTS、增 Extent 大小、設高 OPTIMAL