《2015 第十章-数据库恢复技术.ppt》由会员分享,可在线阅读,更多相关《2015 第十章-数据库恢复技术.ppt(64页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第十章数据库恢复技术数据库恢复技术的必要性q计算机系统容易发生故障计算机系统容易发生故障 丢失信息丢失信息软件、硬盘、电源、机房、人为软件、硬盘、电源、机房、人为数据库恢复技术的必要性q恢复机制恢复机制将数据库系统恢复到故障发生前数据库的某个将数据库系统恢复到故障发生前数据库的某个一致一致的状态的状态保证事务的保证事务的原子性、持久性原子性、持久性提供高可用性提供高可用性将崩溃后的数据库的不可用的时间减少到最低将崩溃后的数据库的不可用的时间减少到最低课程安排p数据库系统故障种类p日志记录p正常操作时的事务回滚p系统崩溃后的恢复p缓冲区管理p介质故障的恢复数据库系统的故障种类n事务故障(tran
2、saction failure)n系统崩溃(system crash)n介质/磁盘故障(disk failure)事务故障(transaction failure)n事务执行失败,没有达到事务预期的终点n逻辑错误(logical error)n事务内部条件导致事务无法正常执行n例如:非法输入、找不到数据、运算溢出、违反了某些完整性限制等n系统错误(system error)n事务外部条件导致事务无法正常执行n例如:并发事务由于死锁而强制撤销事务系统崩溃(system crash)n指造成系统停止运行的任何事件n例如:CPU异常,O.S.异常,DBMS异常,停电影响正在运行的所有事务n数据库本身
3、并没遭到破坏,只是数据不正确系统崩溃(system crash)n事务 x:=READ(X)n数据项X的值给变量x1.若X所在块B1不在主存,执行input(B1)2.x缓冲块B1中X的值B2B1缓冲块缓冲块磁盘缓冲区B1:XB2:Y磁盘磁盘物理块物理块input(B1)主存储器事务私有空间x以块(block)为单位的定长存储,是磁盘数据传输的单位,可能包含多个数据项系统崩溃(system crash)n事务 WRITE(X)n变量x给数据项X1.若X所在块B1不在主存,执行input(B1)2.x缓冲块B1中X的值B2B1缓冲块缓冲块磁盘缓冲区B1:XB2:Y磁盘磁盘物理块物理块input(
4、B1)主存储器事务私有空间x系统崩溃(system crash)noutput(B1)的两种情况n缓冲管理器需要内存空间、DBS强制写磁盘noutput(B1)不需要在WRITE(X)执行后立即执行nB1里可能还包含其他数据项ZB2B1缓冲块缓冲块磁盘缓冲区B1:X,ZB2:Y磁盘磁盘物理块物理块主存储器事务私有空间xoutput(B1)系统崩溃(system crash)n在WRITE(X)执行后,output(B1)执行前崩溃nX的新值未写入磁盘系统需恢复到事务运行后的状态n事务对X和Y更新,在output(B1)后,output(B2)前崩溃n无法知道事务的结局系统需恢复到事务运行前的状
5、态B2B1缓冲块缓冲块磁盘缓冲区B1:X,ZB2:Y磁盘磁盘物理块物理块主存储器事务私有空间xoutput(B1)output(B2)介质/磁盘故障(disk failure)n外存故障:数据库(或部分数据库)遭到破坏 影响正在存取这部分数据的所有事务数据库系统的故障n故障产生的影响n破坏数据库状态,使数据库中的数据不一致n恢复方法n系统正常运行时:保证有足够信息用于恢复n故障发生后:恢复处理课程安排p数据库系统故障种类p日志记录p正常操作时的事务回滚p系统崩溃后的恢复p缓冲区管理p介质故障的恢复日志记录n以记录为单位的日志文件(log)n记录事务的开始、结束和对DB所有的更新操作n,日志日志
6、T1:READ(A);A:=A-5;WRITE(A);T2:C:=80;WRITE(C);事务日志记录n利用日志保证事务的原子性n反做:Undo(Ti)n将事务Ti更新过的所有数据项的值都恢复成更新前的值n恢复到事务开始时数据库的状态n日志文件中只有start,而没有commit或abort的事务需要被undo日志记录n利用日志保证事务的原子性n重做:Redo(Ti)n将事务Ti更新过的所有数据项的值都设置成更新后的值n恢复到事务结束时数据库的状态n日志文件中既有start,又有commit或abort的事务需要被redo课程安排p数据库系统故障种类p日志记录p正常操作时的事务回滚p系统崩溃后
7、的恢复p缓冲区管理p介质故障的恢复正常操作时的事务回滚正常操作时的事务回滚1.反向扫描日志,对于每一条日志记录,循环做:Xi Vo写补偿日志记录2.直到发现记录3.写日志记录日志正常操作中T0开始回滚正常操作时的事务回滚正常操作时的事务回滚1.反向扫描日志,对于每一条日志记录,循环做:Xi Vo写补偿日志记录2.直到发现记录3.写日志记录日志B20;正常操作时的事务回滚正常操作时的事务回滚1.反向扫描日志,对于每一条日志记录,循环做:Xi Vo写补偿日志记录2.直到发现记录3.写日志记录日志写补偿记录B20;正常操作时的事务回滚正常操作时的事务回滚1.反向扫描日志,对于每一条日志记录,循环做:
8、Xi Vo写补偿日志记录2.直到发现记录3.写日志记录日志写补偿记录T0回滚完成B20;课程安排p数据库系统故障种类p日志记录p正常操作时的事务回滚p系统崩溃后的恢复p缓冲区管理p介质故障的恢复系统崩溃后的恢复n重启DBS,分两阶段恢复n重做阶段 正向扫描日志文件,查找系统崩溃前回滚的事务、没提交的事务,对于每一条日志记录,循环做:Xi Vn如果遇到,加Ti到undo-list如果遇到或,将Ti从undo-list中移出系统崩溃后的恢复n重启DBS,分两阶段恢复n反做阶段1.反向扫描日志文件,对于每一条日志记录,循环做:如果发现Ti在undo-list中,执行undo如果遇到,写日志记录2.直
9、到undo-list为空检查点n扫描整个日志文件的困难n搜索过程耗时n大多数redo的事务已把更新写入DB,没必要再做redo 检查点:降低开销n简单的检查点做法,执行检查点操作时:n不允许任何更新操作n在日志文件中增加检测点记录,增加一个重新开始文件,动态维护日志文件检查点n将当前日志缓冲中的日志记录写入日志文件n在日志文件中写入一个检查点记录n将当前数据缓冲区中的所有数据写入数据库n将检测点记录的地址写入重新开始文件(记录每个检测点记录在日志中的地址)Ci检测点记录地址检测点记录地址检测点检测点Ci的的重新开始记录重新开始记录重新开始文件重新开始文件日志文件日志文件检查点恢复n使用检查点进
10、行恢复n在重新开始文件中找到最后一个检查点记录n找到正在执行的事务清单,将其放入undo队列n从检查点开始进行恢复检查点恢复示例日志检查点时刻的活动事务系统崩溃时日志的结束点重做阶段undo-list:T0,T1redoC60;检查点恢复示例日志检查点时刻的活动事务系统崩溃时日志的结束点重做阶段undo-list:T0redoC60;检查点恢复示例日志检查点时刻的活动事务系统崩溃时日志的结束点重做阶段undo-list:T0,T2redoA400;检查点恢复示例日志检查点时刻的活动事务系统崩溃时日志的结束点重做阶段undo-list:T2redo检查点恢复示例日志检查点时刻的活动事务系统崩溃时
11、日志的结束点undo-list:T2undo反做阶段检查点恢复示例日志检查点时刻的活动事务系统崩溃时日志的结束点undo-list:T2反做阶段undoA500;检查点恢复示例日志检查点时刻的活动事务系统崩溃时日志的结束点undo-list:T2反做阶段将A恢复成更新前的值undoA500;检查点恢复示例日志检查点时刻的活动事务系统崩溃时日志的结束点undo-list:T2反做阶段undo检查点恢复示例日志检查点时刻的活动事务系统崩溃时日志的结束点undo-list:反做阶段undo检查点恢复示意图使用检测点进行恢复的步骤使用检测点进行恢复的步骤:在重新开始文件中找到最后一个在重新开始文件中找
12、到最后一个记录记录,从而找到最后一个检测点记从而找到最后一个检测点记录录找到正在执行的事务清单找到正在执行的事务清单,将其将其放入放入undoundo队列队列从检测点开始正向扫描日志文件从检测点开始正向扫描日志文件,如有新事务如有新事务TiTi开始开始,将其放入将其放入undoundo队列队列,如有事务如有事务TjTj提交提交,将其移入将其移入redoredo队列队列,直到日志文件结束直到日志文件结束对对undoundo队列中的事务执行队列中的事务执行undoundo操操作作,对对redoredo队列中的事务执行队列中的事务执行redoredo操作操作Tc(检查点检查点)Tf(系统故障点系统故
13、障点)T1T2T3T4T5检查点恢复示意图故障点时的活动事务:故障点时的活动事务:T3,T5T3,T5RedoRedo事务事务:T2,T4:T2,T4UndoUndo事务事务:T3,T5:T3,T5Tc(检查点检查点)Tf(系统故障点系统故障点)T1T2T3T4T5检查点时的活动事务:检查点时的活动事务:T2,T3T2,T3课程安排p数据库系统故障种类p日志记录p正常操作时的事务回滚p系统崩溃后的恢复p缓冲区管理p介质故障的恢复缓冲区管理 日志记录缓冲n日志记录缓冲n日志记录比输出块小得多n为节省开销,一次输出多个记录日志稳定存储器缓冲区管理 日志记录缓冲n日志记录缓冲n日志记录比输出块小得多
14、n为节省开销,一次输出多个记录n日志记录顺序在缓冲区和稳定存储器中必须一致日志稳定存储器缓冲块缓冲块日志缓冲区主存储器缓冲区管理 日志记录缓冲n输出到稳定存储器后,Ti进入提交状态n输出到稳定存储器前,与Ti有关的所有日志记录必须已经输出到稳定存储器n主存中的数据块输出到DB前,所有相关日志记录必须输出到稳定存储器-先写日志(Write-Ahead Logging,WAL)日志稳定存储器缓冲块缓冲块日志缓冲区主存储器缓冲区管理 日志记录缓冲日志稳定存储器缓冲块缓冲块日志缓冲区主存储器n当系统发现需要将一个日志记录输出到稳定存储器n当有足够日志记录被填满,就输出n没有足够日志记录,收集到一个部分
15、填充块,输出缓冲区管理 数据库缓冲缓冲块缓冲块数据缓冲区主存储器n主存比数据库小很多n强制输出策略:事务提交时,强制将修改后的所有块输出n非强制输出策略:一个事务修改了某些没有写回磁盘的块,也允许提交n多个更新收集在一起,减少输出次数n事务快速提交稳定存储器B1B2缓冲区管理 数据库缓冲数据缓冲区主存储器n非窃取策略:活动事务修改的块先不写磁盘n缓冲区被占满不适合执行大量更新事务稳定存储器B2B1B4B3缓冲区管理 数据库缓冲n窃取策略:允许活动事务修改的块写磁盘n大多数系统采用的标准方法n只要遵守先写日志,就能保证正确恢复稳定存储器数据缓冲区主存储器B1B4B3B5B2缓冲区管理 数据库缓冲
16、n先写日志的必要性n银行转账例子:稳定存储器数据缓冲区主存储器B1B4B3B=2000B2A=1000C=700T0:READ(A)A:=A-50;WRITE(A);READ(B)B:=B+50;WRITE(B);T1:READ(C)C:=C-100;WRITE(C);缓冲区管理 数据库缓冲n先写日志的必要性n银行转账例子:稳定存储器数据缓冲区主存储器B1B4B3B=2000A=950C=700T0:READ(A)A:=A-50;WRITE(A);READ(B)B:=B+50;WRITE(B);T1:READ(C)C:=C-100;WRITE(C);缓冲区管理 数据库缓冲n先写日志的必要性n银
17、行转账例子:稳定存储器数据缓冲区主存储器B1B4B3B=2000A=950C=700T0:READ(A)A:=A-50;WRITE(A);READ(B)B:=B+50;WRITE(B);T1:READ(C)C:=C-100;WRITE(C);先写日志保证在稳定存储器中缓冲区管理 数据库缓冲n先写日志的必要性n银行转账例子:稳定存储器数据缓冲区主存储器B1B4B3B=2000A=1000C=700T0:READ(A)A:=A-50;WRITE(A);READ(B)B:=B+50;WRITE(B);T1:READ(C)C:=C-100;WRITE(C);先写日志保证在稳定存储器中缓冲区管理 数据库
18、缓冲n先写日志文件,后写数据库日志日志数据库数据库C=80A=95T1:READ(A);A:=A-5;WRITE(A);T2:C:=80;WRITE(C);T2提交缓冲区管理 数据库缓冲n先写日志文件,后写数据库日志日志数据库数据库C=80A=100T1:READ(A);A:=A-5;WRITE(A);T2:C:=80;WRITE(C);T2提交系统崩溃undo缓冲区管理 数据库缓冲n先写日志文件,后写数据库日志日志数据库数据库C=80A=95T1:READ(A);A:=A-5;WRITE(A);T2:C:=80;WRITE(C);T2提交系统崩溃redo缓冲区管理 数据库缓冲n输出B2时,要
19、防止对B2的写操作n封锁方法n在缓冲块上加锁(闩锁),与并发控制的锁无关稳定存储器数据缓冲区主存储器B2排它锁写操作课程安排p数据库系统故障种类p日志记录p正常操作时的事务回滚p系统崩溃后的恢复p缓冲区管理p介质故障的恢复介质故障的恢复n恢复基本原理:数据冗余n数据转储nDBA定期的将整个数据库复制到磁带或另一个磁盘上保存起来的过程n备用的数据n后备副本或后援副本介质故障的恢复 数据转储n数据的转储方法数据的转储方法转储状态转储状态静态转储静态转储动态转储动态转储系统系统没有没有运行事务时进运行事务时进行的转储操作行的转储操作,操作过操作过程中禁止操作数据库程中禁止操作数据库n后援副本后援副本
20、和数据库中的数据是一致的和数据库中的数据是一致的n静态转储静态转储降低降低数据库的可用性数据库的可用性重装后备副本 重新运行事务u恢复处理T操作DB状态DB1T转储运行事务故障发生u正常运行操作DB状态DB1DB1DB2介质故障的恢复 数据转储n数据的转储方法数据的转储方法转储状态转储状态静态转储静态转储动态转储动态转储系统系统没有没有运行事务时进运行事务时进行的转储操作行的转储操作,操作过操作过程中禁止操作数据库程中禁止操作数据库n后援副本后援副本和数据库中的数据是一致的和数据库中的数据是一致的n静态转储静态转储降低降低数据库的可用性数据库的可用性重装后备副本u恢复处理T操作DB状态DB1T
21、转储运行事务故障发生u正常运行操作DB状态DB1DB1按日志恢复登记日志文件DB2DB2继续运行登记日志文件介质故障的恢复 数据转储n数据的转储方法数据的转储方法转储状态转储状态静态转储静态转储动态转储动态转储转储期间允许对数据库进行转储期间允许对数据库进行存取和修改存取和修改运行事务u正常运行u恢复处理T操作DB状态DB状态DB1DB2DB1T转储故障发生登记日志文件重装后备副本 按日志恢复操作继续运行登记日志文件DB3DB3介质故障的恢复 数据转储n数据的转储方法数据的转储方法转储方式转储方式海量转储海量转储增量转储增量转储每次转储每次转储全部数据库全部数据库每次转储每次转储数据库增量部分
22、数据库增量部分介质故障的恢复 数据转储转储状态转储状态海量转储海量转储增量转储增量转储转储方式转储方式静态转储静态转储静态海量转储静态海量转储静态增量转储静态增量转储动态转储动态转储动态海量转储动态海量转储动态增量转储动态增量转储n数据的转储方法数据的转储方法n转储十分耗费时间和资源nDBA应根据数据库的使用情况确定一个适当的转储周期介质故障的恢复n需要DBA介入,实际恢复由系统完成,具体步骤1.装入后援副本2.装入相应的日志文件副本3.启动恢复程序按日志恢复n注意n日志文件也要转储n日志和数据库不在同一磁盘空间本章小结p数据库系统故障种类p事务故障、系统崩溃、介质故障p日志记录p正常操作时的事务回滚p系统崩溃后的恢复p缓冲区管理:先写日志p介质故障的恢复:数据转储