雙引擎恢復架構
Oracle 採用 轉儲備份 與 重做日誌 兩大技術支柱構建完整恢復體系:
- 轉儲:檔案拷貝、Export/Import、SQL*Loader、自製程式等多種離線/邏輯備份方式。
- 重做日誌:記錄所有變更的前像與後像,配合回滾段實現前滾/回滾雙向恢復。
早期版本:雙日誌檔架構 (BI/AI)
- Before Image (BI) 檔:記錄更新前舊值,**強制配置**,保證資料庫可恢復至一致性狀態。
- After Image (AI) 檔:記錄更新後新值,**可選配置**,用於減少需重跑的事務,最大化恢復資料量。
無 AI 檔時僅能執行 UNDO (回滾),無法 REDO (前滾)。
缺點:佔用空間大、掃描效率低。
現代架構:Redo Log + Rollback Segment (Undo)
為解決「讀髒資料」與「故障高效恢復」,引入:
- Redo Log Buffer → Redo Log Files:順序寫入,記錄前像與後像,支援崩潰恢復前滾。
- Rollback Segment (Undo Tablespace):記錄前像,支援交易回滾、讀一致性 (Consistent Read)、閃回查詢。
故障恢復兩階段流程
- 前滾:掃描 Redo Log,**重做所有操作** (含未提交事務),將資料檔推進至崩潰時刻。
- 回滾:根據 Undo 資訊,**撤銷未提交事務** 的變更,恢復交易一致性。
優勢:單次掃描 Redo Log 即可完成前滾,再利用 Undo 精準回滾,大幅優於舊版雙日誌多次掃描。
關鍵機制補充
- Fast Commit:提交時僅寫入 Commit 記錄至 Redo Log Buffer,資料塊異步刷盤 (DBWR),極大縮短提交延遲。
- SCN (System Change Number):全域遞增時鐘,賦予每次提交唯一序號,記錄於 Redo Log,支援分散式/並行恢復同步。
- Write-Ahead Logging (WAL):DBWR 寫髒塊前,LGWR 必須先將對應 Redo 寫入磁碟,保證可恢復性。