第十章数据库恢复技术授课内容10.1事务的基本概念10.2数据库恢复概述10.3故障的种类10.4恢复的实现技术10.5恢复策略10.6具有检查点的恢复技术10.7数据库镜像10.1事务的基本概念事务的基本概念什么是事务事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。事务和程序是两个概念在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。一个应用程序通常包含多个事务。事务是恢复和并发控制的基本单位。事务的基本概念如何定义事务显式定义方式BEGINTRANSACTIONSQL语句1SQL语句2…………ROLLBACKBEGINTRANSACTIONSQL语句1SQL语句2…………COMMIT事务的基本概念DB主存缓冲区事务写写begincommit┼──────────┼beginrollback┼──────────┼事务的基本概念如何定义事务隐式定义方式当用户没有显式地定义事务时,DBMS按缺省规定自动划分事务事务的基本概念createtablecount(namevarchar(10),balanceint,);insertintocountvalues('甲',1900);insertintocountvalues('乙',100);把一笔资金从账户甲转给账户乙,资金数目1000BEGINTRANSACTIONupdatecountsetBALANCE=BALANCE-1000wherename='甲'declare@cintselect@c=BALANCEfromcountwherename='甲'if(@c0)beginROLLBACKendelsebeginupdatecountsetBALANCE=BALANCE+1000wherename='乙'COMMITend事务的基本概念事务的ACID特性:原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持续性(Durability)事务的基本概念原子性(Atomicity)事务是数据库的逻辑工作单位事务中包括的诸操作要么都做,要么都不做事务的基本概念原子性示例CREATETABLEsales(idchar(5),aint,bint);insertintosalesvalues('A0001',0,10);事务的基本概念updatesalesseta=a-10whereid='A0001'waitfordelay'00:00:30.000'updatesalessetb=b+10whereid='A0001'事务begintranupdatesalesseta=a-10whereid='A0001'waitfordelay'00:00:30.000'updatesalessetb=b+10whereid='A0001'committran事务的基本概念一致性(Consistency)事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态一致性状态:数据库中只包含成功事务提交的结果不一致状态:数据库中包含失败事务的结果begincommit┼──────────┼写磁盘断电begincommit┼──────────┼写磁盘断电事务的基本概念隔离性(Isolation)事务是允许并发执行的并发执行的各个事务之间不能互相干扰begintransaction读A更新A,使A减1commitbegintransaction读A更新A,使A减3commitT1T2①读A=16②③A←A-1,写回A=15④读A=16A←A-3,写回A=13事务的基本概念事务一begintrandeclare@slintselect@sl=afromsaleswhereid='A0001'waitfordelay'00:00:30.000'updatesalesseta=@sl-1whereid='A0001'committran事务二begintrandeclare@slintselect@sl=afromsaleswhereid='A0001'waitfordelay'00:00:30.000'updatesalesseta=@sl-3whereid='A0001'committran事务的基本概念持续性(Durability)事务提交之后,它对于系统的影响是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。事务的基本概念破坏事务ACID特性的因素事务在运行过程中被强行停止。数据库恢复机制多个事务并行运行时,不同事务的操作交叉执行。数据库并发控制机制begincommit┼──────────┼写磁盘断电10.2数据库恢复概述数据库恢复概述故障是不可避免的计算机硬件故障系统软件和应用软件的错误操作员的失误恶意的破坏故障的影响简单情况下,导致正在运行事务非正常中断,从而破坏数据库的一致性。严重情况下,破坏数据库,导致数据库中的全部或部分数据丢失数据库恢复概述DBMS对故障的对策(数据库恢复技术)DBMS提供恢复子系统整个系统代码的百分之十以上。保证故障发生后,能把数据库中的数据从错误状态恢复到某种逻辑一致的状态,保证事务ACID特性。恢复技术是衡量系统优劣的重要指标10.3故障的种类故障的种类事务内部的故障系统故障介质故障计算机病毒事务内部的故障什么是事务故障某个事务在运行过程中由于种种原因未运行至正常终止点就夭折了事务故障的常见原因输入数据有误运算溢出违反了某些完整性限制某些应用程序出错并行事务发生死锁事务内部的故障事务故障的危害发生事务故障时,夭折的事务可能已把对数据库的部分修改写回磁盘。事务故障的恢复:事务撤消(UNDO)清除该事务对数据库的所有修改,使得这个事务象根本没有启动过一样。强行回滚(ROLLBACK)该事务。事务故障的恢复由DBMS自动完成。事务内部的故障CREATETABLEt1(aint,bintcheck(b2))事务内部的故障begintranINSERTINTOt1VALUES(1,5)INSERTINTOt1VALUES(2,0)committranSETXACT_ABORT当SETXACT_ABORT为OFF时,只回滚产生错误的SQL语句,而事务将继续进行处理(默认为OFF)。当SETXACT_ABORT为ON时,如果SQL语句产生运行时错误,整个事务将终止并回滚。系统故障什么是系统故障软故障(SoftCrash):指造成系统停止运转的任何事件,使得系统要重新启动。系统故障的常见原因操作系统或DBMS代码错误。操作员操作失误。特定类型的硬件错误(如CPU故障)。突然停电。系统故障系统故障的危害所有正在运行的事务都非正常终止内存中数据库缓冲区的信息全部丢失一些已经显示提交的事务,可能有一部分数据或全部数据留在缓冲区,尚未写入物理数据库中。一些没有完成的事务的结果可能已经送入物理数据库恢复策略:强行撤消(UNDO)所有未完成事务重做(REDO)所有已提交的事务AB回顾事务事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。如何定义事务事物的特性原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持续性(Durability)回顾事务故障某个事务在运行过程中由于种种原因未运行至正常终止点就夭折了事务故障的危害发生事务故障时,夭折的事务可能已把对数据库的部分修改写回磁盘。事务故障的恢复:事务撤消(UNDO)清除该事务对数据库的所有修改,使得这个事务象根本没有启动过一样。事务故障的恢复由DBMS自动完成。回顾系统故障软故障(SoftCrash):指造成系统停止运转的任何事件,使得系统要重新启动。系统故障的危害所有正在运行的事务都非正常终止。内存中数据库缓冲区的信息全部丢失。一些已经显示提交的事务,可能有一部分数据或全部数据留在缓冲区,尚未写入物理数据库中。一些没有完成的事务的结果可能已经送入物理数据库恢复策略:强行撤消(UNDO)所有未完成事务重做(REDO)所有已提交的事务介质故障什么是介质故障硬故障:指外存故障磁盘损坏磁头碰撞瞬时强磁场干扰介质故障使存储在外存中的数据部分丢失或全部丢失。介质故障比前两类故障的可能性小得多,但破坏性大得多。介质故障恢复策略装入数据库发生介质故障前某个时刻的数据副本重做自此时开始的所有成功事务,将这些事务已提交的结果重新记入数据库。故障的种类各类故障,对数据库的影响有两种可能性一是数据库本身被破坏。二是数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的。10.4恢复的实现技术恢复的实现技术数据库恢复的基本原理:冗余利用存储在系统其它地方的冗余数据来重建数据库中已被破坏或不正确的那部分数据数据库恢复的技术问题:1.如何建立冗余数据。2.如何利用这些冗余数据实施数据库恢复。如何建立冗余数据数据转储(backup)登录日志文件(logging)数据转储数据转储DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。一般分为两类:静态转储动态转储数据转储静态转储在系统中无运行事务时进行转储。优点:简单缺点:降低了数据库的可用性转储必须等所有事务结束。新的事务必须等转储结束。数据转储动态转储转储操作与用户事务并发进行。优点不用等待正在运行的用户事务结束。不会影响新事务的运行。动态转储的缺点:不能保证副本中的数据正确有效。数据转储需要把动态转储期间各事务对数据库的修改活动登记下来,建立日志文件。后备副本加上日志文件才能把数据库恢复到某一时刻的正确状态。动态转储转储完毕─┼────┼──────┼────┼TaTbTcTdA=100写入副本一事务把A改为200登记日志文件什么是日志文件日志文件(log)是用来记录事务对数据库的更新操作的文件。日志文件的格式以记录为单位的日志文件以数据块为单位的日志文件登记日志文件以记录为单位的日志文件日志文件内容:各个事务的开始标记,(形成一条记录)各个事务的所有更新操作,(形成一条记录)各个事务的结束标记,(形成一条记录)登记日志文件begintraninsertintosalesvalues('A0002',0,10);updatesalessetb=b-3whereid='A0001'committran以记录为单位的日志文件T0startT0,I,sales,null,('A0002',0,10)T0,U,salesb(id='A0001'),30,27T0commit登记日志文件日志文件登记原则。(1)登记的次序严格按并发事务执行的时间次序。(2)必须先写日志文件,后写数据库。10.5恢复的策略事务故障的恢复begintraninsertintosalesvalues('A0002',0,10);updatesalessetb=b-3whereid='A0001'updatesalesseta=a-3whereid='A0001'committran日志文件的内容T0startT0,I,sales,null,('A0002',0,10)T0,U,b(id=A0001),30,27故障发生事务终止事务故障的恢复恢复方法由恢复子系统应利用日志文件撤消(UNDO)此事务已对数据库进行的修改。事务故障的恢复步骤:1.反向扫描日志文件(后前),查找该事务的更新操作。2.将日志记录中“更新前的值”写入