chapter08_數(shù)據(jù)庫(kù)恢復(fù)技術(shù)_2_數(shù)據(jù)庫(kù)恢復(fù)

  • 故障分類

    (1) 系統(tǒng)故障

    造成系統(tǒng)停止運(yùn)行的故障,此時(shí)正在執(zhí)行的所有事務(wù)將全部中斷,內(nèi)存中的事務(wù)數(shù)據(jù)丟失,可能會(huì)出現(xiàn)不一致的狀態(tài)

    (2) 事務(wù)內(nèi)部的故障

    死鎖、運(yùn)算溢出等導(dǎo)致事務(wù)處理出現(xiàn)錯(cuò)誤、未達(dá)到預(yù)期終點(diǎn)(Commit或RollBack)的故障,導(dǎo)致事務(wù)的非正常結(jié)束

    (3) 存儲(chǔ)設(shè)備故障

    介質(zhì)破壞

    (4) 其他

  • 數(shù)據(jù)庫(kù)恢復(fù)策略綜述

    (1) 事務(wù)故障的恢復(fù)

    利用日志文件撤銷事務(wù)對(duì)數(shù)據(jù)的更改,系統(tǒng)回滾到事務(wù)執(zhí)行前的狀態(tài),好像從來(lái)沒有發(fā)生過(guò)事務(wù)一樣

    日志文件:記錄數(shù)據(jù)庫(kù)所有更新操作,當(dāng)事務(wù)故障發(fā)生時(shí)系統(tǒng)反向掃描日志文件、并逆向操作。

    (2) 系統(tǒng)故障的恢復(fù)

    系統(tǒng)故障不會(huì)破壞磁盤中的數(shù)據(jù),但是會(huì)丟失內(nèi)存緩沖區(qū)中的數(shù)據(jù)。

    此時(shí)有兩種可能造成數(shù)據(jù)庫(kù)狀態(tài)不一致:一、未完成事務(wù)對(duì)數(shù)據(jù)的更新可能已經(jīng)寫入數(shù)據(jù)庫(kù);二、已完成事務(wù)對(duì)數(shù)據(jù)的更新可能還在緩沖區(qū)中未寫入磁盤。

    恢復(fù)步驟:

    1° 掃描日志文件,找到未完成事務(wù)已完成事務(wù)(區(qū)別是有無(wú)Commit)

    2° 正向掃描日志,重新執(zhí)行Redo已完成事務(wù)

    3° 反向掃描日志,撤銷Undo未完成事務(wù)

    (3) 存儲(chǔ)故障的恢復(fù)

    依靠鏡像磁盤

  • 基于日志的數(shù)據(jù)庫(kù)恢復(fù)

    (1) 日志記錄的類型

    1° Start Ti:開始事務(wù)Ti

    2° Ti,Xj,V1,V2:Ti事務(wù)對(duì)數(shù)據(jù)項(xiàng)Xj進(jìn)行寫操作,操作前的值為V1,操作后的值為V2

    3° Commit Ti:提交事務(wù)Ti(表示事務(wù)執(zhí)行成功,事務(wù)對(duì)數(shù)據(jù)庫(kù)所做的任何更新都寫入到緩存區(qū)中,但是不一定寫到磁盤中了

    4° Abort Ti:終止事務(wù)Ti

    (2) 事務(wù)操作寫日志的過(guò)程

    1° 日志中寫入 Start Ti

    2° Ti的每次write(X)操作,都要在日志中寫入 Ti,Xj,V1,V2,然后才能更新數(shù)據(jù)

    3° 事務(wù)進(jìn)入部分提交狀態(tài)時(shí),向日志中寫入 Commit Ti

    (3) Redo技術(shù)

    故障發(fā)生后,系統(tǒng)掃描日志,對(duì)于日志中既包含 Start Ti 又包含 Commit Ti 的事務(wù)Ti,要重新執(zhí)行Redo。

    系統(tǒng)按事務(wù)的提交順序重做各個(gè)事務(wù)。

    (4) Undo技術(shù)

    故障發(fā)生后,系統(tǒng)掃描日志,對(duì)于日志中包含 Start Ti 但不包含 Commit Ti 的事務(wù)Ti,要重新執(zhí)行Undo。

    Undo的過(guò)程是:從日志中讀取Write記錄(Ti,Xj,V1,V2),按照寫入時(shí)相反的順序,將數(shù)據(jù)從新值恢復(fù)成舊值。即V2恢復(fù)成V1。

    (5) 日志文件可以恢復(fù)系統(tǒng)故障和事務(wù)故障,不能恢復(fù)存儲(chǔ)故障

  • 檢查點(diǎn)恢復(fù)技術(shù)

    (1) 事務(wù)內(nèi)部的故障僅需要恢復(fù)發(fā)生故障的個(gè)別事務(wù),而系統(tǒng)故障可能會(huì)影響多個(gè)事務(wù),此時(shí)掃描日志文件變成了一個(gè)耗時(shí)的過(guò)程。事實(shí)上,系統(tǒng)故障發(fā)生時(shí)僅影響少量事務(wù),所以使用檢查點(diǎn)。

    (2) 檢查點(diǎn);記錄在日志中,表示數(shù)據(jù)庫(kù)是否正常運(yùn)行的一個(gè)標(biāo)志。

    系統(tǒng)需要周期性的向日志中寫入一條檢查點(diǎn),記錄所有當(dāng)前活動(dòng)的事務(wù)。

    (3) 寫檢查點(diǎn)時(shí)的操作

    1° 把日志緩沖區(qū)中的內(nèi)容寫入日志

    2° 向日志文件寫入一個(gè)檢查點(diǎn)

    3° 把數(shù)據(jù)庫(kù)緩沖區(qū)的內(nèi)容寫入數(shù)據(jù)庫(kù)

    4° 把檢查點(diǎn)在日志中的地址寫入重啟動(dòng)文件

    寫檢查點(diǎn)時(shí),不運(yùn)行事務(wù)執(zhí)行任何更新操作

    (4) 具有檢查點(diǎn)的恢復(fù)時(shí)操作

    1° 從重啟動(dòng)文件找到最后一個(gè)檢查點(diǎn)的地址

    2° 掃描得到檢查點(diǎn)時(shí)刻的所有事務(wù)

    3° Redo已經(jīng)完成的事務(wù),Undo未完成的事務(wù)(判斷完成/未完成的標(biāo)準(zhǔn)是是否Commit過(guò))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容