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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

-100; Write(A,t); Read(B,t); tt+100; Write(B,t); Output(A); Output(B);Abanktransfer5、SQL對事務的支持SQL標準提供了三個語句,允許應用程序聲明事務和控制事務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事務的ACID性質Atomicity,Consistency,Isolation,DurabilityconsistencyoftransactionConsistentDBConsistentDB’T但事務內部不保證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ù)庫在事務開始執(zhí)行時是一致的,并且事務執(zhí)行結束后數(shù)據(jù)庫仍處于一致狀態(tài),則數(shù)據(jù)庫滿足正確性.ConsistencyofDB+ACIDoftransactionCorrectnessofDB2、正確性(Correctness)三、數(shù)據(jù)庫系統(tǒng)故障分析ConsistencyofDB可能由于故障而被破壞事務故障介質故障系統(tǒng)故障1、事務故障發(fā)生在單個事務內部的故障可預期的事務故障:即應用程序可以發(fā)現(xiàn)的故障,如轉帳時余額不足。由應用程序處理非預期的事務故障:如運算溢出、掉電等,導致事務被異常中止。應用程序無法處理此類故障,由系統(tǒng)進行處理2、介質故障硬故障(HardCrash),一般指磁盤損壞導致磁盤數(shù)據(jù)丟失,破壞整個數(shù)據(jù)庫3、系統(tǒng)故障系統(tǒng)故障:軟故障(SoftCrash),由于OS、DBMS軟件問題或斷電等問題導致內存數(shù)據(jù)丟失,但磁盤數(shù)據(jù)仍在影響所有正在運行的事務,破壞事務狀態(tài),但不破壞整個數(shù)據(jù)庫4、數(shù)據(jù)庫系統(tǒng)故障恢復策略目的恢復DB到一致狀態(tài)基本原則冗余(Redundancy)實現(xiàn)方法定期轉儲整個數(shù)據(jù)庫建立事務日志(log)通過備份和日志進行恢復4、數(shù)據(jù)庫系統(tǒng)故障恢復策略t0t1t2轉儲運行事務Crash登記日志文件重裝副本利用日志文件進行恢復繼續(xù)運行事務登記日志文件介質故障恢復系統(tǒng)故障和事務故障恢復當發(fā)生故障時:(1)若是介質故障,則首先重裝副本(2)利用日志進行事務故障恢復和系統(tǒng)故障恢復,一直恢復到故障發(fā)生點Therecoveryprocess四、Undo日志事務日志記錄了所有更新操作的具體細節(jié)Undo日志、Redo日志、Undo/Redo日志日志文件的登記嚴格按事務執(zhí)行的時間次序Undo日志文件中的內容事務的開始標記(<StartT>)事務的結束標記(<Commit,T>或<AbortT>)事務的更新操作記錄,一般包括以下內容執(zhí)行操作的事務標識操作對象更新前值1、Undo日志規(guī)則事務的每一個修改操作都生成一個日志記錄<T,x,old-value>在x被寫到磁盤之前,對應此修改的日志記錄必須已被寫到磁盤上當事務的所有修改結果都已寫入磁盤后,將<Commit,T>日志記錄寫到磁盤上WriteAheadLogging(WAL日志)先寫日志先寫日志(Write-AheadLog)原則在數(shù)據(jù)被寫到磁盤之前,對應此修改的日志記錄必須已被寫到磁盤上先寫日志<T1,BeginTransaction><T1,A,1000,900>設T1將A修改為900時發(fā)生故障。設此時900已寫到數(shù)據(jù)庫,但還未來得及寫該日志記錄到磁盤上。根據(jù)恢復策略,T1在恢復應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轉儲運行事務Crash登記日志文件重裝副本利用日志文件進行恢復繼續(xù)運行事務登記日志文件介質故障恢復系統(tǒng)故障和事務故障恢復TherecoveryprocessRecoveryHereDisk上的日志文件2、基于Undo日志的恢復從頭掃描日志,找出所有沒有<Commit,T>或<Abort,T>的所有事務,放入一個事務列表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日志總結<T,x,v>記錄修改前的舊值寫入<Commit,T>到磁盤之前必須先將數(shù)據(jù)寫入磁盤恢復時忽略已提交事務,只撤銷未提交事務若磁盤上的日志文件中某事務有<Commit,T>,則肯定該事務已將所有數(shù)據(jù)都寫回到磁盤了五、Redo日志在x被寫到磁盤之前,對應該修改的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>的事務,放入一個事務列表L中從首部開始掃描日志記錄<T,x,v>,如果TL,則

write(X,v)output(X)ForeachTLdowrite<Abort,T>tolog2、基于Redo日志的恢復恢復的基礎沒有<Commit,T>記錄的操作必定沒有改寫磁盤數(shù)據(jù),因此在恢復時可以不理會DifferfromUndologging有<Commit,T>記錄的結果可能還未寫回磁盤,因此在恢復時要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被寫到磁盤之前,對應該修改的日志記錄必須已被寫到磁盤上(WAL)日志中的數(shù)據(jù)修改記錄<T,x,v,w>

--vistheoldvalue,wisthenewvalue可以立即更新,也可以延遲更新1、基于Undo/Redo日志的恢復正向掃描日志,將<commit>的事務放入Redo列表中,將沒有結束的事務放入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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論