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

Oracle REDO機制與故障恢復原理:從Redo Log Buffer到歸檔日誌

     編輯:Oracle 資料庫基礎

一、REDO三大核心組件

  1. Redo Log Buffer:SGA中循環記憶體區域,儲存Redo Entries (重做記錄)
  2. LGWR (Log Writer):背景進程,將Buffer內容順序寫入Redo Log File
  3. Redo Log File:實體日誌檔案,最少2組,預設3組,循環使用

二、Redo運作流程

  1. 用戶修改Buffer Cache資料
  2. 產生Redo Entry → 複製至Redo Log Buffer (連續順序空間)
  3. LGWR依觸發條件 (Commit/每3秒/Buffer 1/3滿/Checkpoint) 寫入Redo Log File
  4. Log Switch觸發Checkpoint → DBWR寫髒資料回資料檔
  5. 歸檔模式下:ARCN將填滿的Redo Log轉存為歸檔日誌

關鍵策略:No-force-at-commit — Commit不強制寫資料檔,改由順序寫入Redo取代隨機寫入資料檔,獲得批量效應效能提升。

三、Checkpoint與恢復起點

  • Checkpoint SCN:此SCN前的髒資料已寫回資料檔
  • CKPT進程更新控制檔與資料檔標頭,記錄Checkpoint資訊
  • 崩潰恢復僅需從最後完成Checkpoint的SCN開始重演Redo,大幅縮短恢復時間 (MTTR)
  • 生產環境強制啟用歸檔模式,歸檔日誌用於介質恢復

四、UNDO機制補充

讀取一致性層級控制

-- 陳述式層級 (預設):單一SELECT見到一致快照
-- 交易層級唯讀
SET TRANSACTION READ ONLY;

-- 交易層級可序列化 (效能影響大)
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

五、Redo Log Buffer Latch競爭監控與調優

-- Redo Buffer Allocation Retries (應接近0)
SELECT value FROM v$sysstat WHERE name = 'redo buffer allocation retries';

-- Latch統計
SELECT ln.name, l.gets, l.misses, l.immediate_gets, l.immediate_misses
FROM v$latch l, v$latchname ln
WHERE ln.name IN ('redo allocation', 'redo copy') AND ln.latch# = l.latch#;

調優對策

  • Redo Allocation Latch爭用:降低LOG_SMALL_ENTRY_MAX_SIZE減少複製量
  • Redo Copy Latch爭用:增加LOG_SIMULTANEOUS_COPIES (最高至CPU核心數×2)
  • 整體等待高:增大LOG_BUFFER

總結:REDO是Oracle恢復的基石,順序寫入換取隨機寫入效能,Checkpoint控制恢復邊界,UNDO提供多版本並發控制,三者協同保證ACID。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
UNDO功能說明
交易回滾Rollback時用Undo Segment舊映像還原資料
交易恢復執行個體失敗重啟時,Rollback未提交交易 (Undo變更也受Redo保護)
讀取一致性查詢見到SCN一致的舊映像,不受並發修改影響