资源描述
Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,Silberschatz,Korth,and,Sudarshan,17.,27,Click to edit Master title style,Database System Concepts,第七章 数据库恢复技术,事务的基本概念和事务的性质,数据库的恢复技术,恢复策略,7.1 事务的基本概念,事务的定义,由一系列操作序列构成的程序执行单元,,这些操作要么都做,要么都不做,是一个不可分割的工作单位。,例如:银行的一次转帐,事务和程序,事务:一条,SQL,语句、一组,SQL,语句或一段程序。,程序:通常,一个程序中包含多个事务。,事务处理技术包括,数据库恢复技术,和,并发控制技术,。,事务是恢复和并发控制的基本单位。,7.1 事务的基本概念,定义事务,事务的开始和结束可以让用户显式地定义事务,。,DBMS,自动进行划分。,SQL,中事务的定义,事务以,Begin transaction,开始,以,Commit,或,Rollback,结束。,*,Commit:,表示,提交,,事务正常结束,。,*,Rollback:,表示事务非正常结束,撤消事务已做的操作,,回滚,到事务开始时状态。,示例,银行转帐:事务,T,从,A,帐户过户50¥到,B,帐户。,T:,read,(A);,A := A,50;,write,(A);,read,(B);,B := B + 50;,write,(B);,read,(X):,从数据库传送数据项,X,到事务的工作区中。,write,(X):,从事务的工作区中将数据项,X,写回数据库。,7.1 事务的基本概念,事务特性(,ACID),原子性(,Atomicity):,逻辑工作单位,事务中包含的所有操作要么全做,要么全不做。,原子性由,恢复机制,实现。,一致性(,Consistency):,事务开始前,数据库处于一致性的状态;事务结束后,数据库必须仍处于一致性状态。,数据库的一致性状态由,用户,来负责。,如银行转帐,转帐前后两个帐户金额之和应保持不变。,事务特性(,ACID),隔离性(,Isolation),系统必须保证事务不受其它并发执行事务的影响。,对任何一对事务,T,1,,T,2,,,在,T,1,看来,,T,2,要么在,T,1,开始之前已经结束,要么在,T,1,完成之后再开始执行。,隔离性通过,并发控制机制,实现。,持久性(,Durability),一个事务一旦提交之后,它对数据库的影响必须是永久的。,系统发生故障不能改变事务的持久性。,持久性通过,恢复机制,实现。,事务,ACID,特性可能遭到破坏的因素,多个事务并发运行,多个事务交叉执行;,破坏:,隔离性,运行中的事务被强行中止;,破坏:,原子性,、一致性和持久性,保持事务的,ACID,性是数据库管理系统中,恢复机制,和,并发控制,机制的责任。,7.2 数据库恢复概述,数据库的恢复,指把数据库从错误状态恢复到某一已知的正确状态(也称一致状态或完整状态),这是,DBMS,必须具有的功能。,恢复子系统:,DBMS,的重要组成部分,会对系统的运行效率产生很大的影响。,7.3 故障的种类,事务内部的故障,系统,故障,介质故障,计算机病毒,7.3 故障的种类,事务内部的故障,预期的:即可以通过事务程序本身发现,例:银行转帐事务,begin transaction,read,balance;,balance = balance,amount;,if,(balance 0),then,write,(,“,not enough amount,can,t be,transfered,”,);,rollback,;,else,write,balance;,read,balance1;,balance1 = balance1 + amount;,write,balance1;,commit,;,amount:,转帐余额,balance:,帐户1的余额,balance1:,帐户2的余额,使用,回滚,操作来解决该故障,事务内部的故障,非预期的:不能通过事务程序发现:,运算溢出、并发事务发生死锁撤消事务破坏完整性等,使用,事务撤销操作(,undo),来解决该故障:强制回滚。,系统故障 软故障(,soft crash),定义:指造成系统停止运转的任何事件,通常需要重新启动系统。,如:特定的硬件故障、操作系统故障、,DBMS,故障等。,危害:影响正在运行的所有事务,但不破坏数据库。,重启后的两类解决措施,* 事务撤销(,undo):,适用所有未完成的事务。,*,事务重做(,redo):,适用所有已提交的事务。,介质故障 硬故障(,hard crash),外存故障,如磁盘损坏、磁头碰撞等。,危害:破坏数据库或部分数据库,并影响正在使用这部分数据的所有事务。,计算机病毒,指一些具有破坏性的计算机程序,一般是人为的故障或破坏。,导致两类破坏:破坏数据库和影响事务的运行。,都需要通过一定的数据库恢复技术来加以恢复。,7.4 恢复的实现技术,恢复的原理,冗余:,数据库中任一部分的数据可以根据存储在系统别处的冗余数据来重建。,恢复的关键问题,如何建立冗余数据,如何利用这些冗余数据实施恢复,建立冗余数据的常用技术,数据转储,登录日志文件,数据转储,定义,DBA,定期将整个数据库复制到磁带或另一个磁盘上保存起来。(后备副本、后援副本),转储过程,正常运行,恢复,转储,运行事务,故障发生点,Ta,Tb,Tf,重装后备副本,重新运行事务,数据转储,数据转储,转储的策略,静态转储,:无运行事务时进行的存储。,优点:得到的一定是数据一致性的副本。,缺点:事务和存储不能同时进行。,动态存储,:转储期间允许对数据库进行存取和修改。,优点:转储和用户事务可以并发进行。,缺点:转储结束时不能保证后援副本上的数据正确有效(一致性会存在问题)。,因此需要建立,日志文件,来记录转储期间各个事务的活动。,日志文件,后援副本,数据库恢复,数据转储,转储的方式,海量转储 每次转储全部数据库。,增量转储 每次只转储上一次转储之后更新过的数据。,数据转储方法,转储策略,动态转储,静态转储,转储,方式,海量转储,动态海量转储,静态海量转储,增量转储,动态增量转储,静态增量转储,登记日志文件(,Logging),日志文件:是用来记录数据库更新活动的文件,由系统自动记录,。,日志文件内容和格式,以记录为单位,登记内容:事务开始标记、结束标记、事务的所有更新操作。(每一部分都是一个日志记录),日志记录的内容:事务标识、操作类型、操作对象、更新前的数据值、更新后的数据值。,以数据块为单位,日志记录内容包括事务标识和被更新的数据块。,登记日志文件,登记日志文件,日志文件的作用,进行事务故障恢复和系统故障恢复。,在动态转储方式中协助后援副本进行数据库的恢复。,静态转储方式下可用于对数据库进行进一步的恢复。,书上图7.2,登记日志文件,登记原则:,登记次序严格按照并发事务执行的时间顺序。,先写日志文件,再写数据库。,7.5 恢复策略,恢复的基本操作,UNDO:,对夭折事务事务所做过的修改操作应执行,un,do,操作,即撤消该操作,修改对象被赋予旧记录值。,REDO:,对圆满事务所做过的修改操作应执行,redo,操作,即重新执行该操作,修改对象被赋予新记录值。, 针对不同的故障类型其恢复策略也不同。,7.5 恢复策略,事务故障的恢复,恢复操作 ,UNDO,恢复步骤(系统自动执行),(1)反向扫描日志,查找该事务的更新操作。,(2)对事务的更新操作执行逆操作。,(3)继续反向扫描,找到该事务的其他更新操作,返回执行(2)。,(4)直到扫描到事务的开始标记,恢复过程结束。,7.5 恢复策略,系统故障恢复,恢复操作 ,UNDO、REDO,恢复步骤(系统重起时自动执行),(1)正向扫描日志文件,分理出需要重做(,REDO),和需要撤销(,UNDO),的事务。,(2)对需要进行撤销处理的事务进行撤销。,反向扫描日志文件,做,UNDO;,(3)对需要重做的事务进行重做。,正向扫描日志文件,做,REDO。,7.5 恢复策略,介质故障恢复,恢复操作 ,UNDO、REDO,恢复步骤(,DBA,和,DBMS,共同完成),重装数据库,恢复到最近一次转储时的一致性状态。,重做已完成的事务,恢复到故障前某一时刻的一致状态。,DBA,重装最近转储的数据库副本和有关的日志文件副本执行系统的恢复命令,DBMS:,自动完成数据库的恢复。,7.6 具有检查点的恢复技术,日志技术的缺陷:,需要搜索整个日志文件耗费较长的时间,要,REDO,一些已完成的事务也浪费一定的时间,解决的方法:增加检查点、重新开始文件,检查点记录的内容:,正在执行的事务清单,这些事务最近一个日志记录的地址,Ci,记录地址,重新开始文件,T1,T2,D1,D2,日志文件,7.6 具有检查点的恢复技术,使用检查点技术的方法:,周期性:建立检查点、保存数据库状态;,(1) 将日志缓冲中的所有日志磁盘上的日志文件;,(2) 在日志文件中写入检查点记录;,(3) 将数据缓冲中的数据记录写入磁盘中的数据库;,(4) 在重新开始文件中写入检查点记录的地址,带有检查点的恢复策略,Tc,(,检查点),Tf,(,系统故障),T1,T2,T3,T4,T5,不要,redo,redo,redo,undo,undo,T1,在检查点之前提交,不必,redo。,T2、T4,在检查点之后故障点前提交,数据尚在缓冲区,需要,redo。,T3、T5,在故障发生时还未完成,需要,undo。,使用检查点的恢复步骤,找到最近一次的检查点。,由检查点记录获取正在执行的事务清单,建立两个事务队列,undo_list、redo_list,,分别存放执行,undo,操作和,redo,操作的事务,检查点时刻正在执行的事务暂时置于,undo_list。,从检查点开始正向扫描日志文件。,若有新开始的事务暂时放入,undo_list。,若有提交的事务,则从,undo_list,移入若,redo_list,。,对两个队列中的事务执行相应的恢复操作。,7.7 数据库镜像,对介质故障的处理,DBA,周期性的转储数据库:手工完成,改进,DBMS,根据,DBA,的要求自动完成,一般的方法,对数据库的关键数据和日志文件进行复制,另外的用处,用于多用户的并发操作,
展开阅读全文