adb08系統(tǒng)故障與恢復_第1頁
adb08系統(tǒng)故障與恢復_第2頁
adb08系統(tǒng)故障與恢復_第3頁
adb08系統(tǒng)故障與恢復_第4頁
adb08系統(tǒng)故障與恢復_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1第十章系統(tǒng)故障與恢復數(shù)據(jù)庫保護數(shù)據(jù)庫保護:排除和防止各種對數(shù)據(jù)庫的干擾破壞,確保數(shù)據(jù)安全可靠;以及在數(shù)據(jù)庫遭到破壞后盡快地恢復數(shù)據(jù)庫保護通過四個方面來實現(xiàn)數(shù)據(jù)庫的恢復技術(shù)[thischapter]Dealwithfailure并發(fā)控制技術(shù)[NextChp.]Dealwithdatasharing完整性控制技術(shù)[notdiscuss]Enableconstraints安全性控制技術(shù)[notdiscuss]Authorizationandauthentication故障后,如何恢復?STEP1確定設(shè)備的故障狀態(tài)STEP2分析故障對DB的影響有哪些?STEP3設(shè)計恢復算法存有足夠的信息(故障前)DB的定期備份Log采取適當措施,恢復數(shù)據(jù)庫(故障后)45數(shù)據(jù)庫的一致性和正確性事務(wù)的狀態(tài)及原語操作數(shù)據(jù)庫系統(tǒng)故障分析Undo日志Redo日志Undo/Redo日志Checkpoint主要內(nèi)容一、事務(wù)的狀態(tài)及原語操作事務(wù)(transaction)一個不可分割的操作序列,其中的操作要么都做,要么都不做1、事務(wù)事務(wù)的例子銀行轉(zhuǎn)帳:A帳戶轉(zhuǎn)帳到B帳戶100元。該處理包括了兩個更新步驟A=A-100B=B+100這兩個操作是不可分的:要么都做,要么都不作1、事務(wù)事務(wù)的ACID性質(zhì)原子性atomicity事務(wù)是不可分的原子,其中的操作要么都做,要么都不做一致性consistency事務(wù)的執(zhí)行保證數(shù)據(jù)庫從一個一致狀態(tài)轉(zhuǎn)到另一個一致狀態(tài)隔離性Isolation多個事務(wù)一起執(zhí)行時相互獨立持久性Durability事務(wù)一旦成功提交,就在數(shù)據(jù)庫永久保存2、事務(wù)的狀態(tài)[inlogs]<StartT>TransactionThasstarted<CommitT>Thasfinishedsuccessfullyandallmodificationsarereflectedtodisks<AbortT>Thasbeenterminatedandallmodificationshavebeencanceled3、事務(wù)的原語操作input(x):diskblockwithx

memoryoutput(x):bufferblockwithxdiskRead(x,t):doinput(x)ifnecessary; valueofxinbuffertWrite(x,t):valueoftxinbuffer

dooutput(x)ifnecessary;數(shù)據(jù)X:在DISK中(對應(yīng)DB中的一個數(shù)據(jù)元素)在內(nèi)存中(一個Buffer中)事務(wù)T:局部變量t在內(nèi)存中(一個Buffer中)日志(LOG)在DISK中(即DB中)在內(nèi)存中(一個Buffer中)OUTPUT(X)INPUT(X)Read(X,t)Write(X,t)FlushLog在此處修改數(shù)據(jù)4、事務(wù)例子T1: Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t); Output(A); Output(B);Abanktransfer5、SQL對事務(wù)的支持SQL標準提供了三個語句,允許應(yīng)用程序聲明事務(wù)和控制事務(wù)BeginTransactionCommitTransactionRollbackTransactionT1: Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t); Output(A); Output(B);Abanktransfer二、數(shù)據(jù)庫的一致性和正確性一致性(consistency)正確性(correctness)1、一致性(Consistency)IntegrityorconsistencyconstraintsPredicatesdatamustsatisfyExamples:-xiskeyofrelationR-xyholdsinR-Domain(x)={Red,Blue,Green}1、一致性(Consistency)Consistentstate:satisfiesallintegrityconstraintsConsistentDB:DBinconsistentstate1、一致性(Consistency)DBwillnotalwayssatisfyconstraintsExample:a1+a2+….an=TOT(constraint)Transaction:Deposit$100ina2:a2a2+100 TOTTOT+100..50..1000..150..1000..150..1100a2TOTState1:

consistentState2:

“inconsistent”State3:

consistent事務(wù)的ACID性質(zhì)Atomicity,Consistency,Isolation,DurabilityconsistencyoftransactionConsistentDBConsistentDB’T但事務(wù)內(nèi)部不保證DB的一致性1、一致性(Consistency)2、正確性(Correctness)DBRealityDBshouldreflectrealworldDBshouldreflectrealworldExample:Atelephonenumber3601123--correctabcdefg--notcorrectCanbepreservedbyexplicitconstraints!2、正確性(Correctness)DBshouldreflectrealworldExample:Atelephonenumber3601123--correct9999999--Isitcorrect?Notcorrectinreality,butcanDBknowthis?Answer:NO!2、正確性(Correctness)CorrectnessofDB

CorrectnessofrealityCorrectnessofDB如果數(shù)據(jù)庫在事務(wù)開始執(zhí)行時是一致的,并且事務(wù)執(zhí)行結(jié)束后數(shù)據(jù)庫仍處于一致狀態(tài),則數(shù)據(jù)庫滿足正確性.ConsistencyofDB+ACIDoftransactionCorrectnessofDB2、正確性(Correctness)三、數(shù)據(jù)庫系統(tǒng)故障分析ConsistencyofDB可能由于故障而被破壞事務(wù)故障介質(zhì)故障系統(tǒng)故障1、事務(wù)故障發(fā)生在單個事務(wù)內(nèi)部的故障可預期的事務(wù)故障:即應(yīng)用程序可以發(fā)現(xiàn)的故障,如轉(zhuǎn)帳時余額不足。由應(yīng)用程序處理非預期的事務(wù)故障:如運算溢出、掉電等,導致事務(wù)被異常中止。應(yīng)用程序無法處理此類故障,由系統(tǒng)進行處理2、介質(zhì)故障硬故障(HardCrash),一般指磁盤損壞導致磁盤數(shù)據(jù)丟失,破壞整個數(shù)據(jù)庫3、系統(tǒng)故障系統(tǒng)故障:軟故障(SoftCrash),由于OS、DBMS軟件問題或斷電等問題導致內(nèi)存數(shù)據(jù)丟失,但磁盤數(shù)據(jù)仍在影響所有正在運行的事務(wù),破壞事務(wù)狀態(tài),但不破壞整個數(shù)據(jù)庫4、數(shù)據(jù)庫系統(tǒng)故障恢復策略目的恢復DB到一致狀態(tài)基本原則冗余(Redundancy)實現(xiàn)方法定期轉(zhuǎn)儲整個數(shù)據(jù)庫建立事務(wù)日志(log)通過備份和日志進行恢復4、數(shù)據(jù)庫系統(tǒng)故障恢復策略t0t1t2轉(zhuǎn)儲運行事務(wù)Crash登記日志文件重裝副本利用日志文件進行恢復繼續(xù)運行事務(wù)登記日志文件介質(zhì)故障恢復系統(tǒng)故障和事務(wù)故障恢復當發(fā)生故障時:(1)若是介質(zhì)故障,則首先重裝副本(2)利用日志進行事務(wù)故障恢復和系統(tǒng)故障恢復,一直恢復到故障發(fā)生點Therecoveryprocess四、Undo日志事務(wù)日志記錄了所有更新操作的具體細節(jié)Undo日志、Redo日志、Undo/Redo日志日志文件的登記嚴格按事務(wù)執(zhí)行的時間次序Undo日志文件中的內(nèi)容事務(wù)的開始標記(<StartT>)事務(wù)的結(jié)束標記(<Commit,T>或<AbortT>)事務(wù)的更新操作記錄,一般包括以下內(nèi)容執(zhí)行操作的事務(wù)標識操作對象更新前值1、Undo日志規(guī)則事務(wù)的每一個修改操作都生成一個日志記錄<T,x,old-value>在x被寫到磁盤之前,對應(yīng)此修改的日志記錄必須已被寫到磁盤上當事務(wù)的所有修改結(jié)果都已寫入磁盤后,將<Commit,T>日志記錄寫到磁盤上WriteAheadLogging(WAL日志)先寫日志先寫日志(Write-AheadLog)原則在數(shù)據(jù)被寫到磁盤之前,對應(yīng)此修改的日志記錄必須已被寫到磁盤上先寫日志<T1,BeginTransaction><T1,A,1000,900>設(shè)T1將A修改為900時發(fā)生故障。設(shè)此時900已寫到數(shù)據(jù)庫,但還未來得及寫該日志記錄到磁盤上。根據(jù)恢復策略,T1在恢復應(yīng)UNDO,但此時由于后寫日志,A的更新操作在日志中沒有記錄,因此無法將A恢復到1000******************************************如果先寫日志,則即使沒有將900寫到數(shù)據(jù)庫中,也只不過多執(zhí)行一次UNDO操作,不會影響數(shù)據(jù)庫的一致性。后寫日志<T1,BeginTransaction>1、Undo日志規(guī)則T1:

Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t);

FlushLog

Output(A); Output(B);

FlushLog<Start,T1>

<T,A,1000>

<T,B,2000><Commit,T1>LogInitial:A=1000B=2000將日志記錄從緩沖區(qū)寫到Disk上將緩沖區(qū)中A的值寫到Disk上1、Undo日志規(guī)則—故障1T1:

Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t);

FlushLog Output(A); Output(B);

FlushLogFailhereA:900B:2100A:1000B:2000…

<Start,T1>

<T1,A,1000>

<T1,B,2000>…

MemoryDisk1、Undo日志規(guī)則—故障2T1:

Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t);

FlushLog Output(A); Output(B);

FlushLogFailhereA:900B:2100A:900B:2000…

<Start,T1>

<T1,A,1000>

<T1,B,2000>…

<Start,T1>

<T1,A,1000>

<T1,B,2000>MemoryDisk1、Undo日志規(guī)則—故障3T1:

Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t);

FlushLog Output(A); Output(B);

FlushLogFailhereA:900B:2100A:900B:2100…

<Start,T1>

<T1,A,1000>

<T1,B,2000>

<Commit,T>…

<Start,T1>

<T1,A,1000>

<T1,B,2000>MemoryDisk1、Undo日志規(guī)則—故障4T1:

Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t);

FlushLog Output(A); Output(B);

FlushLogSuccess!MemoryA:900B:2100A:900B:2100…

<Start,T1>

<T1,A,1000>

<T1,B,2000>

<Commit,T>…

<Start,T1>

<T1,A,1000>

<T1,B,2000>

<Commit,T>Disk2、基于Undo日志的恢復t0t1t2轉(zhuǎn)儲運行事務(wù)Crash登記日志文件重裝副本利用日志文件進行恢復繼續(xù)運行事務(wù)登記日志文件介質(zhì)故障恢復系統(tǒng)故障和事務(wù)故障恢復TherecoveryprocessRecoveryHereDisk上的日志文件2、基于Undo日志的恢復從頭掃描日志,找出所有沒有<Commit,T>或<Abort,T>的所有事務(wù),放入一個事務(wù)列表L中從尾部開始掃描日志記錄<T,x,v>,如果TL,則

write(X,v)output(X)ForeachTLdowrite<Abort,T>tolog2、基于Undo日志的恢復—故障1T1:

Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t);

FlushLog Output(A); Output(B);

FlushLogFailhereA:900B:2100A:1000B:2000…

<Start,T1>

<T1,A,1000>

<T1,B,2000>…

MemoryDisk無須恢復!2、基于Undo日志的恢復—故障2T1:

Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t);

FlushLog Output(A); Output(B);

FlushLogFailhereA:900B:2100A:900B:2000…

<Start,T1>

<T1,A,1000>

<T1,B,2000>…

<Start,T1>

<T1,A,1000>

<T1,B,2000>MemoryDiskWrite(B,2000)Output(B)Write(A,1000)Output(A)2、基于Undo日志的恢復—故障3T1:

Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t);

FlushLog Output(A); Output(B);

FlushLogFailhereA:900B:2100A:900B:2100…

<Start,T1>

<T1,A,1000>

<T1,B,2000>

<Commit,T1>…

<Start,T1>

<T1,A,1000>

<T1,B,2000>MemoryDisk如何恢復?2、基于Undo日志的恢復—故障4T1:

Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t);

FlushLog Output(A); Output(B);

FlushLogSuccess!MemoryA:900B:2100A:900B:2100…

<Start,T1>

<T1,A,1000>

<T1,B,2000>

<Commit,T1>…

<Start,T1>

<T1,A,1000>

<T1,B,2000>

<Commit,T1>Disk需要恢復嗎?2、基于Undo日志的恢復Whatiffailureduringrecovery?Noproblem!Justre-executetherecovery!Becauseeachrecoveryhassameeffect!3、Undo日志總結(jié)<T,x,v>記錄修改前的舊值寫入<Commit,T>到磁盤之前必須先將數(shù)據(jù)寫入磁盤恢復時忽略已提交事務(wù),只撤銷未提交事務(wù)若磁盤上的日志文件中某事務(wù)有<Commit,T>,則肯定該事務(wù)已將所有數(shù)據(jù)都寫回到磁盤了五、Redo日志在x被寫到磁盤之前,對應(yīng)該修改的Redo日志記錄必須已被寫到磁盤上(WAL)在數(shù)據(jù)寫回磁盤前先寫<Commit,T>日志記錄日志中的數(shù)據(jù)修改記錄<T,x,v>--Nowvisthenewvalue1、Redo日志規(guī)則T1:

Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t);

FlushLog

Output(A); Output(B);

<Start,T1>

<T1,A,900>

<T1,B,2100><Commit,T1>LogInitial:A=1000B=20001、Redo日志規(guī)則—故障1T1:

Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t);

FlushLog Output(A); Output(B);

FailhereA:900B:2100A:1000B:2000…

<Start,T1>

<T1,A,900>

<T1,B,2100>

<Commit,T1>…

BufferDisk1、Redo日志規(guī)則—故障2T1:

Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t);

FlushLog Output(A); Output(B);

FailhereA:900B:2100A:1000B:2000…

<Start,T1>

<T1,A,900>

<T1,B,2100>

<Commit,T1>…

<Start,T1>

<T1,A,900>

<T1,B,2100>

<Commit,T1>DiskBuffer1、Redo日志規(guī)則—故障3T1:

Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t);

FlushLog Output(A); Output(B);

FailhereA:900B:2100A:900B:2000…

<Start,T1>

<T1,A,900>

<T1,B,2100>

<Commit,T1>…

<Start,T1>

<T1,A,900>

<T1,B,2100>

<Commit,T1>DiskBuffer1、Redo日志規(guī)則—故障4T1:

Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t);

FlushLog Output(A); Output(B);

FailhereA:900B:2100A:900B:2100…

<Start,T1>

<T1,A,900>

<T1,B,2100>

<Commit,T1>…

<Start,T1>

<T1,A,900>

<T1,B,2100>

<Commit,T1>DiskBuffer2、基于Redo日志的恢復從頭掃描日志,找出所有有<Commit,T>的事務(wù),放入一個事務(wù)列表L中從首部開始掃描日志記錄<T,x,v>,如果TL,則

write(X,v)output(X)ForeachTLdowrite<Abort,T>tolog2、基于Redo日志的恢復恢復的基礎(chǔ)沒有<Commit,T>記錄的操作必定沒有改寫磁盤數(shù)據(jù),因此在恢復時可以不理會DifferfromUndologging有<Commit,T>記錄的結(jié)果可能還未寫回磁盤,因此在恢復時要RedoStilldifferfromUndologging3、Undovs.RedoUndo基于立即更新(ImmediatelyUpdate)Redo基于延遲更新(DeferredUpdate)3、Undovs.RedoT1:

Read(A,t); tt

-100; Write(A,t);

FlushLog

Output(A); Read(B,t); tt+100; Write(B,t);

FlushLog

Output(B);FlushLog<commit>T2:

Read(A,t); tt

-100; Write(A,t); Read(B,t); tt+100; Write(B,t);

FlushLog<commit>

Output(A); Output(B);立即更新日志(Undolog)延遲更新日志(Redolog)MoreIOsButlessbuffersMorebuffersButlessIOs六、Undo/Redo日志在x被寫到磁盤之前,對應(yīng)該修改的日志記錄必須已被寫到磁盤上(WAL)日志中的數(shù)據(jù)修改記錄<T,x,v,w>

--vistheoldvalue,wisthenewvalue可以立即更新,也可以延遲更新1、基于Undo/Redo日志的恢復正向掃描日志,將<commit>的事務(wù)放入Redo列表中,將沒有結(jié)束的事務(wù)放入Undo列表反向掃描日志,對于<T,x,v,w>,若T在Undo列表中,則Write(x,v);Output(x)正向掃描日志,對于<T,x,v,w>,若T在Redo列表中,則Write(x,w);Output(x)對于Undo列表中的T,寫入<abort,T>1、基于Undo/Redo日志的恢復發(fā)生故障時的日志<Start,T1><T1,B,2000,1900><Start,T2><T2,A,1000,900><Commit,T1><Start,T3><T3,C,3000,2000><T3,B,1900,1800><Commit,T2><Start,T4><T4,D,1000,1200>Undo列表{T3,T4};Redo{T1,T2}Undo

T4:D=1000

T3:B=1900

T3:C=3000Redo

T1:B=1900

T2:A=900Writelog

<Abort,T3>

<Abort,T4>1、基于Undo/Redo日志的恢復先U

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論