一、REDO三大核心組件
- Redo Log Buffer:SGA中循環記憶體區域,儲存Redo Entries (重做記錄)
- LGWR (Log Writer):背景進程,將Buffer內容順序寫入Redo Log File
- Redo Log File:實體日誌檔案,最少2組,預設3組,循環使用
二、Redo運作流程
- 用戶修改Buffer Cache資料
- 產生Redo Entry → 複製至Redo Log Buffer (連續順序空間)
- LGWR依觸發條件 (Commit/每3秒/Buffer 1/3滿/Checkpoint) 寫入Redo Log File
- Log Switch觸發Checkpoint → DBWR寫髒資料回資料檔
- 歸檔模式下:ARCN將填滿的Redo Log轉存為歸檔日誌
關鍵策略:No-force-at-commit — Commit不強制寫資料檔,改由順序寫入Redo取代隨機寫入資料檔,獲得批量效應效能提升。
三、Checkpoint與恢復起點
- Checkpoint SCN:此SCN前的髒資料已寫回資料檔
- CKPT進程更新控制檔與資料檔標頭,記錄Checkpoint資訊
- 崩潰恢復僅需從最後完成Checkpoint的SCN開始重演Redo,大幅縮短恢復時間 (MTTR)
- 生產環境強制啟用歸檔模式,歸檔日誌用於介質恢復
四、UNDO機制補充
| UNDO功能 | 說明 |
| 交易回滾 | Rollback時用Undo Segment舊映像還原資料 |
| 交易恢復 | 執行個體失敗重啟時,Rollback未提交交易 (Undo變更也受Redo保護) |
| 讀取一致性 | 查詢見到SCN一致的舊映像,不受並發修改影響 |
讀取一致性層級控制
-- 陳述式層級 (預設):單一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。
- 上一篇文章: Oracle與SQL Server異構資料遷移完整實戰:透明網關、OPENROWSET、連結伺服器
- 下一篇文章: Oracle DUAL表完全指南:結構、特殊行為、風險操作與災難恢復
Copyright ©
程式碼之家 All Rights Reserved