????????在數據庫管理系統(DBMS)中,undo 和 redo 是兩種用于事務管理和故障恢復的重要機制。它們主要涉及事務的提交、回滾以及系統故障后的數據恢復。
Undo(撤銷)
作用:undo 用于撤銷未提交事務所做的修改,確保數據庫的一致性。
工作原理:
- 回滾事務:當一個事務在完成之前遇到錯誤或用戶要求回滾時,undo 操作會撤銷該事務所做的所有修改,使數據庫回到事務開始之前的狀態。
- 故障恢復:在數據庫系統崩潰后,如果系統在恢復過程中發現有未提交的事務,undo 操作會撤銷這些未提交事務的修改,確保數據庫的一致性。
實現方式:在進行數據修改時,數據庫系統會在 undo log(撤銷日志)中記錄數據修改前的舊值。在需要撤銷時,系統可以通過這些日志記錄將數據恢復到修改前的狀態。
Redo(重做)
作用:redo 用于重做已提交事務的修改,確保數據庫的持久性。
工作原理:
- 事務提交:當一個事務提交后,redo 日志會記錄該事務的所有修改操作,確保這些修改能夠在系統崩潰后被重新應用。
- 故障恢復:在數據庫系統崩潰后,如果系統在恢復過程中發現有已提交但未持久化到磁盤的事務,redo 操作會重做這些事務的修改,確保所有已提交事務的修改都持久化。
實現方式:在進行數據修改時,數據庫系統會在 redo log(重做日志)中記錄數據修改后的新值。在系統恢復時,系統可以通過這些日志記錄將所有已提交事務的修改重新應用。
案例說明
假設有一個事務 T1,它對數據庫中的某一記錄進行修改。
- 開始事務 T1:記錄初始值到 undo log。
- 事務 T1 修改數據:將修改后的值記錄到 redo log。
- 事務 T1 提交:將 redo log 中的記錄持久化,以確保事務的修改被永久保存。
如果系統在 T1 提交前崩潰:恢復時,系統會查看 undo log 并撤銷 T1 的所有修改,將數據恢復到事務開始前的狀態。
如果系統在 T1 提交后崩潰:恢復時,系統會查看 redo log 并重做 T1 的所有修改,確保事務的修改被永久保存。