事務故障的恢復
事務故障是指事務在運行至正常終止點前被終止,這時恢復子系統應利用日志文件撤銷(UNDO)此事務已對數據庫進行的修改。
系統恢復的步驟:
(1)反向掃描日志文件(即從最后向前掃描日志文件),查找該事物的更新操作。
(2)對該事務的更新操作執行逆操作。即將日志記錄中"更新前的值"寫入數據庫。這樣如果記錄中是插入操作,則相當於做刪除操作;若記錄中是刪除操作,則做插入操作;若是修改,則相當於修改前值代替修改后值。
(3)繼續反向掃描日志文件,查找該事務的其他更新操作,並作同樣處理。
(4)如此處理下去,直至讀到此事務的開始標記,事務故障恢復就完成了。
系統故障
系統故障的恢復是由系統在重新啟動時候自動完成的,不需要用戶干預。
系統的恢復步驟是:
(1)正向掃描日志文件(即從頭掃描日志文件),找出在故障發生前已經提交的事務(這些事務既有BEGIN TRANSACTION記錄,也有COMMIT記錄),將其事務標識記入重做(REDO)隊列。同時找出故障發生時尚未完成的事務(這些事務只有BEGIN TRANSACTION記錄,無相應的COMMIT記錄),將其事務標識記入撤銷隊列。
(2)對撤銷隊列中的各個事務進行撤銷(UNDO)處理。
進行UNDO處理的方法是,反向掃描日志文件,對每一個UNDO事務的更新操作執行逆操作,將將日志記錄中"更新前的值"寫入數據庫(該方法和事務故障的解決方法一致)。
(3)對重做隊列中的各個事務進行重做(REDO)處理。
進行REDO處理的方法是:正向掃描日志文件,對每一個REDO事務從新執行日志文件登記的操作。即將日志記錄中"更新后的值"寫入數據庫。
具有檢查點的恢復技術
利用日志技術進行數據庫恢復時,恢復子系統必須搜索日志,確定哪些事務需要REDO,哪些事務需要UNDO。一般來說,需要檢查所有的記錄。這樣做有兩個問題。一是搜索整個日志將消耗大量的時間。二是很多需要REDO處理的事務實際上已經將它們的更新操作結果寫到數據庫中了,然而恢復子系統又重新執行了這些操作,浪費了大量時間。

