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

DB2 交易日誌崩潰恢復原理與實戰技巧

     編輯:DB2 教學

系統崩潰後,DB2 透過交易日誌將資料庫恢復至一致可用狀態。你是否遇過 SQL0946C The transaction log for the database is full 錯誤?理解日誌存在的意義與運作機制,能幫助你從容應對災難恢復。

交易基本觀念

交易(工作單元)是一或多個 SQL 操作序列,具原子性:全做或全不做。交易開始於首次 SQL 執行或上一交易結束後,結束方式:

  • 隱式提交:啟用 autocommit,每條 SQL 獨立成交易
  • 显式 COMMIT:永久套用所有變更
  • 显式 ROLLBACK:撤銷所有變更,回復交易前狀態
COMMIT [WORK]
ROLLBACK [WORK]

未提交變更對其他連線不可見(除非使用 UR 隔離等級),提交後即對所有連線可見。

寫前日誌機制

資料變更流程:

  1. 資料頁讀入緩衝池修改
  2. 同步寫入日誌緩衝區(記錄前值/後值/新行/刪除行)
  3. 觸發條件(緩衝池清理器喚醒、日誌緩衝區滿、提交/回滾)將日誌刷入磁碟日誌檔
  4. 日誌外部化完成後,修改頁才寫回表空間容器

此寫前日誌(Write-Ahead Logging, WAL)機制保證:資料修改落盤前,對應日誌已持久化。

WAL 機制示意圖

每筆日誌記錄標記交易 ID,單一日誌檔可包含多交易交織記錄。提交/回滾記錄同樣寫入日誌,形成完整邊界。

崩潰恢復流程

當未提交交易遇停電/異常終止,或已提交交易資料頁寫入中斷導致資料庫不一致時,執行崩潰恢復:

RESTART DATABASE [DatabaseName]
  USER [UserName] [USING [Password]]
  [DROP PENDING TABLESPACES (TS_Name, ...)]
  [WRITE RESUME]

亦可設定 AUTORESTART=ON,連線時自動觸發。

恢復兩階段:

  1. 重做:掃描日誌,重新應用所有含 COMMIT 記錄的交易操作
  2. 復原:回滾無 COMMIT 記錄的交易(利用日誌中的前值資訊)

因日誌頻繁外部化且修改僅在交易成功終止時落盤,故恢復至一致性狀態能力獲保證。

進階應用預告

崩潰恢復僅是日誌功能之一。後續將介紹前滾恢復,示範如何利用日誌將資料庫精確恢復至任意時間點,前置知識包含備份映像與版本恢復概念。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved