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

資料庫恢復技術深度解析:日誌、檢查點、鏡像與容災策略

     編輯:DB2 教學

日誌檔案:恢復的基石

預寫日誌協議

鐵律:先寫日誌,後寫資料庫。兩個操作間可能發生故障:

  • 先寫資料庫、日誌未記錄 → 無法恢復該修改
  • 先寫日誌、資料庫未修改 → 恢復時多執行一次 UNDO,不影響正確性

日誌記錄內容:事務標識、操作類型、操作對象、修改前值、修改後值。

三類故障與恢復策略

故障類型特徵恢復方法自動化程度
事務故障 單一事務非正常終止(邏輯錯誤、死鎖、溢位) 反向掃描日誌,對該事務執行 UNDO(逆操作) 系統自動,對用戶透明
系統故障 軟體/硬體錯誤導致重啟,緩衝區資料丟失 正向掃描建立 REDO/UNDO 隊列 → UNDO 未完成事務 → REDO 已提交事務 重啟時自動完成
介質故障 磁碟損壞、磁頭碰撞等硬體損壞 重裝最近備份 + 重放日誌(REDO 已提交 + UNDO 未完成) 需 DBA 介入

系統故障恢復詳細流程

  1. 正向掃描日誌建立兩隊列:
    • REDO 隊列:有 BEGIN 與 COMMIT 記錄
    • UNDO 隊列:僅有 BEGIN,無 COMMIT
  2. 反向掃描對 UNDO 隊列事務執行逆操作(插入→刪除、刪除→插入、修改→還原舊值)
  3. 正向掃描對 REDO 隊列事務重新執行操作(寫入修改後值)

介質故障恢復流程

  1. 裝入最近備份(靜態備份直接一致;動態備份需配合備份時刻日誌做 REDO+UNDO 達一致)
  2. 裝入備份結束時刻起的日誌檔案
  3. 掃描日誌建立 REDO/UNDO 隊列
  4. 正向 REDO、反向 UNDO

介質故障恢復流程圖

檢查點技術:大幅提升恢復效率

動態維護檢查點步驟

  1. 將日誌緩衝區強制刷入磁碟
  2. 寫入檢查點記錄(含當前活躍事務清單、其最近日誌位址)
  3. 將資料緩衝區強制刷入磁碟
  4. 將檢查點位址寫入重新開始檔案

可定期(時間間隔)或不定期(日誌寫滿比例)建立。

利用檢查點的恢復策略

僅需從最後一個檢查點開始掃描:

  • 檢查點前已提交事務(T1):無需 REDO(資料已刷盤)
  • 檢查點前開始、檢查點後提交(T2):需 REDO(可能未刷盤)
  • 檢查點前開始、故障時未完成(T3):需 UNDO
  • 檢查點後開始、故障前提交(T4):需 REDO
  • 檢查點後開始、故障時未完成(T5):需 UNDO

資料庫鏡像:容災與並發優化

  • DBMS 自動將整庫或關鍵資料複寫至另一磁碟
  • 更新時同步複寫,保證一致性
  • 並發優势:獨佔鎖修改主庫時,其他用戶可讀鏡像庫,無需等待鎖釋放
  • 成本:頻繁複寫降低效能,實務上常僅鏡像關鍵資料與日誌

恢復技術總覽

技術核心原理適用故障效率提升手段
資料庫轉儲定期完整/增量備份介質故障海量 vs 增量權衡
日誌檔案記錄所有修改操作所有故障檢查點減少掃描範圍
鏡像即時複寫關鍵資料介質故障縮短 RTO,並發讀取優化
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved