




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第1313章章 數(shù)據(jù)庫恢復(fù)技術(shù)數(shù)據(jù)庫恢復(fù)技術(shù)o13.1 13.1 恢復(fù)的基本概念恢復(fù)的基本概念o13.2 13.2 數(shù)據(jù)庫故障的種類數(shù)據(jù)庫故障的種類o13.3 13.3 數(shù)據(jù)庫恢復(fù)的類型數(shù)據(jù)庫恢復(fù)的類型o13.4 13.4 恢復(fù)技術(shù)恢復(fù)技術(shù)o13.5 13.5 緩沖區(qū)管理緩沖區(qū)管理2022年3月29日11時(shí)01分1概述概述o計(jì)算機(jī)同其他任何設(shè)備一樣,都有可計(jì)算機(jī)同其他任何設(shè)備一樣,都有可能發(fā)生故障。能發(fā)生故障。o這這種種情況一旦發(fā)生,就有可能造成數(shù)情況一旦發(fā)生,就有可能造成數(shù)據(jù)丟失。據(jù)丟失。o數(shù)據(jù)庫系統(tǒng)必須采取必要的措施,以數(shù)據(jù)庫系統(tǒng)必須采取必要的措施,以保證不會(huì)或盡可能減少數(shù)據(jù)丟失。保證不
2、會(huì)或盡可能減少數(shù)據(jù)丟失。o數(shù)據(jù)庫恢復(fù)數(shù)據(jù)庫恢復(fù)是是DBMSDBMS必須提供的功能必須提供的功能。2022年3月29日11時(shí)01分213.113.1恢復(fù)的基本概念恢復(fù)的基本概念o數(shù)據(jù)庫恢復(fù)是指當(dāng)數(shù)據(jù)庫發(fā)生故障時(shí),數(shù)據(jù)庫恢復(fù)是指當(dāng)數(shù)據(jù)庫發(fā)生故障時(shí),將數(shù)據(jù)庫恢復(fù)到正確(一致性)狀態(tài)的將數(shù)據(jù)庫恢復(fù)到正確(一致性)狀態(tài)的過程。過程。o數(shù)據(jù)庫恢復(fù)是基于事務(wù)的原子性特性。數(shù)據(jù)庫恢復(fù)是基于事務(wù)的原子性特性。o數(shù)據(jù)庫恢復(fù)過程通常遵循一個(gè)可預(yù)測的數(shù)據(jù)庫恢復(fù)過程通常遵循一個(gè)可預(yù)測的方案。方案。o 恢復(fù)機(jī)制有恢復(fù)機(jī)制有兩個(gè)關(guān)鍵問題兩個(gè)關(guān)鍵問題:如何建立備份:如何建立備份數(shù)據(jù);如何利用備份數(shù)據(jù)進(jìn)行恢復(fù)。數(shù)據(jù);如何利用備
3、份數(shù)據(jù)進(jìn)行恢復(fù)。2022年3月29日11時(shí)01分3數(shù)據(jù)轉(zhuǎn)儲(chǔ)數(shù)據(jù)轉(zhuǎn)儲(chǔ)o數(shù)據(jù)庫恢復(fù)采用的基本技術(shù)數(shù)據(jù)庫恢復(fù)采用的基本技術(shù):數(shù)據(jù)轉(zhuǎn)儲(chǔ)數(shù)據(jù)轉(zhuǎn)儲(chǔ)(也稱為(也稱為數(shù)據(jù)庫備份數(shù)據(jù)庫備份)。)。o轉(zhuǎn)儲(chǔ)就是定期地將整個(gè)數(shù)據(jù)庫復(fù)制到輔轉(zhuǎn)儲(chǔ)就是定期地將整個(gè)數(shù)據(jù)庫復(fù)制到輔助存儲(chǔ)設(shè)備上,比如磁帶、磁盤助存儲(chǔ)設(shè)備上,比如磁帶、磁盤。o數(shù)據(jù)轉(zhuǎn)儲(chǔ)數(shù)據(jù)轉(zhuǎn)儲(chǔ)只能將數(shù)據(jù)庫恢復(fù)到轉(zhuǎn)儲(chǔ)時(shí)的只能將數(shù)據(jù)庫恢復(fù)到轉(zhuǎn)儲(chǔ)時(shí)的狀態(tài)。如果想恢復(fù)到故障發(fā)生時(shí)的狀態(tài)狀態(tài)。如果想恢復(fù)到故障發(fā)生時(shí)的狀態(tài),則必須利用轉(zhuǎn)儲(chǔ)之后的事務(wù)日志,則必須利用轉(zhuǎn)儲(chǔ)之后的事務(wù)日志。2022年3月29日11時(shí)01分4轉(zhuǎn)儲(chǔ)分類轉(zhuǎn)儲(chǔ)分類o靜態(tài)轉(zhuǎn)儲(chǔ)靜態(tài)轉(zhuǎn)儲(chǔ)n 在系統(tǒng)中無運(yùn)行事務(wù)時(shí)進(jìn)
4、行。在系統(tǒng)中無運(yùn)行事務(wù)時(shí)進(jìn)行。n 在轉(zhuǎn)儲(chǔ)期間不允許對數(shù)據(jù)庫進(jìn)行任何操在轉(zhuǎn)儲(chǔ)期間不允許對數(shù)據(jù)庫進(jìn)行任何操作。作。o動(dòng)態(tài)轉(zhuǎn)儲(chǔ)動(dòng)態(tài)轉(zhuǎn)儲(chǔ)n 不用等待正在運(yùn)行的事務(wù)結(jié)束不用等待正在運(yùn)行的事務(wù)結(jié)束。n 在轉(zhuǎn)儲(chǔ)在轉(zhuǎn)儲(chǔ)期間期間允許運(yùn)行新的事務(wù)允許運(yùn)行新的事務(wù)。2022年3月29日11時(shí)01分5靜態(tài)與動(dòng)態(tài)轉(zhuǎn)儲(chǔ)比較靜態(tài)與動(dòng)態(tài)轉(zhuǎn)儲(chǔ)比較o 靜態(tài)轉(zhuǎn)儲(chǔ)靜態(tài)轉(zhuǎn)儲(chǔ)n 實(shí)現(xiàn)簡單,實(shí)現(xiàn)簡單,n 靜態(tài)轉(zhuǎn)儲(chǔ)得到的一定是數(shù)據(jù)庫的一個(gè)一致性靜態(tài)轉(zhuǎn)儲(chǔ)得到的一定是數(shù)據(jù)庫的一個(gè)一致性副本。副本。n 轉(zhuǎn)儲(chǔ)期間轉(zhuǎn)儲(chǔ)期間但會(huì)降低數(shù)據(jù)庫的可用性。但會(huì)降低數(shù)據(jù)庫的可用性。o 動(dòng)態(tài)轉(zhuǎn)儲(chǔ)動(dòng)態(tài)轉(zhuǎn)儲(chǔ)n 不能保證轉(zhuǎn)儲(chǔ)結(jié)束后的數(shù)據(jù)庫副本是正確的不能保證轉(zhuǎn)儲(chǔ)結(jié)束后的
5、數(shù)據(jù)庫副本是正確的n 必須利用日志將數(shù)據(jù)庫恢復(fù)到一致性狀態(tài)必須利用日志將數(shù)據(jù)庫恢復(fù)到一致性狀態(tài)n 轉(zhuǎn)儲(chǔ)期間轉(zhuǎn)儲(chǔ)期間不會(huì)降低數(shù)據(jù)庫的可用性不會(huì)降低數(shù)據(jù)庫的可用性。2022年3月29日11時(shí)01分6轉(zhuǎn)儲(chǔ)內(nèi)容分類轉(zhuǎn)儲(chǔ)內(nèi)容分類o 海量轉(zhuǎn)儲(chǔ)海量轉(zhuǎn)儲(chǔ):每次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫,每次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫,o 增量轉(zhuǎn)儲(chǔ)增量轉(zhuǎn)儲(chǔ):每次只轉(zhuǎn)儲(chǔ)上一次轉(zhuǎn)儲(chǔ)之后修改每次只轉(zhuǎn)儲(chǔ)上一次轉(zhuǎn)儲(chǔ)之后修改過的數(shù)據(jù)。過的數(shù)據(jù)。o 從恢復(fù)的角度看,用海量轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫副本從恢復(fù)的角度看,用海量轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫副本進(jìn)行恢復(fù)進(jìn)行恢復(fù)更更方便,但如果數(shù)據(jù)量很大,事務(wù)方便,但如果數(shù)據(jù)量很大,事務(wù)處理又比較頻繁,則增量轉(zhuǎn)儲(chǔ)處理又比較頻繁,則增量轉(zhuǎn)儲(chǔ)會(huì)會(huì)更有效。更
6、有效。o 海量轉(zhuǎn)儲(chǔ)和增量轉(zhuǎn)儲(chǔ)可以是動(dòng)態(tài)的,也可以海量轉(zhuǎn)儲(chǔ)和增量轉(zhuǎn)儲(chǔ)可以是動(dòng)態(tài)的,也可以是靜態(tài)的。是靜態(tài)的。2022年3月29日11時(shí)01分713.2 13.2 數(shù)據(jù)庫故障的種類數(shù)據(jù)庫故障的種類o數(shù)據(jù)庫故障是指導(dǎo)致數(shù)據(jù)庫值出現(xiàn)錯(cuò)數(shù)據(jù)庫故障是指導(dǎo)致數(shù)據(jù)庫值出現(xiàn)錯(cuò)誤描述狀態(tài)的情況,誤描述狀態(tài)的情況,o影響數(shù)據(jù)庫運(yùn)行的故障有多種影響數(shù)據(jù)庫運(yùn)行的故障有多種:n 事務(wù)內(nèi)部的故障事務(wù)內(nèi)部的故障n 系統(tǒng)故障系統(tǒng)故障n 其它故障其它故障2022年3月29日11時(shí)01分8事務(wù)內(nèi)部的故障事務(wù)內(nèi)部的故障o可預(yù)期的可預(yù)期的n 這這類類故障可通過事務(wù)程序本身發(fā)現(xiàn)。故障可通過事務(wù)程序本身發(fā)現(xiàn)。n 如銀行轉(zhuǎn)賬事務(wù)中,如果如銀
7、行轉(zhuǎn)賬事務(wù)中,如果A A賬戶金額不賬戶金額不足,則不能進(jìn)行轉(zhuǎn)賬。足,則不能進(jìn)行轉(zhuǎn)賬。o非預(yù)期性的非預(yù)期性的n 這類這類故障不能由應(yīng)用程序來處理。故障不能由應(yīng)用程序來處理。n 如運(yùn)算溢出或因死鎖而被撤銷的事務(wù)如運(yùn)算溢出或因死鎖而被撤銷的事務(wù)。2022年3月29日11時(shí)01分9事務(wù)故障事務(wù)故障o事務(wù)故障意味著事務(wù)沒有達(dá)到終點(diǎn),數(shù)事務(wù)故障意味著事務(wù)沒有達(dá)到終點(diǎn),數(shù)據(jù)庫可能處于不正確的狀態(tài)。據(jù)庫可能處于不正確的狀態(tài)。o數(shù)據(jù)庫的恢復(fù)機(jī)制要在不影響其他事務(wù)數(shù)據(jù)庫的恢復(fù)機(jī)制要在不影響其他事務(wù)運(yùn)行的情況下,強(qiáng)行撤銷該事務(wù)中的全運(yùn)行的情況下,強(qiáng)行撤銷該事務(wù)中的全部操作,使該事務(wù)就像沒發(fā)生過一樣。部操作,使該事務(wù)
8、就像沒發(fā)生過一樣。o這類恢復(fù)操作稱為這類恢復(fù)操作稱為事務(wù)撤銷事務(wù)撤銷(UNDOUNDO)。)。2022年3月29日11時(shí)01分10系統(tǒng)故障系統(tǒng)故障o是指造成系統(tǒng)停止運(yùn)轉(zhuǎn)、系統(tǒng)要重啟是指造成系統(tǒng)停止運(yùn)轉(zhuǎn)、系統(tǒng)要重啟的故障。例如的故障。例如:n 硬件錯(cuò)誤(硬件錯(cuò)誤(CPUCPU故障)故障)n 操作系統(tǒng)故障操作系統(tǒng)故障n 突然停電等。突然停電等。o這這類類故障會(huì)影響正在運(yùn)行的所有事務(wù)故障會(huì)影響正在運(yùn)行的所有事務(wù),但不破壞數(shù)據(jù)庫。,但不破壞數(shù)據(jù)庫。2022年3月29日11時(shí)01分11系統(tǒng)故障產(chǎn)生的結(jié)果系統(tǒng)故障產(chǎn)生的結(jié)果o一些未完成事務(wù)的結(jié)果可能已經(jīng)送入物一些未完成事務(wù)的結(jié)果可能已經(jīng)送入物理數(shù)據(jù)庫中,從
9、而造成數(shù)據(jù)庫可能處于理數(shù)據(jù)庫中,從而造成數(shù)據(jù)庫可能處于不正確狀態(tài);不正確狀態(tài);o有些已經(jīng)提交的事務(wù)可能有一部分結(jié)果有些已經(jīng)提交的事務(wù)可能有一部分結(jié)果還保留在緩沖區(qū)中,尚未寫到物理數(shù)據(jù)還保留在緩沖區(qū)中,尚未寫到物理數(shù)據(jù)庫中,庫中,因此因此會(huì)丟失這些事務(wù)對數(shù)據(jù)的修會(huì)丟失這些事務(wù)對數(shù)據(jù)的修改,使數(shù)據(jù)庫處于不一致狀態(tài)。改,使數(shù)據(jù)庫處于不一致狀態(tài)。2022年3月29日11時(shí)01分12系統(tǒng)故障恢復(fù)方法系統(tǒng)故障恢復(fù)方法o恢復(fù)子系統(tǒng)在系統(tǒng)重新啟動(dòng)時(shí)必須恢復(fù)子系統(tǒng)在系統(tǒng)重新啟動(dòng)時(shí)必須:n 撤銷所有未完成的事務(wù)撤銷所有未完成的事務(wù)n 重做所有已提交的事務(wù)重做所有已提交的事務(wù)o從而從而保證將數(shù)據(jù)庫恢復(fù)到一致狀態(tài)。保
10、證將數(shù)據(jù)庫恢復(fù)到一致狀態(tài)。2022年3月29日11時(shí)01分13其他故障其他故障o 介質(zhì)故障或由計(jì)算機(jī)病毒引起的故障或介質(zhì)故障或由計(jì)算機(jī)病毒引起的故障或破壞,破壞,均均歸為其歸為其他他故障。故障。o 介質(zhì)故障介質(zhì)故障指外存故障,如磁盤損壞等。指外存故障,如磁盤損壞等。這類故障會(huì)對數(shù)據(jù)庫造成破壞,并影響這類故障會(huì)對數(shù)據(jù)庫造成破壞,并影響正在操作的數(shù)據(jù)庫的所有事務(wù)。這類故正在操作的數(shù)據(jù)庫的所有事務(wù)。這類故障雖然發(fā)生的可能性很小,但破壞性很障雖然發(fā)生的可能性很小,但破壞性很大。大。o 計(jì)算機(jī)病毒計(jì)算機(jī)病毒的破壞性很大,而且極易傳的破壞性很大,而且極易傳播,它也可以對數(shù)據(jù)庫造成毀滅性的破播,它也可以對數(shù)
11、據(jù)庫造成毀滅性的破壞。壞。2022年3月29日11時(shí)01分14故障對數(shù)據(jù)庫的影響故障對數(shù)據(jù)庫的影響o 有兩種可能性:有兩種可能性:n 一種是數(shù)據(jù)庫本身的破壞;一種是數(shù)據(jù)庫本身的破壞;n 另一種是數(shù)據(jù)庫沒有破壞,但數(shù)據(jù)可能不正確另一種是數(shù)據(jù)庫沒有破壞,但數(shù)據(jù)可能不正確(因事務(wù)非正常終止)。(因事務(wù)非正常終止)。o 數(shù)據(jù)庫恢復(fù)就是保證數(shù)據(jù)庫的正確和一致數(shù)據(jù)庫恢復(fù)就是保證數(shù)據(jù)庫的正確和一致,其原理是:,其原理是:冗余冗余。n 即數(shù)據(jù)庫中任何一部分被破壞的或不正確的數(shù)即數(shù)據(jù)庫中任何一部分被破壞的或不正確的數(shù)據(jù)均可根據(jù)冗余數(shù)據(jù)來重建。據(jù)均可根據(jù)冗余數(shù)據(jù)來重建。o 恢復(fù)的原理很簡單,但實(shí)現(xiàn)的技術(shù)細(xì)節(jié)卻很復(fù)
12、雜恢復(fù)的原理很簡單,但實(shí)現(xiàn)的技術(shù)細(xì)節(jié)卻很復(fù)雜2022年3月29日11時(shí)01分1513.3 13.3 數(shù)據(jù)庫恢復(fù)的類型數(shù)據(jù)庫恢復(fù)的類型o無論出現(xiàn)何種類型的故障,都必須終無論出現(xiàn)何種類型的故障,都必須終止或提交事務(wù),以維護(hù)數(shù)據(jù)完整性。止或提交事務(wù),以維護(hù)數(shù)據(jù)完整性。o事務(wù)的恢復(fù)事務(wù)的恢復(fù)類型:類型:n 向前恢復(fù)。向前恢復(fù)。n 向后恢復(fù)。向后恢復(fù)。o介質(zhì)故障恢復(fù)介質(zhì)故障恢復(fù)。2022年3月29日11時(shí)01分1613.3.1 13.3.1 向前恢復(fù)向前恢復(fù)o也稱為也稱為重做重做(REDOREDO)o用于物理損壞情形的恢復(fù)過程用于物理損壞情形的恢復(fù)過程。如:如:n 磁盤損壞磁盤損壞n 向數(shù)據(jù)庫緩沖區(qū)寫入
13、數(shù)據(jù)時(shí)的故障向數(shù)據(jù)庫緩沖區(qū)寫入數(shù)據(jù)時(shí)的故障n 將緩沖區(qū)中的信息傳輸?shù)酱疟P時(shí)出現(xiàn)將緩沖區(qū)中的信息傳輸?shù)酱疟P時(shí)出現(xiàn)的故障的故障2022年3月29日11時(shí)01分17永久生效的更新永久生效的更新o事務(wù)的中間結(jié)果被寫入到數(shù)據(jù)庫緩沖區(qū)事務(wù)的中間結(jié)果被寫入到數(shù)據(jù)庫緩沖區(qū)中,數(shù)據(jù)在緩沖區(qū)和數(shù)據(jù)庫的物理存儲(chǔ)中,數(shù)據(jù)在緩沖區(qū)和數(shù)據(jù)庫的物理存儲(chǔ)之間進(jìn)行傳輸。之間進(jìn)行傳輸。o當(dāng)緩沖區(qū)的數(shù)據(jù)被傳輸?shù)轿锢泶鎯?chǔ)器后當(dāng)緩沖區(qū)的數(shù)據(jù)被傳輸?shù)轿锢泶鎯?chǔ)器后,更新操作才是永久性的。,更新操作才是永久性的。2022年3月29日11時(shí)01分18緩沖區(qū)緩沖區(qū)重做事務(wù)重做事務(wù)o 如果在寫入緩沖區(qū)和傳輸緩沖數(shù)據(jù)到物如果在寫入緩沖區(qū)和傳輸緩沖數(shù)
14、據(jù)到物理存儲(chǔ)器過程中發(fā)生故障,則恢復(fù)管理理存儲(chǔ)器過程中發(fā)生故障,則恢復(fù)管理器必須確定故障發(fā)生時(shí)執(zhí)行器必須確定故障發(fā)生時(shí)執(zhí)行WRITEWRITE操作的操作的事務(wù)的狀態(tài)事務(wù)的狀態(tài):n 如果事務(wù)已經(jīng)執(zhí)行了如果事務(wù)已經(jīng)執(zhí)行了COMMITCOMMIT語句,則恢復(fù)管語句,則恢復(fù)管理器將理器將重做重做(也稱為前滾)事務(wù)的操作(也稱為前滾)事務(wù)的操作并并將將事務(wù)的更新結(jié)果保存到數(shù)據(jù)庫中。事務(wù)的更新結(jié)果保存到數(shù)據(jù)庫中。o 向前恢復(fù)保證了事務(wù)的持久性。向前恢復(fù)保證了事務(wù)的持久性。2022年3月29日11時(shí)01分19向前恢復(fù)過程向前恢復(fù)過程o 首先讀取最新的數(shù)據(jù)庫轉(zhuǎn)儲(chǔ)和修改數(shù)據(jù)首先讀取最新的數(shù)據(jù)庫轉(zhuǎn)儲(chǔ)和修改數(shù)據(jù)的事
15、務(wù)日志。的事務(wù)日志。o 然后讀取日志記錄,從數(shù)據(jù)庫轉(zhuǎn)儲(chǔ)之后然后讀取日志記錄,從數(shù)據(jù)庫轉(zhuǎn)儲(chǔ)之后的第一個(gè)記錄開始,一直讀到物理損壞的第一個(gè)記錄開始,一直讀到物理損壞前的最后一次記錄。前的最后一次記錄。(從后向前讀從后向前讀)o 對于每一條日志記錄,把數(shù)據(jù)庫轉(zhuǎn)儲(chǔ)中對于每一條日志記錄,把數(shù)據(jù)庫轉(zhuǎn)儲(chǔ)中相關(guān)的數(shù)據(jù)值修改為日志記錄中修改后相關(guān)的數(shù)據(jù)值修改為日志記錄中修改后的值,使數(shù)據(jù)庫中的值是事務(wù)執(zhí)行完成的值,使數(shù)據(jù)庫中的值是事務(wù)執(zhí)行完成后的最終結(jié)果。后的最終結(jié)果。2022年3月29日11時(shí)01分20重做示意圖重做示意圖2022年3月29日11時(shí)01分2113.3.2 13.3.2 向后恢復(fù)向后恢復(fù)o向后恢
16、復(fù)向后恢復(fù)(也稱為撤銷,(也稱為撤銷,UNDOUNDO)用)用于數(shù)據(jù)庫正常操作過程中發(fā)生錯(cuò)誤時(shí)于數(shù)據(jù)庫正常操作過程中發(fā)生錯(cuò)誤時(shí)的恢復(fù)過程。的恢復(fù)過程。o這種錯(cuò)誤可能是人為鍵入的數(shù)據(jù),或這種錯(cuò)誤可能是人為鍵入的數(shù)據(jù),或是程序異常結(jié)束而留下的未完成的數(shù)是程序異常結(jié)束而留下的未完成的數(shù)據(jù)庫修改。據(jù)庫修改。2022年3月29日11時(shí)01分22向后恢復(fù)(續(xù))向后恢復(fù)(續(xù))o如果在故障發(fā)生時(shí)事務(wù)尚未提交,則如果在故障發(fā)生時(shí)事務(wù)尚未提交,則將導(dǎo)致數(shù)據(jù)庫的不一致性。將導(dǎo)致數(shù)據(jù)庫的不一致性。o因此恢復(fù)管理器必須撤銷(回滾)事因此恢復(fù)管理器必須撤銷(回滾)事務(wù)對數(shù)據(jù)庫的所有影響。務(wù)對數(shù)據(jù)庫的所有影響。o向后恢復(fù)保
17、證了事務(wù)的原子性。向后恢復(fù)保證了事務(wù)的原子性。2022年3月29日11時(shí)01分23向后恢復(fù)過程向后恢復(fù)過程o從數(shù)據(jù)庫的當(dāng)前狀態(tài)和事務(wù)日志的最從數(shù)據(jù)庫的當(dāng)前狀態(tài)和事務(wù)日志的最后一條記錄開始,按后一條記錄開始,按從前向后從前向后的順序的順序讀取日志,讀取日志,o將數(shù)據(jù)庫中已更新的數(shù)據(jù)值改為記錄將數(shù)據(jù)庫中已更新的數(shù)據(jù)值改為記錄在日志中的更新前的值(前像),直在日志中的更新前的值(前像),直至錯(cuò)誤發(fā)生點(diǎn)。至錯(cuò)誤發(fā)生點(diǎn)。2022年3月29日11時(shí)01分24回滾示意圖回滾示意圖2022年3月29日11時(shí)01分25示例示例1 12022年3月29日11時(shí)01分26撤銷撤銷撤銷撤銷重做重做重做重做重做重做重做
18、重做示例示例2 2有有事務(wù)操作歷史及相應(yīng)的日志記錄事務(wù)操作歷史及相應(yīng)的日志記錄:時(shí)間時(shí)間事務(wù)操作事務(wù)操作日志記錄日志記錄說明說明時(shí)刻時(shí)刻1R1(A, 50)(S, 1)啟動(dòng)事務(wù)啟動(dòng)事務(wù)T1的日志記錄,無需在日志中記錄讀操作,的日志記錄,無需在日志中記錄讀操作,但這個(gè)操作表示事務(wù)但這個(gè)操作表示事務(wù)T1的開始的開始時(shí)刻時(shí)刻2W1(A, 20)(W, 1, A, 50, 20)將事務(wù)將事務(wù)T1修改修改A的操作記入日志。的操作記入日志。A修改前的值是修改前的值是50,修改后的值是,修改后的值是20時(shí)刻時(shí)刻3R2(C, 100)(S, 2)啟動(dòng)事務(wù)啟動(dòng)事務(wù)T2的日志記錄的日志記錄時(shí)刻時(shí)刻4W2(C, 5
19、0)(W, 2, C, 100, 50)將事務(wù)將事務(wù)T2修改修改C的操作記入日志。的操作記入日志。C修改前的值是修改前的值是100,修改后的值是,修改后的值是50時(shí)刻時(shí)刻5C2(C, 2)提交提交T2(將日志緩沖區(qū)中的信息寫入日志文件)(將日志緩沖區(qū)中的信息寫入日志文件)時(shí)刻時(shí)刻6R1(B, 50)沒有日志項(xiàng)沒有日志項(xiàng)時(shí)刻時(shí)刻7W1(B, 80)(W, 1, B, 50, 80)將事務(wù)將事務(wù)T1修改修改B的操作記入日志。的操作記入日志。B修改前的值是修改前的值是50,修改后的值是,修改后的值是80時(shí)刻時(shí)刻8C1 (C, 1)提交提交T1(將日志緩沖區(qū)中的信息寫入日志文件)(將日志緩沖區(qū)中的信息
20、寫入日志文件)恢復(fù)完成之后恢復(fù)完成之后:A=50A=50,B=50B=50,C=50C=50系統(tǒng)崩潰系統(tǒng)崩潰X故障恢復(fù)過程故障恢復(fù)過程o在發(fā)生故障的系統(tǒng)被重啟后,數(shù)據(jù)庫在發(fā)生故障的系統(tǒng)被重啟后,數(shù)據(jù)庫的恢復(fù)經(jīng)歷了兩個(gè)階段:的恢復(fù)經(jīng)歷了兩個(gè)階段:n 撤銷撤銷:按逆向順序讀取日志文件中的按逆向順序讀取日志文件中的記錄直至第一條記錄;記錄直至第一條記錄;n 重做重做:順序向前讀取日志文件中的記順序向前讀取日志文件中的記錄直到最后一條記錄。錄直到最后一條記錄。o大多數(shù)商業(yè)大多數(shù)商業(yè)DBMSDBMS都是都是先進(jìn)行撤銷先進(jìn)行撤銷,再再進(jìn)行重做進(jìn)行重做。2022年3月29日11時(shí)01分28在在W W1 1(
21、B,80)(B,80)之后之后發(fā)生故障的事務(wù)操作撤銷過程發(fā)生故障的事務(wù)操作撤銷過程2022年3月29日11時(shí)01分29序號序號日志記錄日志記錄完成的撤銷操作完成的撤銷操作1(C, 2)將事務(wù)將事務(wù)T2放入事務(wù)提交列表放入事務(wù)提交列表2(W, 2, C, 100, 50) 由于事務(wù)由于事務(wù)T2在提交列表,因此不進(jìn)行任何操作在提交列表,因此不進(jìn)行任何操作3(S, 2)記錄事務(wù)記錄事務(wù)T2不再活動(dòng)不再活動(dòng)4(W, 1, A, 50, 20)事務(wù)事務(wù)T1還未提交。最后一部是寫操作,因此系統(tǒng)執(zhí)行還未提交。最后一部是寫操作,因此系統(tǒng)執(zhí)行撤銷操作,把撤銷操作,把A改為修改前的值(改為修改前的值(50)。將事
22、務(wù))。將事務(wù)T1放入放入未提交事務(wù)列表未提交事務(wù)列表5(S, 1)到達(dá)事務(wù)到達(dá)事務(wù)T1的開始點(diǎn),現(xiàn)在沒有可撤銷的活動(dòng)了,因的開始點(diǎn),現(xiàn)在沒有可撤銷的活動(dòng)了,因此撤銷階段結(jié)束此撤銷階段結(jié)束在在W W1 1(B,80)(B,80)之后之后發(fā)生故障的事務(wù)操作發(fā)生故障的事務(wù)操作重做重做過過程程2022年3月29日11時(shí)01分30序號序號日志記錄日志記錄重做操作重做操作6(S, 1)無動(dòng)作無動(dòng)作7(W, 1, A, 50, 20)事務(wù)事務(wù)T1未提交,無動(dòng)作未提交,無動(dòng)作8(S, 2)無動(dòng)作無動(dòng)作9(W, 2, C, 100, 50)由于事務(wù)由于事務(wù)T2已提交,因此重做該修改,即把已提交,因此重做該修改,
23、即把C的的值改為值改為5010(C, 2)無動(dòng)作,恢復(fù)結(jié)束無動(dòng)作,恢復(fù)結(jié)束13.3.3 13.3.3 介質(zhì)故障恢復(fù)介質(zhì)故障恢復(fù)o當(dāng)發(fā)生介質(zhì)故障時(shí),磁盤上的物理數(shù)當(dāng)發(fā)生介質(zhì)故障時(shí),磁盤上的物理數(shù)據(jù)和日志文件均遭到破壞,這是破壞據(jù)和日志文件均遭到破壞,這是破壞最嚴(yán)重的一種故障。最嚴(yán)重的一種故障。o要從介質(zhì)故障中恢復(fù)數(shù)據(jù)庫,必須在要從介質(zhì)故障中恢復(fù)數(shù)據(jù)庫,必須在故障前對數(shù)據(jù)庫進(jìn)行定期轉(zhuǎn)儲(chǔ)。故障前對數(shù)據(jù)庫進(jìn)行定期轉(zhuǎn)儲(chǔ)。o在介質(zhì)正常后,再利用在介質(zhì)正常后,再利用轉(zhuǎn)儲(chǔ)恢復(fù)數(shù)據(jù)轉(zhuǎn)儲(chǔ)恢復(fù)數(shù)據(jù)庫庫。2022年3月29日11時(shí)01分3113.4 13.4 恢復(fù)技術(shù)恢復(fù)技術(shù)o恢復(fù)技術(shù)依賴于數(shù)據(jù)庫損壞的類型和恢復(fù)技術(shù)
24、依賴于數(shù)據(jù)庫損壞的類型和程度。程度。o基本原則是事務(wù)的所有操作必須作為基本原則是事務(wù)的所有操作必須作為一個(gè)邏輯工作單元來對待,并且要保一個(gè)邏輯工作單元來對待,并且要保證數(shù)據(jù)庫的一致性。證數(shù)據(jù)庫的一致性。o數(shù)據(jù)庫損壞數(shù)據(jù)庫損壞的的類型:類型:n 物理損壞物理損壞n 非物理或非物理或事務(wù)故障事務(wù)故障2022年3月29日11時(shí)01分32物理損壞物理損壞o需要利用數(shù)據(jù)庫的最新轉(zhuǎn)儲(chǔ)進(jìn)行恢復(fù)。需要利用數(shù)據(jù)庫的最新轉(zhuǎn)儲(chǔ)進(jìn)行恢復(fù)。o如果事務(wù)日志文件沒有損壞,還可利用如果事務(wù)日志文件沒有損壞,還可利用事務(wù)日志重新執(zhí)行已提交事務(wù)的更新操事務(wù)日志重新執(zhí)行已提交事務(wù)的更新操作。作。2022年3月29日11時(shí)01分33
25、事務(wù)故障事務(wù)故障o需要需要撤銷撤銷(回滾)引起不一致的修改。(回滾)引起不一致的修改。o為確保更新已到達(dá)物理存儲(chǔ)設(shè)備,有必為確保更新已到達(dá)物理存儲(chǔ)設(shè)備,有必要要重做重做(前滾)一些事務(wù)。(前滾)一些事務(wù)。o通過使用事務(wù)日志文件中更新前的值(通過使用事務(wù)日志文件中更新前的值(前像前像)和更新后的值()和更新后的值(后像后像),使數(shù)據(jù)),使數(shù)據(jù)庫恢復(fù)到一致性狀態(tài)。這種技術(shù)也稱為庫恢復(fù)到一致性狀態(tài)。這種技術(shù)也稱為基于日志的恢復(fù)技術(shù)基于日志的恢復(fù)技術(shù)。有兩種:有兩種:n 延遲更新延遲更新n 立即更新立即更新2022年3月29日11時(shí)01分3413.4.1 13.4.1 延遲更新技術(shù)延遲更新技術(shù)o只有到
26、達(dá)事務(wù)的提交點(diǎn),更新才被寫只有到達(dá)事務(wù)的提交點(diǎn),更新才被寫入數(shù)據(jù)庫。入數(shù)據(jù)庫。o即:即:數(shù)據(jù)庫的更新要延遲到事務(wù)執(zhí)行數(shù)據(jù)庫的更新要延遲到事務(wù)執(zhí)行成功并提交時(shí)。成功并提交時(shí)。o在事務(wù)執(zhí)行過程中,更新只被記錄在在事務(wù)執(zhí)行過程中,更新只被記錄在事務(wù)日志和緩沖區(qū)中。當(dāng)事務(wù)提交后事務(wù)日志和緩沖區(qū)中。當(dāng)事務(wù)提交后,更新被記錄到數(shù)據(jù)庫。,更新被記錄到數(shù)據(jù)庫。2022年3月29日11時(shí)01分35延遲更新技術(shù)延遲更新技術(shù)(續(xù))(續(xù))o如果一個(gè)事務(wù)在到達(dá)提交點(diǎn)之前出現(xiàn)如果一個(gè)事務(wù)在到達(dá)提交點(diǎn)之前出現(xiàn)故障,將不會(huì)修改數(shù)據(jù)庫,因此沒必故障,將不會(huì)修改數(shù)據(jù)庫,因此沒必要進(jìn)行撤銷操作。要進(jìn)行撤銷操作。o但如果發(fā)生故障時(shí)但
27、如果發(fā)生故障時(shí)事務(wù)的更新還未寫事務(wù)的更新還未寫入到數(shù)據(jù)庫入到數(shù)據(jù)庫,則必須,則必須重做已提交事務(wù)重做已提交事務(wù)的更新。的更新。2022年3月29日11時(shí)01分36延遲更新技術(shù)延遲更新技術(shù)的日志內(nèi)容的日志內(nèi)容o 當(dāng)事務(wù)當(dāng)事務(wù)T T啟動(dòng)啟動(dòng)時(shí),將時(shí),將“事務(wù)開始事務(wù)開始”(或(或T, BEGIN)記錄寫入事務(wù)日志文件。)記錄寫入事務(wù)日志文件。o 在事務(wù)在事務(wù)T T執(zhí)行執(zhí)行期間,寫入一條包含所有之前指定期間,寫入一條包含所有之前指定的日志數(shù)據(jù)的日志記錄,例如的日志數(shù)據(jù)的日志記錄,例如,為屬性為屬性A A賦新值賦新值aiai,則用,則用WRITE ( A, )表示。表示。o 當(dāng)事務(wù)當(dāng)事務(wù)T T的所有活
28、動(dòng)都的所有活動(dòng)都成功提交成功提交時(shí),將記錄時(shí),將記錄T, COMMIT寫入事務(wù)日志,并將該事務(wù)的所有日志寫入事務(wù)日志,并將該事務(wù)的所有日志記錄寫到磁盤上,然后提交該事務(wù)。記錄寫到磁盤上,然后提交該事務(wù)。o 如果事務(wù)如果事務(wù)T T被被撤銷撤銷了,則忽略該事務(wù)的事務(wù)日志了,則忽略該事務(wù)的事務(wù)日志,并且不執(zhí)行寫操作。,并且不執(zhí)行寫操作。2022年3月29日11時(shí)01分37注意注意o 是在事務(wù)真正提交之前將日志記錄寫到磁盤是在事務(wù)真正提交之前將日志記錄寫到磁盤o 因此,如果在數(shù)據(jù)庫的真正更新過程中發(fā)生因此,如果在數(shù)據(jù)庫的真正更新過程中發(fā)生了故障,日志記錄不會(huì)受損。了故障,日志記錄不會(huì)受損。o 當(dāng)故障發(fā)
29、生時(shí),檢查日志文件,找到故障發(fā)當(dāng)故障發(fā)生時(shí),檢查日志文件,找到故障發(fā)生時(shí)正在執(zhí)行的所有事務(wù)。從日志文件的最生時(shí)正在執(zhí)行的所有事務(wù)。從日志文件的最后一個(gè)入口開始,回滾到最近的一個(gè)后一個(gè)入口開始,回滾到最近的一個(gè)檢查點(diǎn)檢查點(diǎn)(13.4.413.4.4介紹)記錄介紹)記錄。2022年3月29日11時(shí)01分38恢復(fù)過程恢復(fù)過程o 所有出現(xiàn)了所有出現(xiàn)了事務(wù)開始和事務(wù)提交事務(wù)開始和事務(wù)提交日志記錄的日志記錄的事務(wù)必須被重做。事務(wù)必須被重做。o 重做的順序是日志記錄被寫入日志的順序。重做的順序是日志記錄被寫入日志的順序。o 如果在故障發(fā)生前已經(jīng)執(zhí)行了寫操作,由于如果在故障發(fā)生前已經(jīng)執(zhí)行了寫操作,由于該寫操作
30、對數(shù)據(jù)項(xiàng)沒有影響,因此即使再次該寫操作對數(shù)據(jù)項(xiàng)沒有影響,因此即使再次寫該數(shù)據(jù)也不會(huì)有問題。寫該數(shù)據(jù)也不會(huì)有問題。o 這種方法保證了一定會(huì)更新所有在故障發(fā)生這種方法保證了一定會(huì)更新所有在故障發(fā)生前沒有被正確更新的數(shù)據(jù)項(xiàng)前沒有被正確更新的數(shù)據(jù)項(xiàng)。2022年3月29日11時(shí)01分39恢復(fù)過程(續(xù))恢復(fù)過程(續(xù))o對所有出現(xiàn)了對所有出現(xiàn)了事務(wù)開始和事務(wù)撤銷事務(wù)開始和事務(wù)撤銷的的日志記錄的事務(wù),不進(jìn)行特別的操作日志記錄的事務(wù),不進(jìn)行特別的操作,因?yàn)樗鼈儗?shí)際上并沒有寫數(shù)據(jù)庫,因?yàn)樗鼈儗?shí)際上并沒有寫數(shù)據(jù)庫。o如果在恢復(fù)過程中又發(fā)生了系統(tǒng)崩潰如果在恢復(fù)過程中又發(fā)生了系統(tǒng)崩潰,則可以再次使用日志記錄來恢復(fù)數(shù),則
31、可以再次使用日志記錄來恢復(fù)數(shù)據(jù)庫。據(jù)庫。2022年3月29日11時(shí)01分40轉(zhuǎn)賬示例轉(zhuǎn)賬示例o 賬戶賬戶A A轉(zhuǎn)賬給賬戶轉(zhuǎn)賬給賬戶B 2000B 2000元,假設(shè)賬戶元,假設(shè)賬戶A A現(xiàn)現(xiàn)余額余額1000010000元,賬戶元,賬戶B B現(xiàn)現(xiàn)余額余額30003000元元。o 轉(zhuǎn)賬轉(zhuǎn)賬事務(wù)事務(wù)T T的的正常執(zhí)行正常執(zhí)行過程過程:2022年3月29日11時(shí)01分41時(shí)間時(shí)間事務(wù)步驟事務(wù)步驟動(dòng)作動(dòng)作時(shí)刻時(shí)刻1READ(A, a1)讀取賬戶讀取賬戶A的當(dāng)前余額的當(dāng)前余額時(shí)刻時(shí)刻2a1 = a1 - 2000將賬戶將賬戶A的余額減去的余額減去2000時(shí)刻時(shí)刻3WRITE(A, a1)將新的余額寫入到賬戶
32、表中將新的余額寫入到賬戶表中時(shí)刻時(shí)刻4READ(B, b1)讀取賬戶讀取賬戶B的當(dāng)前余額的當(dāng)前余額時(shí)刻時(shí)刻5b1 = b1 + 2000將賬戶將賬戶B的余額加上的余額加上2000時(shí)刻時(shí)刻6WRITE(B, b1)將新的余額寫入到賬戶表中將新的余額寫入到賬戶表中立即更新立即更新轉(zhuǎn)賬示例(續(xù))轉(zhuǎn)賬示例(續(xù))o 轉(zhuǎn)賬轉(zhuǎn)賬事務(wù)事務(wù)T T的延時(shí)更新日志記錄的延時(shí)更新日志記錄2022年3月29日11時(shí)01分42時(shí)間時(shí)間日志記錄日志記錄數(shù)據(jù)庫存儲(chǔ)的值數(shù)據(jù)庫存儲(chǔ)的值事務(wù)開始之前事務(wù)開始之前A = 10000B = 3000時(shí)刻時(shí)刻1時(shí)刻時(shí)刻2時(shí)刻時(shí)刻3時(shí)刻時(shí)刻4事務(wù)執(zhí)行之后事務(wù)執(zhí)行之后A = 8000B =
33、5000轉(zhuǎn)賬示例(續(xù))轉(zhuǎn)賬示例(續(xù))o 在在記錄被寫入事務(wù)日志之后、更新記錄被寫入事務(wù)日志之后、更新記錄被寫入數(shù)據(jù)庫之前發(fā)生故障時(shí),記錄被寫入數(shù)據(jù)庫之前發(fā)生故障時(shí),事務(wù)事務(wù)T T的延的延時(shí)更新日志記錄時(shí)更新日志記錄:2022年3月29日11時(shí)01分43時(shí)間時(shí)間日志記錄日志記錄數(shù)據(jù)庫存儲(chǔ)的值數(shù)據(jù)庫存儲(chǔ)的值事務(wù)開始之前事務(wù)開始之前A = 10000B = 3000時(shí)刻時(shí)刻1時(shí)刻時(shí)刻2時(shí)刻時(shí)刻3時(shí)刻時(shí)刻4當(dāng)系統(tǒng)進(jìn)行恢復(fù)時(shí),重做事務(wù)當(dāng)系統(tǒng)進(jìn)行恢復(fù)時(shí),重做事務(wù)T T的操作,的操作,賬戶賬戶A A和和B B的新值的新值80008000和和50005000被寫入到數(shù)據(jù)庫中。被寫入到數(shù)據(jù)庫中。轉(zhuǎn)賬示例(續(xù))轉(zhuǎn)
34、賬示例(續(xù))o 在在WRITEWRITE(B B,b b1 1)操作執(zhí)行之前發(fā)生故障的事務(wù))操作執(zhí)行之前發(fā)生故障的事務(wù)日志。日志。事務(wù)事務(wù)T T的延時(shí)更新日志記錄的延時(shí)更新日志記錄:2022年3月29日11時(shí)01分44時(shí)間時(shí)間日志記錄日志記錄數(shù)據(jù)庫存儲(chǔ)的值數(shù)據(jù)庫存儲(chǔ)的值事務(wù)開始之前事務(wù)開始之前A = 10000B = 3000時(shí)刻時(shí)刻1時(shí)刻時(shí)刻2時(shí)刻時(shí)刻3當(dāng)系統(tǒng)進(jìn)行恢復(fù)時(shí),無需執(zhí)行任何操作。當(dāng)系統(tǒng)進(jìn)行恢復(fù)時(shí),無需執(zhí)行任何操作。數(shù)據(jù)庫中賬戶數(shù)據(jù)庫中賬戶A A和和B B的值仍為的值仍為1000010000和和30003000。13.4.2 13.4.2 立即更新技術(shù)立即更新技術(shù)o更新一旦發(fā)生即被施
35、加到數(shù)據(jù)庫中,更新一旦發(fā)生即被施加到數(shù)據(jù)庫中,而無需等到事務(wù)提交點(diǎn)以及所有的更而無需等到事務(wù)提交點(diǎn)以及所有的更改被保存在事務(wù)日志時(shí)。改被保存在事務(wù)日志時(shí)。o除了需要重做故障之前已提交的事務(wù)除了需要重做故障之前已提交的事務(wù)所做的更改外,還需要撤銷當(dāng)故障發(fā)所做的更改外,還需要撤銷當(dāng)故障發(fā)生時(shí)仍未提交的事務(wù)所造成的影響。生時(shí)仍未提交的事務(wù)所造成的影響。2022年3月29日11時(shí)01分45立即更新技術(shù)的日志內(nèi)容立即更新技術(shù)的日志內(nèi)容o 當(dāng)事務(wù)當(dāng)事務(wù)T T開始開始時(shí),時(shí),“事務(wù)開始事務(wù)開始”(或(或)被)被寫入事務(wù)日志文件。寫入事務(wù)日志文件。o 當(dāng)執(zhí)行當(dāng)執(zhí)行寫操作寫操作時(shí),向日志文件中寫入一條包含必要數(shù)
36、時(shí),向日志文件中寫入一條包含必要數(shù)據(jù)的記錄。據(jù)的記錄。o 一旦寫入了事務(wù)日志記錄,就對數(shù)據(jù)庫緩沖區(qū)進(jìn)行寫一旦寫入了事務(wù)日志記錄,就對數(shù)據(jù)庫緩沖區(qū)進(jìn)行寫更新更新。o 當(dāng)緩沖區(qū)數(shù)據(jù)被轉(zhuǎn)入輔存時(shí),寫入對數(shù)據(jù)庫的更新當(dāng)緩沖區(qū)數(shù)據(jù)被轉(zhuǎn)入輔存時(shí),寫入對數(shù)據(jù)庫的更新o 讀數(shù)據(jù)庫自身的更新在緩沖區(qū)下一次被刷新到輔存時(shí)讀數(shù)據(jù)庫自身的更新在緩沖區(qū)下一次被刷新到輔存時(shí)進(jìn)行進(jìn)行。o 當(dāng)事務(wù)當(dāng)事務(wù)T T提交提交時(shí),時(shí),“事務(wù)提交事務(wù)提交”()記錄)記錄被寫入事務(wù)日志。被寫入事務(wù)日志。2022年3月29日11時(shí)01分46說明說明o日志記錄是在對應(yīng)的寫操作施加到數(shù)日志記錄是在對應(yīng)的寫操作施加到數(shù)據(jù)庫之前被寫入的,這稱為據(jù)庫
37、之前被寫入的,這稱為“先寫日先寫日志協(xié)議志協(xié)議”。o通過使用先寫日志協(xié)議,恢復(fù)管理器通過使用先寫日志協(xié)議,恢復(fù)管理器可以大膽假設(shè),如果在日志文件中不可以大膽假設(shè),如果在日志文件中不存在某個(gè)事務(wù)的提交記錄,則該事務(wù)存在某個(gè)事務(wù)的提交記錄,則該事務(wù)在故障發(fā)生時(shí)一定處于活動(dòng)狀態(tài),因在故障發(fā)生時(shí)一定處于活動(dòng)狀態(tài),因此必須被撤銷。此必須被撤銷。2022年3月29日11時(shí)01分47說明說明o 如果事務(wù)被撤銷,則可利用日志撤銷事如果事務(wù)被撤銷,則可利用日志撤銷事務(wù)所做的修改,因?yàn)槿罩局邪怂袆?wù)所做的修改,因?yàn)槿罩局邪怂斜桓伦侄蔚脑贾担ū桓伦侄蔚脑贾担ㄇ跋袂跋瘢#?。o 由于一個(gè)事務(wù)可能對一
38、個(gè)數(shù)據(jù)項(xiàng)進(jìn)行過由于一個(gè)事務(wù)可能對一個(gè)數(shù)據(jù)項(xiàng)進(jìn)行過多次更改,因此對寫的撤銷應(yīng)按多次更改,因此對寫的撤銷應(yīng)按逆序逆序進(jìn)進(jìn)行。行。o 無論事務(wù)的寫操作是否被施加到了數(shù)據(jù)無論事務(wù)的寫操作是否被施加到了數(shù)據(jù)庫,寫入數(shù)據(jù)項(xiàng)的前像保證了數(shù)據(jù)庫被庫,寫入數(shù)據(jù)項(xiàng)的前像保證了數(shù)據(jù)庫被恢復(fù)到事務(wù)開始前的狀態(tài)?;謴?fù)到事務(wù)開始前的狀態(tài)。2022年3月29日11時(shí)01分48恢復(fù)過程恢復(fù)過程o 對于任何對于任何在日志中同時(shí)有在日志中同時(shí)有“事務(wù)開始事務(wù)開始”和和“事事務(wù)提交務(wù)提交”記錄的事務(wù),用日志記錄來記錄的事務(wù),用日志記錄來重做重做,按,按日志記錄的方式寫入更新字段的日志記錄的方式寫入更新字段的后像值后像值。o 對于任
39、何對于任何在日志中只有在日志中只有“事務(wù)開始事務(wù)開始”記錄而記錄而沒沒有有“事務(wù)提交事務(wù)提交”記錄的事務(wù),必須記錄的事務(wù),必須撤銷撤銷它。這它。這里使用日志記錄得到被修改字段的里使用日志記錄得到被修改字段的前像值前像值,并,并將前像值寫入數(shù)據(jù)庫,從而將數(shù)據(jù)庫恢復(fù)到事將前像值寫入數(shù)據(jù)庫,從而將數(shù)據(jù)庫恢復(fù)到事務(wù)開始之前的狀態(tài)。撤銷操作按它們被寫入日務(wù)開始之前的狀態(tài)。撤銷操作按它們被寫入日志的逆序進(jìn)行。志的逆序進(jìn)行。2022年3月29日11時(shí)01分49立即更新日志示例立即更新日志示例o 轉(zhuǎn)賬轉(zhuǎn)賬事務(wù)事務(wù)T T的立即更新日志記錄的立即更新日志記錄:2022年3月29日11時(shí)01分50時(shí)間時(shí)間日志記錄日
40、志記錄數(shù)據(jù)庫存儲(chǔ)的值數(shù)據(jù)庫存儲(chǔ)的值事務(wù)開始之前事務(wù)開始之前A = 10000B = 3000時(shí)刻時(shí)刻1時(shí)刻時(shí)刻2時(shí)刻時(shí)刻3A = 8000時(shí)刻時(shí)刻4時(shí)刻時(shí)刻5B = 5000時(shí)刻時(shí)刻6轉(zhuǎn)賬事務(wù)轉(zhuǎn)賬事務(wù)立即更新示例(續(xù))立即更新示例(續(xù))o 寫操作寫操作WRITE(B, bWRITE(B, b1 1) )執(zhí)行之前發(fā)生故障時(shí)執(zhí)行之前發(fā)生故障時(shí)的事務(wù)日志的事務(wù)日志:2022年3月29日11時(shí)01分51時(shí)間時(shí)間日志記錄日志記錄數(shù)據(jù)庫存儲(chǔ)的值數(shù)據(jù)庫存儲(chǔ)的值事務(wù)開始之前事務(wù)開始之前A = 10000B = 3000時(shí)刻時(shí)刻1時(shí)刻時(shí)刻2時(shí)刻時(shí)刻3A = 8000事務(wù)事務(wù)T T必須被撤銷,因此執(zhí)行必須被撤銷,
41、因此執(zhí)行UNDO(T)UNDO(T) 操作,使操作,使A A的值恢復(fù)的值恢復(fù)為為1000010000,且事務(wù),且事務(wù)T T需要重新開始。需要重新開始。立即更新示例(續(xù))立即更新示例(續(xù))o 當(dāng)當(dāng)被寫入事務(wù)日志之后,但新值被被寫入事務(wù)日志之后,但新值被寫入數(shù)據(jù)庫之前發(fā)生故障時(shí)的事務(wù)日志寫入數(shù)據(jù)庫之前發(fā)生故障時(shí)的事務(wù)日志:時(shí)間時(shí)間日志記錄日志記錄數(shù)據(jù)庫存儲(chǔ)的值數(shù)據(jù)庫存儲(chǔ)的值事務(wù)開始之前事務(wù)開始之前A = 10000B = 3000時(shí)刻時(shí)刻1時(shí)刻時(shí)刻2時(shí)刻時(shí)刻3A = 8000時(shí)刻時(shí)刻4時(shí)刻時(shí)刻5B = 5000時(shí)刻時(shí)刻6當(dāng)系統(tǒng)恢復(fù)時(shí),執(zhí)行當(dāng)系統(tǒng)恢復(fù)時(shí),執(zhí)行REDO(T)REDO(T) 操作,操作,
42、A A和和B B的值分別為的值分別為80008000和和50005000。13.4.3 13.4.3 鏡像頁技術(shù)鏡像頁技術(shù)o 在鏡像頁模式中,數(shù)據(jù)庫被認(rèn)為是由固在鏡像頁模式中,數(shù)據(jù)庫被認(rèn)為是由固定大小的磁盤定大小的磁盤分區(qū)分區(qū)的邏輯存儲(chǔ)單元組成的邏輯存儲(chǔ)單元組成。o 通過頁表將頁映射到物理通過頁表將頁映射到物理磁盤分區(qū)磁盤分區(qū),數(shù),數(shù)據(jù)庫中的每個(gè)邏輯頁對應(yīng)頁表中的一條據(jù)庫中的每個(gè)邏輯頁對應(yīng)頁表中的一條記錄。每條記錄包含頁所存儲(chǔ)的物理存記錄。每條記錄包含頁所存儲(chǔ)的物理存儲(chǔ)的分區(qū)號。儲(chǔ)的分區(qū)號。o 在單用戶環(huán)境下,鏡像頁技術(shù)不需要使在單用戶環(huán)境下,鏡像頁技術(shù)不需要使用事務(wù)日志,在多用戶環(huán)境下可能需
43、要用事務(wù)日志,在多用戶環(huán)境下可能需要事務(wù)日志來支持并發(fā)控制事務(wù)日志來支持并發(fā)控制。2022年3月29日11時(shí)01分53鏡像頁技術(shù)鏡像頁技術(shù)( (續(xù)續(xù)) )o 鏡像頁方法在事務(wù)的生存期內(nèi),維護(hù)兩個(gè)鏡像頁方法在事務(wù)的生存期內(nèi),維護(hù)兩個(gè)頁表,頁表,:當(dāng)前頁表當(dāng)前頁表、鏡像頁表鏡像頁表。o 當(dāng)事務(wù)剛當(dāng)事務(wù)剛啟動(dòng)啟動(dòng)時(shí),兩個(gè)頁表是一樣的。此時(shí),兩個(gè)頁表是一樣的。此后,鏡像頁表不再改變,并在系統(tǒng)故障時(shí)后,鏡像頁表不再改變,并在系統(tǒng)故障時(shí)用于恢復(fù)數(shù)據(jù)庫。用于恢復(fù)數(shù)據(jù)庫。o 在事務(wù)在事務(wù)執(zhí)行執(zhí)行過程中,當(dāng)前頁表被用于記錄過程中,當(dāng)前頁表被用于記錄對數(shù)據(jù)庫的所有更新。對數(shù)據(jù)庫的所有更新。o 但事務(wù)但事務(wù)結(jié)束結(jié)束
44、時(shí),當(dāng)前頁表轉(zhuǎn)變成鏡像頁表時(shí),當(dāng)前頁表轉(zhuǎn)變成鏡像頁表。2022年3月29日11時(shí)01分54鏡像頁模式鏡像頁模式2022年3月29日11時(shí)01分55說明說明o 被事務(wù)影響的頁被復(fù)制到新的物理存儲(chǔ)被事務(wù)影響的頁被復(fù)制到新的物理存儲(chǔ)區(qū)中,通過當(dāng)前頁表,這些分區(qū)和那些區(qū)中,通過當(dāng)前頁表,這些分區(qū)和那些沒有被修改的分區(qū)是事務(wù)可以訪問的。沒有被修改的分區(qū)是事務(wù)可以訪問的。o 被更改的頁的老版本保持不變,通過鏡被更改的頁的老版本保持不變,通過鏡像頁表事務(wù)仍然可以訪問這些頁。像頁表事務(wù)仍然可以訪問這些頁。o 鏡像頁表包含事務(wù)開始之前頁表中存在鏡像頁表包含事務(wù)開始之前頁表中存在的記錄以及從未被事務(wù)修改的分區(qū)記錄
45、的記錄以及從未被事務(wù)修改的分區(qū)記錄。o 鏡像頁表在事務(wù)發(fā)生時(shí)保持不變,用于鏡像頁表在事務(wù)發(fā)生時(shí)保持不變,用于撤銷事務(wù)時(shí)使用。撤銷事務(wù)時(shí)使用。2022年3月29日11時(shí)01分56鏡像頁技術(shù)優(yōu)缺點(diǎn)鏡像頁技術(shù)優(yōu)缺點(diǎn)o優(yōu)點(diǎn)優(yōu)點(diǎn):消除了維護(hù)事務(wù)日志文件的開消除了維護(hù)事務(wù)日志文件的開銷,而且,由于不需要對操作進(jìn)行撤銷,而且,由于不需要對操作進(jìn)行撤銷或重做,因此恢復(fù)速度非常快。銷或重做,因此恢復(fù)速度非???。o缺點(diǎn)缺點(diǎn):數(shù)據(jù)碎片或分散,需要定期進(jìn)數(shù)據(jù)碎片或分散,需要定期進(jìn)行垃圾收集以回收不能訪問的分區(qū)。行垃圾收集以回收不能訪問的分區(qū)。2022年3月29日11時(shí)01分5713.4.4 13.4.4 檢查點(diǎn)技術(shù)檢
46、查點(diǎn)技術(shù)o在利用日志進(jìn)行數(shù)據(jù)庫恢復(fù)時(shí),一般在利用日志進(jìn)行數(shù)據(jù)庫恢復(fù)時(shí),一般需要檢查所有的日志記錄。這有兩個(gè)需要檢查所有的日志記錄。這有兩個(gè)問題問題:n 搜索整個(gè)日志將耗費(fèi)大量的時(shí)間,搜索整個(gè)日志將耗費(fèi)大量的時(shí)間,n 很多需要重做的事務(wù)實(shí)際上可能已經(jīng)很多需要重做的事務(wù)實(shí)際上可能已經(jīng)將它們的更新結(jié)果寫到了數(shù)據(jù)庫中,將它們的更新結(jié)果寫到了數(shù)據(jù)庫中,而恢復(fù)子系統(tǒng)又重新執(zhí)行這些操作,而恢復(fù)子系統(tǒng)又重新執(zhí)行這些操作,同樣浪費(fèi)了大量時(shí)間。同樣浪費(fèi)了大量時(shí)間。2022年3月29日11時(shí)01分58檢查點(diǎn)技術(shù)檢查點(diǎn)技術(shù)o 為解決為解決上述上述問題,發(fā)展了具有檢查點(diǎn)的恢問題,發(fā)展了具有檢查點(diǎn)的恢復(fù)技術(shù)。復(fù)技術(shù)。o
47、這種技術(shù)在日志文件中增加兩個(gè)新的記錄這種技術(shù)在日志文件中增加兩個(gè)新的記錄n 檢查點(diǎn)記錄檢查點(diǎn)記錄n 重新開始記錄重新開始記錄o 檢查點(diǎn)記錄的內(nèi)容包括:檢查點(diǎn)記錄的內(nèi)容包括:n 建立檢查點(diǎn)時(shí)刻所有正在執(zhí)行的事務(wù)列表;建立檢查點(diǎn)時(shí)刻所有正在執(zhí)行的事務(wù)列表;n 這些事務(wù)最近一個(gè)日志記錄的地址。這些事務(wù)最近一個(gè)日志記錄的地址。2022年3月29日11時(shí)01分59o 重新開始文件用于記錄各個(gè)檢查點(diǎn)記錄重新開始文件用于記錄各個(gè)檢查點(diǎn)記錄在日志文件中的地址。在日志文件中的地址。圖示為圖示為建立檢查建立檢查點(diǎn)點(diǎn)C Ci i時(shí)對應(yīng)的日志文件和重新開始文件。時(shí)對應(yīng)的日志文件和重新開始文件。動(dòng)態(tài)維護(hù)日志文件的方法動(dòng)
48、態(tài)維護(hù)日志文件的方法o 周期性地執(zhí)行建立檢查點(diǎn)和保存數(shù)據(jù)庫狀態(tài)的周期性地執(zhí)行建立檢查點(diǎn)和保存數(shù)據(jù)庫狀態(tài)的操作。具體步驟:操作。具體步驟: 將日志緩沖區(qū)中的所有日志記錄寫到磁盤日志將日志緩沖區(qū)中的所有日志記錄寫到磁盤日志文件上。文件上。 在日志文件中寫入一個(gè)檢查點(diǎn)記錄,該記錄包在日志文件中寫入一個(gè)檢查點(diǎn)記錄,該記錄包含所有在檢查點(diǎn)運(yùn)行的事務(wù)的標(biāo)識。含所有在檢查點(diǎn)運(yùn)行的事務(wù)的標(biāo)識。 將數(shù)據(jù)緩沖區(qū)將數(shù)據(jù)緩沖區(qū)中中所有修改過的數(shù)據(jù)寫入到磁盤所有修改過的數(shù)據(jù)寫入到磁盤數(shù)據(jù)庫中。數(shù)據(jù)庫中。 將檢查點(diǎn)記錄在日志文件中的地址寫入一個(gè)重將檢查點(diǎn)記錄在日志文件中的地址寫入一個(gè)重新開始文件,以便在發(fā)生系統(tǒng)故障而重啟時(shí)可新開始文件,以便在發(fā)生系統(tǒng)故障而重啟時(shí)可利用該文件找到日志文件中的檢查點(diǎn)記錄地址利用該文件找到日志文
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 店鋪臨期轉(zhuǎn)讓合同范本
- 長期服裝銷售合同范本
- 圍棋教師兼職合同范本
- 承包果園違約合同范本
- 供暖設(shè)備改造合同范本
- 網(wǎng)絡(luò)合作合同范本
- 個(gè)人代購合同范本
- 門店面轉(zhuǎn)讓合同范本
- 瀝青購銷合同范本
- 倉庫租賃公司合同范本
- 初高中政治銜接-知識點(diǎn)講義
- 深圳實(shí)驗(yàn)學(xué)校新初一分班語文試卷
- 2024年T電梯修理證解析及電梯修理-T證模擬考試題庫
- 青靈與量子物理學(xué)的關(guān)聯(lián)研究
- 《育嬰師培訓(xùn)》-課件:嬰幼兒體溫測量
- 高考物理真題分項(xiàng)匯編:動(dòng)量(含答案)
- 膀胱陰道瘺病人的護(hù)理
- 肩關(guān)節(jié)鏡的護(hù)理查房課件
- 智能控制 第3版 PPT課件第1章
- JGJ114-2014 鋼筋焊接網(wǎng)混凝土結(jié)構(gòu)技術(shù)規(guī)程
- Excel模板:血壓記錄監(jiān)測表(自動(dòng)圖表分析)
評論
0/150
提交評論