![第13章 數(shù)據(jù)庫 數(shù)據(jù)庫恢復(fù)技術(shù)_第1頁](http://file4.renrendoc.com/view/c28dda250d44c4ff92db671ed14eb873/c28dda250d44c4ff92db671ed14eb8731.gif)
![第13章 數(shù)據(jù)庫 數(shù)據(jù)庫恢復(fù)技術(shù)_第2頁](http://file4.renrendoc.com/view/c28dda250d44c4ff92db671ed14eb873/c28dda250d44c4ff92db671ed14eb8732.gif)
![第13章 數(shù)據(jù)庫 數(shù)據(jù)庫恢復(fù)技術(shù)_第3頁](http://file4.renrendoc.com/view/c28dda250d44c4ff92db671ed14eb873/c28dda250d44c4ff92db671ed14eb8733.gif)
![第13章 數(shù)據(jù)庫 數(shù)據(jù)庫恢復(fù)技術(shù)_第4頁](http://file4.renrendoc.com/view/c28dda250d44c4ff92db671ed14eb873/c28dda250d44c4ff92db671ed14eb8734.gif)
![第13章 數(shù)據(jù)庫 數(shù)據(jù)庫恢復(fù)技術(shù)_第5頁](http://file4.renrendoc.com/view/c28dda250d44c4ff92db671ed14eb873/c28dda250d44c4ff92db671ed14eb8735.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第13章數(shù)據(jù)庫恢復(fù)技術(shù)13.1恢復(fù)的基本概念13.2數(shù)據(jù)庫故障的種類13.3數(shù)據(jù)庫恢復(fù)的類型13.4恢復(fù)技術(shù)13.5緩沖區(qū)管理*1概述計(jì)算機(jī)同其他任何設(shè)備一樣,都有可能發(fā)生故障。這種情況一旦發(fā)生,就有可能造成數(shù)據(jù)丟失。數(shù)據(jù)庫系統(tǒng)必須采取必要的措施,以保證不會(huì)或盡可能減少數(shù)據(jù)丟失。數(shù)據(jù)庫恢復(fù)是DBMS必須提供的功能。*213.1恢復(fù)的基本概念數(shù)據(jù)庫恢復(fù)是指當(dāng)數(shù)據(jù)庫發(fā)生故障時(shí),將數(shù)據(jù)庫恢復(fù)到正確(一致性)狀態(tài)的過程。數(shù)據(jù)庫恢復(fù)是基于事務(wù)的原子性特性。數(shù)據(jù)庫恢復(fù)過程通常遵循一個(gè)可預(yù)測(cè)的方案?;謴?fù)機(jī)制有兩個(gè)關(guān)鍵問題:如何建立備份數(shù)據(jù);如何利用備份數(shù)據(jù)進(jìn)行恢復(fù)。*3數(shù)據(jù)轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫恢復(fù)采用的基本技術(shù):數(shù)據(jù)轉(zhuǎn)儲(chǔ)(也稱為數(shù)據(jù)庫備份)。轉(zhuǎn)儲(chǔ)就是定期地將整個(gè)數(shù)據(jù)庫復(fù)制到輔助存儲(chǔ)設(shè)備上,比如磁帶、磁盤。數(shù)據(jù)轉(zhuǎn)儲(chǔ)只能將數(shù)據(jù)庫恢復(fù)到轉(zhuǎn)儲(chǔ)時(shí)的狀態(tài)。如果想恢復(fù)到故障發(fā)生時(shí)的狀態(tài),則必須利用轉(zhuǎn)儲(chǔ)之后的事務(wù)日志。*4轉(zhuǎn)儲(chǔ)分類靜態(tài)轉(zhuǎn)儲(chǔ)在系統(tǒng)中無運(yùn)行事務(wù)時(shí)進(jìn)行。在轉(zhuǎn)儲(chǔ)期間不允許對(duì)數(shù)據(jù)庫進(jìn)行任何操作。動(dòng)態(tài)轉(zhuǎn)儲(chǔ)不用等待正在運(yùn)行的事務(wù)結(jié)束。在轉(zhuǎn)儲(chǔ)期間允許運(yùn)行新的事務(wù)。*5靜態(tài)與動(dòng)態(tài)轉(zhuǎn)儲(chǔ)比較靜態(tài)轉(zhuǎn)儲(chǔ)實(shí)現(xiàn)簡(jiǎn)單,靜態(tài)轉(zhuǎn)儲(chǔ)得到的一定是數(shù)據(jù)庫的一個(gè)一致性副本。轉(zhuǎn)儲(chǔ)期間但會(huì)降低數(shù)據(jù)庫的可用性。動(dòng)態(tài)轉(zhuǎn)儲(chǔ)不能保證轉(zhuǎn)儲(chǔ)結(jié)束后的數(shù)據(jù)庫副本是正確的必須利用日志將數(shù)據(jù)庫恢復(fù)到一致性狀態(tài)轉(zhuǎn)儲(chǔ)期間不會(huì)降低數(shù)據(jù)庫的可用性。*6轉(zhuǎn)儲(chǔ)內(nèi)容分類海量轉(zhuǎn)儲(chǔ):每次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫,增量轉(zhuǎn)儲(chǔ):每次只轉(zhuǎn)儲(chǔ)上一次轉(zhuǎn)儲(chǔ)之后修改過的數(shù)據(jù)。從恢復(fù)的角度看,用海量轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫副本進(jìn)行恢復(fù)更方便,但如果數(shù)據(jù)量很大,事務(wù)處理又比較頻繁,則增量轉(zhuǎn)儲(chǔ)會(huì)更有效。海量轉(zhuǎn)儲(chǔ)和增量轉(zhuǎn)儲(chǔ)可以是動(dòng)態(tài)的,也可以是靜態(tài)的。*713.2數(shù)據(jù)庫故障的種類數(shù)據(jù)庫故障是指導(dǎo)致數(shù)據(jù)庫值出現(xiàn)錯(cuò)誤描述狀態(tài)的情況,影響數(shù)據(jù)庫運(yùn)行的故障有多種:事務(wù)內(nèi)部的故障系統(tǒng)故障其它故障*8事務(wù)內(nèi)部的故障可預(yù)期的這類故障可通過事務(wù)程序本身發(fā)現(xiàn)。如銀行轉(zhuǎn)賬事務(wù)中,如果A賬戶金額不足,則不能進(jìn)行轉(zhuǎn)賬。非預(yù)期性的這類故障不能由應(yīng)用程序來處理。如運(yùn)算溢出或因死鎖而被撤銷的事務(wù)。*9事務(wù)故障事務(wù)故障意味著事務(wù)沒有達(dá)到終點(diǎn),數(shù)據(jù)庫可能處于不正確的狀態(tài)。數(shù)據(jù)庫的恢復(fù)機(jī)制要在不影響其他事務(wù)運(yùn)行的情況下,強(qiáng)行撤銷該事務(wù)中的全部操作,使該事務(wù)就像沒發(fā)生過一樣。這類恢復(fù)操作稱為事務(wù)撤銷(UNDO)。*10系統(tǒng)故障是指造成系統(tǒng)停止運(yùn)轉(zhuǎn)、系統(tǒng)要重啟的故障。例如:硬件錯(cuò)誤(CPU故障)操作系統(tǒng)故障突然停電等。這類故障會(huì)影響正在運(yùn)行的所有事務(wù),但不破壞數(shù)據(jù)庫。*11系統(tǒng)故障產(chǎn)生的結(jié)果一些未完成事務(wù)的結(jié)果可能已經(jīng)送入物理數(shù)據(jù)庫中,從而造成數(shù)據(jù)庫可能處于不正確狀態(tài);有些已經(jīng)提交的事務(wù)可能有一部分結(jié)果還保留在緩沖區(qū)中,尚未寫到物理數(shù)據(jù)庫中,因此會(huì)丟失這些事務(wù)對(duì)數(shù)據(jù)的修改,使數(shù)據(jù)庫處于不一致狀態(tài)。*12系統(tǒng)故障恢復(fù)方法恢復(fù)子系統(tǒng)在系統(tǒng)重新啟動(dòng)時(shí)必須:撤銷所有未完成的事務(wù)重做所有已提交的事務(wù)從而保證將數(shù)據(jù)庫恢復(fù)到一致狀態(tài)。*13其他故障介質(zhì)故障或由計(jì)算機(jī)病毒引起的故障或破壞,均歸為其他故障。介質(zhì)故障指外存故障,如磁盤損壞等。這類故障會(huì)對(duì)數(shù)據(jù)庫造成破壞,并影響正在操作的數(shù)據(jù)庫的所有事務(wù)。這類故障雖然發(fā)生的可能性很小,但破壞性很大。計(jì)算機(jī)病毒的破壞性很大,而且極易傳播,它也可以對(duì)數(shù)據(jù)庫造成毀滅性的破壞。*14故障對(duì)數(shù)據(jù)庫的影響有兩種可能性:一種是數(shù)據(jù)庫本身的破壞;另一種是數(shù)據(jù)庫沒有破壞,但數(shù)據(jù)可能不正確(因事務(wù)非正常終止)。數(shù)據(jù)庫恢復(fù)就是保證數(shù)據(jù)庫的正確和一致,其原理是:冗余。即數(shù)據(jù)庫中任何一部分被破壞的或不正確的數(shù)據(jù)均可根據(jù)冗余數(shù)據(jù)來重建?;謴?fù)的原理很簡(jiǎn)單,但實(shí)現(xiàn)的技術(shù)細(xì)節(jié)卻很復(fù)雜*1513.3數(shù)據(jù)庫恢復(fù)的類型無論出現(xiàn)何種類型的故障,都必須終止或提交事務(wù),以維護(hù)數(shù)據(jù)完整性。事務(wù)的恢復(fù)類型:向前恢復(fù)。向后恢復(fù)。介質(zhì)故障恢復(fù)。*1613.3.1向前恢復(fù)也稱為重做(REDO)用于物理損壞情形的恢復(fù)過程。如:磁盤損壞向數(shù)據(jù)庫緩沖區(qū)寫入數(shù)據(jù)時(shí)的故障將緩沖區(qū)中的信息傳輸?shù)酱疟P時(shí)出現(xiàn)的故障*17永久生效的更新事務(wù)的中間結(jié)果被寫入到數(shù)據(jù)庫緩沖區(qū)中,數(shù)據(jù)在緩沖區(qū)和數(shù)據(jù)庫的物理存儲(chǔ)之間進(jìn)行傳輸。當(dāng)緩沖區(qū)的數(shù)據(jù)被傳輸?shù)轿锢泶鎯?chǔ)器后,更新操作才是永久性的。*18緩沖區(qū)√重做事務(wù)如果在寫入緩沖區(qū)和傳輸緩沖數(shù)據(jù)到物理存儲(chǔ)器過程中發(fā)生故障,則恢復(fù)管理器必須確定故障發(fā)生時(shí)執(zhí)行WRITE操作的事務(wù)的狀態(tài):如果事務(wù)已經(jīng)執(zhí)行了COMMIT語句,則恢復(fù)管理器將重做(也稱為前滾)事務(wù)的操作并將事務(wù)的更新結(jié)果保存到數(shù)據(jù)庫中。向前恢復(fù)保證了事務(wù)的持久性。*19向前恢復(fù)過程首先讀取最新的數(shù)據(jù)庫轉(zhuǎn)儲(chǔ)和修改數(shù)據(jù)的事務(wù)日志。然后讀取日志記錄,從數(shù)據(jù)庫轉(zhuǎn)儲(chǔ)之后的第一個(gè)記錄開始,一直讀到物理損壞前的最后一次記錄。(從后向前讀)對(duì)于每一條日志記錄,把數(shù)據(jù)庫轉(zhuǎn)儲(chǔ)中相關(guān)的數(shù)據(jù)值修改為日志記錄中修改后的值,使數(shù)據(jù)庫中的值是事務(wù)執(zhí)行完成后的最終結(jié)果。*20重做示意圖*2113.3.2向后恢復(fù)向后恢復(fù)(也稱為撤銷,UNDO)用于數(shù)據(jù)庫正常操作過程中發(fā)生錯(cuò)誤時(shí)的恢復(fù)過程。這種錯(cuò)誤可能是人為鍵入的數(shù)據(jù),或是程序異常結(jié)束而留下的未完成的數(shù)據(jù)庫修改。*22向后恢復(fù)(續(xù))如果在故障發(fā)生時(shí)事務(wù)尚未提交,則將導(dǎo)致數(shù)據(jù)庫的不一致性。因此恢復(fù)管理器必須撤銷(回滾)事務(wù)對(duì)數(shù)據(jù)庫的所有影響。向后恢復(fù)保證了事務(wù)的原子性。*23向后恢復(fù)過程從數(shù)據(jù)庫的當(dāng)前狀態(tài)和事務(wù)日志的最后一條記錄開始,按從前向后的順序讀取日志,將數(shù)據(jù)庫中已更新的數(shù)據(jù)值改為記錄在日志中的更新前的值(前像),直至錯(cuò)誤發(fā)生點(diǎn)。*24回滾示意圖*25示例1*26撤銷撤銷重做重做重做重做示例2有事務(wù)操作歷史及相應(yīng)的日志記錄:時(shí)間事務(wù)操作日志記錄說明時(shí)刻1R1(A,50)(S,1)啟動(dòng)事務(wù)T1的日志記錄,無需在日志中記錄讀操作,但這個(gè)操作表示事務(wù)T1的開始時(shí)刻2W1(A,20)(W,1,A,50,20)將事務(wù)T1修改A的操作記入日志。A修改前的值是50,修改后的值是20時(shí)刻3R2(C,100)(S,2)啟動(dòng)事務(wù)T2的日志記錄時(shí)刻4W2(C,50)(W,2,C,100,50)將事務(wù)T2修改C的操作記入日志。C修改前的值是100,修改后的值是50時(shí)刻5C2(C,2)提交T2(將日志緩沖區(qū)中的信息寫入日志文件)時(shí)刻6R1(B,50)沒有日志項(xiàng)時(shí)刻7W1(B,80)(W,1,B,50,80)將事務(wù)T1修改B的操作記入日志。B修改前的值是50,修改后的值是80時(shí)刻8C1(C,1)提交T1(將日志緩沖區(qū)中的信息寫入日志文件)恢復(fù)完成之后:A=50,B=50,C=50系統(tǒng)崩潰X故障恢復(fù)過程在發(fā)生故障的系統(tǒng)被重啟后,數(shù)據(jù)庫的恢復(fù)經(jīng)歷了兩個(gè)階段:撤銷:按逆向順序讀取日志文件中的記錄直至第一條記錄;重做:順序向前讀取日志文件中的記錄直到最后一條記錄。大多數(shù)商業(yè)DBMS都是先進(jìn)行撤銷,再進(jìn)行重做。*28在W1(B,80)之后發(fā)生故障的事務(wù)操作撤銷過程*29序號(hào)日志記錄完成的撤銷操作1(C,2)將事務(wù)T2放入事務(wù)提交列表2(W,2,C,100,50)由于事務(wù)T2在提交列表,因此不進(jìn)行任何操作3(S,2)記錄事務(wù)T2不再活動(dòng)4(W,1,A,50,20)事務(wù)T1還未提交。最后一部是寫操作,因此系統(tǒng)執(zhí)行撤銷操作,把A改為修改前的值(50)。將事務(wù)T1放入未提交事務(wù)列表5(S,1)到達(dá)事務(wù)T1的開始點(diǎn),現(xiàn)在沒有可撤銷的活動(dòng)了,因此撤銷階段結(jié)束在W1(B,80)之后發(fā)生故障的事務(wù)操作重做過程*30序號(hào)日志記錄重做操作6(S,1)無動(dòng)作7(W,1,A,50,20)事務(wù)T1未提交,無動(dòng)作8(S,2)無動(dòng)作9(W,2,C,100,50)由于事務(wù)T2已提交,因此重做該修改,即把C的值改為5010(C,2)無動(dòng)作,恢復(fù)結(jié)束13.3.3介質(zhì)故障恢復(fù)當(dāng)發(fā)生介質(zhì)故障時(shí),磁盤上的物理數(shù)據(jù)和日志文件均遭到破壞,這是破壞最嚴(yán)重的一種故障。要從介質(zhì)故障中恢復(fù)數(shù)據(jù)庫,必須在故障前對(duì)數(shù)據(jù)庫進(jìn)行定期轉(zhuǎn)儲(chǔ)。在介質(zhì)正常后,再利用轉(zhuǎn)儲(chǔ)恢復(fù)數(shù)據(jù)庫。*3113.4恢復(fù)技術(shù)恢復(fù)技術(shù)依賴于數(shù)據(jù)庫損壞的類型和程度。基本原則是事務(wù)的所有操作必須作為一個(gè)邏輯工作單元來對(duì)待,并且要保證數(shù)據(jù)庫的一致性。數(shù)據(jù)庫損壞的類型:物理損壞非物理或事務(wù)故障*32物理損壞需要利用數(shù)據(jù)庫的最新轉(zhuǎn)儲(chǔ)進(jìn)行恢復(fù)。如果事務(wù)日志文件沒有損壞,還可利用事務(wù)日志重新執(zhí)行已提交事務(wù)的更新操作。*33事務(wù)故障需要撤銷(回滾)引起不一致的修改。為確保更新已到達(dá)物理存儲(chǔ)設(shè)備,有必要重做(前滾)一些事務(wù)。通過使用事務(wù)日志文件中更新前的值(前像)和更新后的值(后像),使數(shù)據(jù)庫恢復(fù)到一致性狀態(tài)。這種技術(shù)也稱為基于日志的恢復(fù)技術(shù)。有兩種:延遲更新立即更新*3413.4.1延遲更新技術(shù)只有到達(dá)事務(wù)的提交點(diǎn),更新才被寫入數(shù)據(jù)庫。即:數(shù)據(jù)庫的更新要延遲到事務(wù)執(zhí)行成功并提交時(shí)。在事務(wù)執(zhí)行過程中,更新只被記錄在事務(wù)日志和緩沖區(qū)中。當(dāng)事務(wù)提交后,更新被記錄到數(shù)據(jù)庫。*35延遲更新技術(shù)(續(xù))如果一個(gè)事務(wù)在到達(dá)提交點(diǎn)之前出現(xiàn)故障,將不會(huì)修改數(shù)據(jù)庫,因此沒必要進(jìn)行撤銷操作。但如果發(fā)生故障時(shí)事務(wù)的更新還未寫入到數(shù)據(jù)庫,則必須重做已提交事務(wù)的更新。*36延遲更新技術(shù)的日志內(nèi)容當(dāng)事務(wù)T啟動(dòng)時(shí),將“事務(wù)開始”(或<T,BEGIN>)記錄寫入事務(wù)日志文件。在事務(wù)T執(zhí)行期間,寫入一條包含所有之前指定的日志數(shù)據(jù)的日志記錄,例如,為屬性A賦新值ai,則用<WRITE(A,ai)>表示。當(dāng)事務(wù)T的所有活動(dòng)都成功提交時(shí),將記錄<T,COMMIT>寫入事務(wù)日志,并將該事務(wù)的所有日志記錄寫到磁盤上,然后提交該事務(wù)。如果事務(wù)T被撤銷了,則忽略該事務(wù)的事務(wù)日志,并且不執(zhí)行寫操作。*37注意是在事務(wù)真正提交之前將日志記錄寫到磁盤因此,如果在數(shù)據(jù)庫的真正更新過程中發(fā)生了故障,日志記錄不會(huì)受損。當(dāng)故障發(fā)生時(shí),檢查日志文件,找到故障發(fā)生時(shí)正在執(zhí)行的所有事務(wù)。從日志文件的最后一個(gè)入口開始,回滾到最近的一個(gè)檢查點(diǎn)(13.4.4介紹)記錄。*38恢復(fù)過程所有出現(xiàn)了事務(wù)開始和事務(wù)提交日志記錄的事務(wù)必須被重做。重做的順序是日志記錄被寫入日志的順序。如果在故障發(fā)生前已經(jīng)執(zhí)行了寫操作,由于該寫操作對(duì)數(shù)據(jù)項(xiàng)沒有影響,因此即使再次寫該數(shù)據(jù)也不會(huì)有問題。這種方法保證了一定會(huì)更新所有在故障發(fā)生前沒有被正確更新的數(shù)據(jù)項(xiàng)。*39恢復(fù)過程(續(xù))對(duì)所有出現(xiàn)了事務(wù)開始和事務(wù)撤銷的日志記錄的事務(wù),不進(jìn)行特別的操作,因?yàn)樗鼈儗?shí)際上并沒有寫數(shù)據(jù)庫。如果在恢復(fù)過程中又發(fā)生了系統(tǒng)崩潰,則可以再次使用日志記錄來恢復(fù)數(shù)據(jù)庫。*40轉(zhuǎn)賬示例賬戶A轉(zhuǎn)賬給賬戶B2000元,假設(shè)賬戶A現(xiàn)余額10000元,賬戶B現(xiàn)余額3000元。轉(zhuǎn)賬事務(wù)T的正常執(zhí)行過程:*41時(shí)間事務(wù)步驟動(dòng)作時(shí)刻1READ(A,a1)讀取賬戶A的當(dāng)前余額時(shí)刻2a1=a1-2000將賬戶A的余額減去2000時(shí)刻3WRITE(A,a1)將新的余額寫入到賬戶表中時(shí)刻4READ(B,b1)讀取賬戶B的當(dāng)前余額時(shí)刻5b1=b1+2000將賬戶B的余額加上2000時(shí)刻6WRITE(B,b1)將新的余額寫入到賬戶表中立即更新轉(zhuǎn)賬示例(續(xù))轉(zhuǎn)賬事務(wù)T的延時(shí)更新日志記錄*42時(shí)間日志記錄數(shù)據(jù)庫存儲(chǔ)的值事務(wù)開始之前A=10000B=3000時(shí)刻1<T,BEGIN>時(shí)刻2<T,A,8000>時(shí)刻3<T,B,5000>時(shí)刻4<T,COMMIT>事務(wù)執(zhí)行之后A=8000B=5000轉(zhuǎn)賬示例(續(xù))在<T,COMMIT>記錄被寫入事務(wù)日志之后、更新記錄被寫入數(shù)據(jù)庫之前發(fā)生故障時(shí),事務(wù)T的延時(shí)更新日志記錄:*43時(shí)間日志記錄數(shù)據(jù)庫存儲(chǔ)的值事務(wù)開始之前A=10000B=3000時(shí)刻1<T,BEGIN>時(shí)刻2<T,A,8000>時(shí)刻3<T,B,5000>時(shí)刻4<T,COMMIT>當(dāng)系統(tǒng)進(jìn)行恢復(fù)時(shí),重做事務(wù)T的操作,賬戶A和B的新值8000和5000被寫入到數(shù)據(jù)庫中。轉(zhuǎn)賬示例(續(xù))在WRITE(B,b1)操作執(zhí)行之前發(fā)生故障的事務(wù)日志。事務(wù)T的延時(shí)更新日志記錄:*44時(shí)間日志記錄數(shù)據(jù)庫存儲(chǔ)的值事務(wù)開始之前A=10000B=3000時(shí)刻1<T,BEGIN>時(shí)刻2<T,A,8000>時(shí)刻3<T,B,5000>當(dāng)系統(tǒng)進(jìn)行恢復(fù)時(shí),無需執(zhí)行任何操作。數(shù)據(jù)庫中賬戶A和B的值仍為10000和3000。13.4.2立即更新技術(shù)更新一旦發(fā)生即被施加到數(shù)據(jù)庫中,而無需等到事務(wù)提交點(diǎn)以及所有的更改被保存在事務(wù)日志時(shí)。除了需要重做故障之前已提交的事務(wù)所做的更改外,還需要撤銷當(dāng)故障發(fā)生時(shí)仍未提交的事務(wù)所造成的影響。*45立即更新技術(shù)的日志內(nèi)容當(dāng)事務(wù)T開始時(shí),“事務(wù)開始”(或<T,BEGIN>)被寫入事務(wù)日志文件。當(dāng)執(zhí)行寫操作時(shí),向日志文件中寫入一條包含必要數(shù)據(jù)的記錄。一旦寫入了事務(wù)日志記錄,就對(duì)數(shù)據(jù)庫緩沖區(qū)進(jìn)行寫更新。當(dāng)緩沖區(qū)數(shù)據(jù)被轉(zhuǎn)入輔存時(shí),寫入對(duì)數(shù)據(jù)庫的更新讀數(shù)據(jù)庫自身的更新在緩沖區(qū)下一次被刷新到輔存時(shí)進(jìn)行。當(dāng)事務(wù)T提交時(shí),“事務(wù)提交”(<T,COMMIT>)記錄被寫入事務(wù)日志。*46說明日志記錄是在對(duì)應(yīng)的寫操作施加到數(shù)據(jù)庫之前被寫入的,這稱為“先寫日志協(xié)議”。通過使用先寫日志協(xié)議,恢復(fù)管理器可以大膽假設(shè),如果在日志文件中不存在某個(gè)事務(wù)的提交記錄,則該事務(wù)在故障發(fā)生時(shí)一定處于活動(dòng)狀態(tài),因此必須被撤銷。*47說明如果事務(wù)被撤銷,則可利用日志撤銷事務(wù)所做的修改,因?yàn)槿罩局邪怂斜桓伦侄蔚脑贾担ㄇ跋瘢?。由于一個(gè)事務(wù)可能對(duì)一個(gè)數(shù)據(jù)項(xiàng)進(jìn)行過多次更改,因此對(duì)寫的撤銷應(yīng)按逆序進(jìn)行。無論事務(wù)的寫操作是否被施加到了數(shù)據(jù)庫,寫入數(shù)據(jù)項(xiàng)的前像保證了數(shù)據(jù)庫被恢復(fù)到事務(wù)開始前的狀態(tài)。*48恢復(fù)過程對(duì)于任何在日志中同時(shí)有“事務(wù)開始”和“事務(wù)提交”記錄的事務(wù),用日志記錄來重做,按日志記錄的方式寫入更新字段的后像值。對(duì)于任何在日志中只有“事務(wù)開始”記錄而沒有“事務(wù)提交”記錄的事務(wù),必須撤銷它。這里使用日志記錄得到被修改字段的前像值,并將前像值寫入數(shù)據(jù)庫,從而將數(shù)據(jù)庫恢復(fù)到事務(wù)開始之前的狀態(tài)。撤銷操作按它們被寫入日志的逆序進(jìn)行。*49立即更新日志示例轉(zhuǎn)賬事務(wù)T的立即更新日志記錄:*50時(shí)間日志記錄數(shù)據(jù)庫存儲(chǔ)的值事務(wù)開始之前A=10000B=3000時(shí)刻1<T,BEGIN>時(shí)刻2<T,A,10000,8000>時(shí)刻3A=8000時(shí)刻4<T,B,3000,5000>時(shí)刻5B=5000時(shí)刻6<T,COMMIT>轉(zhuǎn)賬事務(wù)立即更新示例(續(xù))寫操作WRITE(B,b1)執(zhí)行之前發(fā)生故障時(shí)的事務(wù)日志:*51時(shí)間日志記錄數(shù)據(jù)庫存儲(chǔ)的值事務(wù)開始之前A=10000B=3000時(shí)刻1<T,BEGIN>時(shí)刻2<T,A,10000,8000>時(shí)刻3A=8000事務(wù)T必須被撤銷,因此執(zhí)行UNDO(T)操作,使A的值恢復(fù)為10000,且事務(wù)T需要重新開始。立即更新示例(續(xù))當(dāng)<T,COMMIT>被寫入事務(wù)日志之后,但新值被寫入數(shù)據(jù)庫之前發(fā)生故障時(shí)的事務(wù)日志:時(shí)間日志記錄數(shù)據(jù)庫存儲(chǔ)的值事務(wù)開始之前A=10000B=3000時(shí)刻1<T,BEGIN>時(shí)刻2<T,A,10000,8000>時(shí)刻3A=8000時(shí)刻4<T,B,3000,5000>時(shí)刻5B=5000時(shí)刻6<T,COMMIT>當(dāng)系統(tǒng)恢復(fù)時(shí),執(zhí)行REDO(T)操作,A和B的值分別為8000和5000。13.4.3鏡像頁技術(shù)在鏡像頁模式中,數(shù)據(jù)庫被認(rèn)為是由固定大小的磁盤分區(qū)的邏輯存儲(chǔ)單元組成。通過頁表將頁映射到物理磁盤分區(qū),數(shù)據(jù)庫中的每個(gè)邏輯頁對(duì)應(yīng)頁表中的一條記錄。每條記錄包含頁所存儲(chǔ)的物理存儲(chǔ)的分區(qū)號(hào)。在單用戶環(huán)境下,鏡像頁技術(shù)不需要使用事務(wù)日志,在多用戶環(huán)境下可能需要事務(wù)日志來支持并發(fā)控制。*53鏡像頁技術(shù)(續(xù))鏡像頁方法在事務(wù)的生存期內(nèi),維護(hù)兩個(gè)頁表,:當(dāng)前頁表、鏡像頁表。當(dāng)事務(wù)剛啟動(dòng)時(shí),兩個(gè)頁表是一樣的。此后,鏡像頁表不再改變,并在系統(tǒng)故障時(shí)用于恢復(fù)數(shù)據(jù)庫。在事務(wù)執(zhí)行過程中,當(dāng)前頁表被用于記錄對(duì)數(shù)據(jù)庫的所有更新。但事務(wù)結(jié)束時(shí),當(dāng)前頁表轉(zhuǎn)變成鏡像頁表。*54鏡像頁模式*55說明被事務(wù)影響的頁被復(fù)制到新的物理存儲(chǔ)區(qū)中,通過當(dāng)前頁表,這些分區(qū)和那些沒有被修改的分區(qū)是事務(wù)可以訪問的。被更改的頁的老版本保持不變,通過鏡像頁表事務(wù)仍然可以訪問這些頁。鏡像頁表包含事務(wù)開始之前頁表中存在的記錄以及從未被事務(wù)修改的分區(qū)記錄。鏡像頁表在事務(wù)發(fā)生時(shí)保持不變,用于撤銷事務(wù)時(shí)使用。*56鏡像頁技術(shù)優(yōu)缺點(diǎn)優(yōu)點(diǎn):消除了維護(hù)事務(wù)日志文件的開銷,而且,由于不需要對(duì)操作進(jìn)行撤銷或重做,因此恢復(fù)速度非???。缺點(diǎn):數(shù)據(jù)碎片或分散,需要定期進(jìn)行垃圾收集以回收不能訪問的分區(qū)。*5713.4.4檢查點(diǎn)技術(shù)在利用日志進(jìn)行數(shù)據(jù)庫恢復(fù)時(shí),一般需要檢查所有的日志記錄。這有兩個(gè)問題:搜索整個(gè)日志將耗費(fèi)大量的時(shí)間,很多需要重做的事務(wù)實(shí)際上可能已經(jīng)將它們的更新結(jié)果寫到了數(shù)據(jù)庫中,而恢復(fù)子系統(tǒng)又重新執(zhí)行這些操作,同樣浪費(fèi)了大量時(shí)間。*58檢查點(diǎn)技術(shù)為解決上述問題,發(fā)展了具有檢查點(diǎn)的恢復(fù)技術(shù)。這種技術(shù)在日志文件中增加兩個(gè)新的記錄檢查點(diǎn)記錄重新開始記錄檢查點(diǎn)記錄的內(nèi)容包括:建立檢查點(diǎn)時(shí)刻所有正在執(zhí)行的事務(wù)列表;這些事務(wù)最近一個(gè)日志記錄的地址。*59重新開始文件用于記錄各個(gè)檢查點(diǎn)記錄在日志文件中的地址。圖示為建立檢查點(diǎn)Ci時(shí)對(duì)應(yīng)的日志文件和重新開始文件。動(dòng)態(tài)維護(hù)日志文件的方法周期性地執(zhí)行建立檢查點(diǎn)和保存數(shù)據(jù)庫狀態(tài)的操作。具體步驟:①
將日志緩沖區(qū)中的所有日志記錄寫到磁盤日志文件上。②
在日志文件中寫入一個(gè)檢查點(diǎn)記錄,該記錄包含所有在檢查點(diǎn)運(yùn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年醫(yī)用衛(wèi)生材料敷料合作協(xié)議書
- 2025年雷達(dá)車合作協(xié)議書
- 2025年國土資源普查核儀器合作協(xié)議書
- 人教版 八年級(jí)英語下冊(cè) Unit 3 單元綜合測(cè)試卷(2025年春)
- 2025年氯磺化聚乙烯合作協(xié)議書
- 2025年九年級(jí)第二學(xué)期班主任德育工作總結(jié)(二篇)
- 2025年互聯(lián)網(wǎng)科技公司股東合作協(xié)議模板(2篇)
- 2025年產(chǎn)品配送委托合同(三篇)
- 2025年產(chǎn)品總代理合同參考模板(2篇)
- 2025年產(chǎn)品年度區(qū)域銷量合同(三篇)
- 《梅大高速茶陽路段“5·1”塌方災(zāi)害調(diào)查評(píng)估報(bào)告》專題警示學(xué)習(xí)
- 2024年09月北京中信銀行北京分行社會(huì)招考(917)筆試歷年參考題庫附帶答案詳解
- 《大健康解讀》課件
- 2025年度交通運(yùn)輸規(guī)劃外聘專家咨詢協(xié)議3篇
- 專項(xiàng)債券培訓(xùn)課件
- 《會(huì)務(wù)的組織和管理》課件
- 物理調(diào)查問卷
- 給排水管道工程分項(xiàng)、分部、單位工程劃分
- 《傻子上學(xué)》臺(tái)詞
- 高中英語新課程標(biāo)準(zhǔn)解讀 (課堂PPT)
- 石灰石石膏濕法脫硫化學(xué)分析方案
評(píng)論
0/150
提交評(píng)論