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