您好,登錄后才能下訂單哦!
本篇文章為大家展示了數據庫的故障及其恢復策略是怎樣的,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
在數據庫運行過程中,可能會出現各種各樣的故障,這些故障可分為以下三類:事務故障、系統故障和介質故障。應該根據故障類型的不同,采取不同的恢復策略。
1,事務故障及其恢復:
事務故障表示由非預期的、不正常的程序結束所造成的故障。
造成程序非正常結束的原因包括輸人數據錯誤、運算溢出、違反存儲保護、并行事務發生死鎖等。
發生事務故障時,被迫中斷的事務可能已對數據庫進行丁修改,為了消除該事務對數據庫的影響,要利用日志文件中所記載的信息,強行回滾(RoLLBAcK)該事務,將數據庫恢復到修改前的初始狀態。
為此,要檢查日志文件中由這些事務所引起的發生變化的記錄,取消這些沒有完成的事務所做的一切改變。
這類恢復操作稱為事務撤銷(uNDo),具體做法如下。
(1)反向掃描日志文件,查找該事務的更新操作。
(2)對該事務的更新操作執行反操作,即對已經插入的新記錄進行刪除操作,對己刪除的記錄進行插入操作,對修改的數據恢復舊值,用舊值新值。這樣由后向前逐個掃描該事務已做的所有更新操作,并做同樣處理,直到掃描到此事務的開始標記,事務故障恢復完畢為止。
因此,一個事務是一個工作單位,也是一個恢復單位。一個事務越短,越便于對它進行UNDO操作。如果一個應用程序運行時間較長,則應該把該應用程序分成多個事務,用明確的coMMIT語句來結束各個事務。
2,系統故障及其恢復系統故障是指系統在運行過程中,由于某種原因,造成系統停止運轉,致使所有正在運行的事務都以非正常方式終止,要求系統重新啟動。引起系統故障的原因可能有硬件錯誤(如CPu故障、操作系統)或DBMS代碼錯誤、突然斷電等。
這時,內存中數據庫緩沖區的內容全部丟失,雖然存儲在外部存儲設備上的數據庫并未破壞,但其內容不可靠了。系統故障發生后,對數據庫的影響有以下兩種情況。
一種情況是一些未完成事務對數據庫的更新已寫入數據庫,這樣在系統重新啟動后,要強行撤銷(uNDo)所有未完成的事務,清除這些事務對數據庫所做的修改。這些末完成事務在日志文件中只有BEGIN TRANsLATl0N標記,而無COMMIT標記。
另一種情況是有些已提交的事務對數據庫的更新結果還保留在緩沖區中,尚未寫到磁盤上的物理數據庫中,這也使數據庫處于不一致狀態,因此應將這些事務已提交的結果重新寫入數據庫。這類恢復操作稱為事務的重做(REDo)。這種巳提交事務在日志文件中既有BGIN TRANSCATION標記,也有COMMIT標記。
因此,系統故障的恢復要完成兩方面的工作,既要撤銷所有末完成的事務,還要重做所有已提交的事務,這樣才能將數據庫真正恢復到一致的狀態。具體做法如下。
(1)正向掃描日志文件,查找尚未提交的事務,將其事務標識記人撤銷隊列。同時查找已經提交的事務,將其事務標識記入重做隊列。
(2)對撤銷隊列中的各個事務進行撤銷處理。方法同事務故障中所介紹的撤銷方法。
(3)對重做隊列中的各個事務進行重做處理。進行重做處理的方法是正向掃描日志文件,按照日志文件中所登記的操作內容,重新執行操作,使數據庫恢復到最近某個可用狀態。
系統發生故障后,由于無法確定哪些末完成的事務已更新過數據庫,哪些事務的提交結果尚未寫入數據庫,因此系統重新啟動后,要撤銷所有的末完成的事務,重做所有的已經提交的事務。
但是,在故障發生前已經運行完畢的事務有些是正常結束的,有些是異常結束的。所以無須把它們全部撤銷或重做。
通常采用設立檢查點(checkPoint)的方法來判斷事務是否正常結束。每隔一段時間,比如說5分鐘,系統產生一個檢查點,做下面一些事情:a,把仍保留在日志緩沖區中的內容寫到日志文件中;b,在日志文件中寫一個“檢查點記錄”;c,把數據庫緩沖區中的內容寫到數據庫中,即把更新的內容寫到物理數據庫中;d,把日志文件中檢查點記錄的地址寫到“重新啟動文件”中。
每個檢查點記錄包含的信息有在檢查點時間的所有活動事務一覽表、每個事務最近日志記錄的地址。
在重新啟動時,恢復管理程序先從“重新啟動文件”中獲得檢查點記錄的地址,從日志文件中找到該檢查點記錄的內容,通過日志往回找,能決定哪些事務需要撤銷,恢復到初始的狀態,哪些事務需要重做。為此利用檢查點信息能做到及時、有效、正確地完成恢復工作。
3,介質故障及其恢復介質故障是指系統在運行過程中,由于輔助存儲器介質受到破壞,使存儲在外存中的數據部分或全部丟失。
這類故障比事務故障和系統故障發生的可能性要小,但這是最嚴重的一種故障,破壞性很大,磁盤上的物理數據和日志文件可能被破壞,這需要裝入發生介質故障前的后備數據庫副本,然后利用日志文件重做該副本后所運行的所有事務。
具體方法如下。
(1)裝入的數據庫副本,使數據庫恢復到最近一次轉儲時的可用狀態。
(2)裝入的日志文件副本,根據日志文件中的內容重做已完成的事務。首先掃描日志文件,找出故障發生時己提交的事務,將其記入重做隊列。然后正向掃描日志文件,對重做隊列中的各個事務進行重做處理,方法是正向掃描日志文件,對每個重做事務重新執行登記的操作,即將日志記錄中“更新后的值”寫入數據庫。
這樣可以將數據庫恢復至故障前某一時刻的一致狀態了。
上述內容就是數據庫的故障及其恢復策略是怎樣的,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。