Redo Log 是 Oracle 數據庫**保證已提交事務不丟失、實現崩潰恢復**的核心組件。本文深度剖析 Redo Log 在**實例恢復**與**介質恢復**兩大場景中的角色差異、Log Force at Commit 機制、Checkpoint (CKPT) 推進邏輯、Write-Ahead Logging (WAL) 原則、RAC 多線程架構,並總結 DBA 必知的關鍵配置與監控指標。
| 維度 | 實例恢復 | 介質恢復 |
|---|---|---|
| 觸發條件 | 實例崩潰 (SHUTDOWN ABORT/宕機) 後啟動 | 數據文件損壞/丟失,需從備份恢復 |
| 自動化程度 | 完全自動 (OPEN 時觸發) | 手動執行 RECOVER DATABASE |
| 日志來源 | Online Redo Log | Archived Redo Log + Online Redo Log |
| 恢復起點 | 最近一次 Checkpoint SCN | 備份控制文件/數據文件 SCN |
| UNDO 處理 | 前滾後回滾未提交事務 | 同樣前滾後回滾 |
**核心共性**:兩者第一階段皆為**前滾**——按 SCN 順序應用 Redo 變更向量,將數據文件推進至目標時間點。
COMMIT → 生成 Commit Redo 記錄 → **LGWR 必須將該事務所有 Redo 從 Log Buffer 寫入 Online Redo Log 文件並確認完成** → 才向用戶返回「提交成功」。FAST_START_MTTR_TARGET(目標恢復時間)、LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT。RAC 環境:存活實例自動接管故障實例的 Thread 進行實例恢復(Instance Recovery / Crash Recovery)。
RECOVER DATABASE:從備份控制文件 SCN 開始應用 Archived Redo Log,再應用 Online Redo Log。RESETLOGS(不完全恢復)或 NORESETLOGS(完全恢復)。| 項目 | 建議 |
|---|---|
| Redo Log 組數 | ≥ 3 組,防止「Log Switch 等待」 |
| 單組大小 | 使切換頻率 15-20 分鐘一次(避免頻繁 Checkpoint/歸檔壓力) |
| 多路復用 | 每組 ≥ 2 Member,放不同磁盤/控制器 |
| 歸檔模式 | 生產庫**必須開啟 ARCHIVELOG** |
| LGWR 同步寫 | 確認存儲層 fsync 語義生效(避免掉電丟失) |
| 監控指標 | log file switch completion 等待、log file sync 等待、checkpoint not complete |
Redo Log 通過 **WAL 協議 + Log Force at Commit + Checkpoint 推進** 三大機制,在**性能(異步 DBWR)與可靠性(同步 LGWR)之間取得平衡**。理解「前滾依賴 Online Redo、介質恢復依賴 Archived Redo、實例恢復自動化、Checkpoint 決定恢復窗口」是 DBA 掌控數據庫可恢復性的核心鑰匙。