-
故障分類
(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ò))
chapter08_數(shù)據(jù)庫(kù)恢復(fù)技術(shù)_2_數(shù)據(jù)庫(kù)恢復(fù)
?著作權(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ù)。
【社區(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)容
- MySQL技術(shù)內(nèi)幕:InnoDB存儲(chǔ)引擎(第2版) 姜承堯 第1章 MySQL體系結(jié)構(gòu)和存儲(chǔ)引擎 >> 在上述例子...
- 使用日志來(lái)重做和撤銷事務(wù) 在事務(wù)日志文件存儲(chǔ)的內(nèi)容方面,SQL Server與Oracle也有很大的不同,Orac...
- ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說(shuō)明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí),會(huì)觸發(fā)此異常。 O...
- 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...