數據庫 的 恢復策略


事務故障的恢復

事務故障是指事務在運行至正常終止點前被終止,這時恢復子系統應利用日志文件撤銷(UNDO)此事務已對數據庫進行的修改。

系統恢復的步驟:

(1)反向掃描日志文件(即從最后向前掃描日志文件),查找該事物的更新操作。

(2)對該事務的更新操作執行逆操作。即將日志記錄中"更新前的值"寫入數據庫。這樣如果記錄中是插入操作,則相當於做刪除操作;若記錄中是刪除操作,則做插入操作;若是修改,則相當於修改前值代替修改后值。

(3)繼續反向掃描日志文件,查找該事務的其他更新操作,並作同樣處理。

(4)如此處理下去,直至讀到此事務的開始標記,事務故障恢復就完成了。

系統故障

系統故障的恢復是由系統在重新啟動時候自動完成的,不需要用戶干預。

系統的恢復步驟是:

(1)正向掃描日志文件(即從頭掃描日志文件),找出在故障發生前已經提交的事務(這些事務既有BEGIN TRANSACTION記錄,也有COMMIT記錄),將其事務標識記入重做(REDO)隊列。同時找出故障發生時尚未完成的事務(這些事務只有BEGIN TRANSACTION記錄,無相應的COMMIT記錄),將其事務標識記入撤銷隊列。

(2)對撤銷隊列中的各個事務進行撤銷(UNDO)處理。

進行UNDO處理的方法是,反向掃描日志文件,對每一個UNDO事務的更新操作執行逆操作,將將日志記錄中"更新前的值"寫入數據庫(該方法和事務故障的解決方法一致)。

(3)對重做隊列中的各個事務進行重做(REDO)處理。

進行REDO處理的方法是:正向掃描日志文件,對每一個REDO事務從新執行日志文件登記的操作。即將日志記錄中"更新后的值"寫入數據庫。

具有檢查點的恢復技術

利用日志技術進行數據庫恢復時,恢復子系統必須搜索日志,確定哪些事務需要REDO,哪些事務需要UNDO。一般來說,需要檢查所有的記錄。這樣做有兩個問題。一是搜索整個日志將消耗大量的時間。二是很多需要REDO處理的事務實際上已經將它們的更新操作結果寫到數據庫中了,然而恢復子系統又重新執行了這些操作,浪費了大量時間。

檢查點的理解

###首先查看有幾個檢查點,找到里故障最近的一次檢查點,之后看看哪些事務執行的時間是在檢查點之前完成的
(1)如果事務在檢查點之前完成的則不需要REDO(如:T1)
(2)如果事務在檢查點之前執行,在檢查點之后故障之前提交則需要REDO(如:T2,T4)
(3)如果事務在故障后,則需要執行UNDO(如:T3,T5)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM