您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > adb08_系统故障与恢复.
1第十章系统故障与恢复数据库保护数据库保护:排除和防止各种对数据库的干扰破坏,确保数据安全可靠;以及在数据库遭到破坏后尽快地恢复数据库保护通过四个方面来实现数据库的恢复技术[thischapter]Dealwithfailure并发控制技术[NextChp.]Dealwithdatasharing完整性控制技术[notdiscuss]Enableconstraints安全性控制技术[notdiscuss]Authorizationandauthentication故障后,如何恢复?STEP1确定设备的故障状态STEP2分析故障对DB的影响有哪些?STEP3设计恢复算法存有足够的信息(故障前)DB的定期备份Log采取适当措施,恢复数据库(故障后)45数据库的一致性和正确性事务的状态及原语操作数据库系统故障分析Undo日志Redo日志Undo/Redo日志Checkpoint主要内容一、事务的状态及原语操作事务(transaction)一个不可分割的操作序列,其中的操作要么都做,要么都不做1、事务事务的例子银行转帐:A帐户转帐到B帐户100元。该处理包括了两个更新步骤A=A-100B=B+100这两个操作是不可分的:要么都做,要么都不作1、事务事务的ACID性质原子性atomicity事务是不可分的原子,其中的操作要么都做,要么都不做一致性consistency事务的执行保证数据库从一个一致状态转到另一个一致状态隔离性Isolation多个事务一起执行时相互独立持久性Durability事务一旦成功提交,就在数据库永久保存2、事务的状态[inlogs]StartTTransactionThasstartedCommitTThasfinishedsuccessfullyandallmodificationsarereflectedtodisksAbortTThasbeenterminatedandallmodificationshavebeencanceled3、事务的原语操作input(x):diskblockwithxmemoryoutput(x):bufferblockwithxdiskRead(x,t):doinput(x)ifnecessary;valueofxinbuffertWrite(x,t):valueoftxinbufferdooutput(x)ifnecessary;数据X:在DISK中(对应DB中的一个数据元素)在内存中(一个Buffer中)事务T:局部变量t在内存中(一个Buffer中)日志(LOG)在DISK中(即DB中)在内存中(一个Buffer中)OUTPUT(X)INPUT(X)Read(X,t)Write(X,t)FlushLog4、事务例子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二、数据库的一致性和正确性一致性(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+100TOTTOT+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)CorrectnessofDBCorrectnessofrealityCorrectnessofDB如果数据库在事务开始执行时是一致的,并且事务执行结束后数据库仍处于一致状态,则数据库满足正确性.ConsistencyofDB+ACIDoftransactionCorrectnessofDB2、正确性(Correctness)三、数据库系统故障分析ConsistencyofDB可能由于故障而被破坏事务故障介质故障系统故障1、事务故障发生在单个事务内部的故障可预期的事务故障:即应用程序可以发现的故障,如转帐时余额不足。由应用程序处理非预期的事务故障:如运算溢出、掉电等,导致事务被异常中止。应用程序无法处理此类故障,由系统进行处理2、介质故障硬故障(HardCrash),一般指磁盘损坏导致磁盘数据丢失,破坏整个数据库3、系统故障系统故障:软故障(SoftCrash),由于OS、DBMS软件问题或断电等问题导致内存数据丢失,但磁盘数据仍在影响所有正在运行的事务,破坏事务状态,但不破坏整个数据库4、数据库系统故障恢复策略目的恢复DB到一致状态基本原则冗余(Redundancy)实现方法定期转储整个数据库建立事务日志(log)通过备份和日志进行恢复4、数据库系统故障恢复策略t0t1t2转储运行事务Crash登记日志文件重装副本利用日志文件进行恢复继续运行事务登记日志文件介质故障恢复系统故障和事务故障恢复当发生故障时:(1)若是介质故障,则首先重装副本(2)利用日志进行事务故障恢复和系统故障恢复,一直恢复到故障发生点Therecoveryprocess四、Undo日志事务日志记录了所有更新操作的具体细节Undo日志、Redo日志、Undo/Redo日志日志文件的登记严格按事务执行的时间次序Undo日志文件中的内容事务的开始标记(StartT)事务的结束标记(Commit,T或AbortT)事务的更新操作记录,一般包括以下内容执行操作的事务标识操作对象更新前值1、Undo日志规则事务的每一个修改操作都生成一个日志记录T,x,old-value在x被写到磁盘之前,对应此修改的日志记录必须已被写到磁盘上当事务的所有修改结果都已写入磁盘后,将Commit,T日志记录写到磁盘上WriteAheadLogging(WAL日志)先写日志先写日志(Write-AheadLog)原则在数据被写到磁盘之前,对应此修改的日志记录必须已被写到磁盘上先写日志T1,BeginTransactionT1,A,1000,900设T1将A修改为900时发生故障。设此时900已写到数据库,但还未来得及写该日志记录到磁盘上。根据恢复策略,T1在恢复应UNDO,但此时由于后写日志,A的更新操作在日志中没有记录,因此无法将A恢复到1000******************************************如果先写日志,则即使没有将900写到数据库中,也只不过多执行一次UNDO操作,不会影响数据库的一致性。后写日志T1,BeginTransaction1、Undo日志规则T1:Read(A,t);tt-100;Write(A,t);Read(B,t);tt+100;Write(B,t);FlushLogOutput(A);Output(B);FlushLogStart,T1T,A,1000T,B,2000Commit,T1LogInitial:A=1000B=2000将日志记录从缓冲区写到Disk上将缓冲区中A的值写到Disk上1、Undo日志规则—故障1T1:Read(A,t);tt-100;Write(A,t);Read(B,t);tt+100;Write(B,t);FlushLogOutput(A);Output(B);FlushLogFailhereA:900B:2100A:1000B:2000…Start,T1T1,A,1000T1,B,2000…MemoryDisk1、Undo日志规则—故障2T1:Read(A,t);tt-100;Write(A,t);Read(B,t);tt+100;Write(B,t);FlushLogOutput(A);Output(B);FlushLogFailhereA:900B:2100A:900B:2000…Start,T1T1,A,1000T1,B,2000…Start,T1T1,A,1000T1,B,2000MemoryDisk1、Undo日志规则—故障3T1:Read(A,t);tt-100;Write(A,t);Read(B,t);tt+100;Write(B,t);FlushLogOutput(A);Output(B);FlushLogFailhereA:900B:2100A:900B:2100…Start,T1T1,A,1000T1,B,2000Commit,T…Start,T1T1,A,1000T1,B,2000MemoryDisk1、Undo日志规则—故障4T1:Read(A,t);tt-100;Write(A,t);Read(B,t);tt+100;Write(B,t);FlushLogOutput(A);Output(B);FlushLogSuccess!MemoryA:900B:2100A:900B:2100…Start,T1T1,A,1000T1,B,2000Commit,T…Start,T1T1,A,1000T1,B,2000Commit,TDisk2、基于Undo日志的恢复t0t1t2转储运行事务Crash登记日志文件重装副本利用日志文件进行恢复继续运行事务登记日志文件介质故障恢复系统故障和事务故障恢复TherecoveryprocessRecove
本文标题:adb08_系统故障与恢复.
链接地址:https://www.777doc.com/doc-2896230 .html