收藏 分享(赏)

CH10 事务管理与恢复.ppt

上传人:dreamzhangning 文档编号:5752443 上传时间:2019-03-15 格式:PPT 页数:79 大小:816.50KB
下载 相关 举报
CH10 事务管理与恢复.ppt_第1页
第1页 / 共79页
CH10 事务管理与恢复.ppt_第2页
第2页 / 共79页
CH10 事务管理与恢复.ppt_第3页
第3页 / 共79页
CH10 事务管理与恢复.ppt_第4页
第4页 / 共79页
CH10 事务管理与恢复.ppt_第5页
第5页 / 共79页
点击查看更多>>
资源描述

1、目 录,事务,10.1,并发控制,10.2,恢复与备份,10.3,问题背景,现实应用中,数据库的操作与操作之间往往具有一定的语义和关联性。数据库应用希望将这些有关联的操作当作一个逻辑工作单元看待,要么都执行,要么都不执行。 例10.1 飞机订票系统有两个表Sale和Flight,分别记录各售票点的售票数及全部航班的剩余票数:Sale(agentNo, flightNo, date, saledNumber)Flight(flightNo, date, remainNumber) 现有A0010售票点欲出售F005航班2008年8月8日机票2张。,问题背景,可编制如下程序:查询F005航班200

2、8年8月8日剩余票数A; (1)if (A2)拒绝操作,并通知票源不足;else更新A0010售票点的售票数;更新F005航班的剩余票数;,如何用SQL语句分别实现语句(1)和语句(2)?,语句(1)可用SQL语句表示为: SELECT remainNumberFROM FlightWHERE flightNo=F005 AND date=2008-08-08,问题背景,语句(2)是在当F005航班2008年8月8日的剩余票数大于请求票数时更新Sale和Flight表。该更新包括两个update操作:UPDATE SaleSET saledNumber=saledNumber+2WHERE a

3、gentNo=A0010 AND flightNo=F005 AND date=2008-08-08UPDATE FlightSET remainNumber=remainNumber2WHERE flightNo=F005 AND date=2008-08-08,如果第一个UPDATE语句执行成功,而第二个UPDATE语句执行失败,会发生什么问题呢?,问题背景,假设F005航班共有200个座位,2008年8月8日机票已售198张(其中被A0010售出20张),余票2张。 当第1个UPDATE语句执行成功时,即A0010已售票数更新为22。当系统发生故障重新提供服务时,如果又有售票点请求出售F

4、005航班2008年8月8日机票2张,由于F005的剩余票数未更新(仍为2),因此满足其要求又出售了2张。 结果多卖了2张票!,出现上述问题的原因是什么?,出现故障后,系统重新提供服务时数据库状态与现实世界状态出现了不一致。对于机票系统来说,一航班的剩余票数加上已售出票数应等于该航班全部座位数。而重新提供服务时,F005的已售票数与剩余票数之和为202(不等于200!),导致多买了2张。,问题背景,为解决上述问题,数据库管理系统引入了事务概念,它将这些有内在联系的操作当作一个逻辑单元看待,并采取相应策略保证一个逻辑单元内的全部操作要么都执行成功,要么都不执行。 对数据库用户而言,只需将具有完整

5、逻辑意义的一组操作正确地定义在一个事务之内即可。,事务概念,对于用户而言,事务是具有完整逻辑意义的数据库操作序列的集合。 对于数据库管理系统而言,事务则是一个读写操作序列。这些操作是一个不可分割的逻辑工作单元,要么都做,要么都不做。 事务是数据库管理系统中竞争资源、并发控制和恢复的基本单元。 它是由数据库操作语言(如SQL)或高级编程语言(如Java、C、C+)提供的事务开始语句、事务结束语句以及由它们包含的全部数据库操作语句组成。,事务结束语句,事务结束的两种类型: 事务提交(commit):将成功完成事务的执行结果(即更新)永久化,并释放事务占有的全部资源。 事务回滚(rollback):

6、中止当前事务、撤销其对数据库所做的更新,并释放事务占有的全部资源。,SQL Server事务模式,SQL Server数据库提供了三种类型的事务模式: 显式事务是指用户使用Transact-SQL事务语句所定义的事务,其事务语句包括: 事务开始:BEGIN TRANSACTION 事务提交:COMMIT TRANSACTION,COMMIT WORK 事务回滚:ROLLBACK TRANSACTION,ROLLBACK WORK 隐式事务是指事务提交或回滚后,系统自动开始新的事务。该类事务不需要采用BEGIN TRANSACTION语句标识事务的开始。 自动定义事务:当一个语句成功执行后,它被

7、自动提交,而当执行过程中出错时,则被自动回滚。,SQL Server事务定义举例,例10.2 利用SQL Server提供的显式事务模式定义例10.1中的数据库更新事务。BEGIN TRANSACTIONUPDATE SaleSET saledNumber=saledNumber+2WHERE agentNo=A0010 AND flightNo=F005 AND date=2008-08-08UPDATE FlightSET remainNumber=remainNumber-2WHERE flightNo=F005 AND date=2008-08-08COMMIT TRANSACTION

8、,事务特性,为了保证事务并发执行或发生故障时数据的完整性,事务应具有以下特性: 原子性(atomicity)。事务的所有操作要么全部都被执行,要么都不被执行。 一致性(consistency)。一个单独执行的事务应保证其执行结果的一致性,即总是将数据库从一个一致性状态转化到另一个一致性状态。 隔离性(isolation)。当多个事务并发执行时,一个事务的执行不能影响另一个事务,即并发执行的各个事务不能互相干扰。 持久性(durability)。一个事务成功提交后,它对数据库的改变必须是永久的,即使随后系统出现故障也不会受到影响。,DBMS保证事务特性措施,原子性也称为故障原子性或可靠性 由DB

9、MS通过撤销未完成事务对数据库的影响来实现。 一致性是指单个事务的一致性,也称为并发原子性或正确性 由编写该事务代码的应用程序员负责,但有时也可利用DBMS提供的数据库完整性约束(如触发器)的自动检查功能来保证。 隔离性也称为执行原子性或可串行化,可以看作是多个事务并发执行时的一致性或正确性要求 由DBMS的并发控制模块保证。 持久性则是利用已记录在稳固存储介质(如磁盘阵列)中的恢复信息(如日志、备份等)来实现丢失数据(如因中断而丢失的存放在主存中但还未保存到磁盘数据库中去的数据等)的恢复 它是由DBMS的恢复管理模块保证。,事务并发执行,数据库管理系统允许多个事务并发执行: 优点 增加系统吞

10、吐量(throughput)。吞吐量是指单位时间系统完成事务的数量。当一事务需等待磁盘I/O时,CPU可去处理其它正在等待CPU的事务。这样,可减少CPU和磁盘空闲时间,增加给定时间内完成事务的数量。 减少平均响应时间(average response time)。事务响应时间是指事务从提交给系统到最后完成所需要的时间。事务的执行时间有长有短,如果按事务到达的顺序依次执行,则短事务就可能会由于等待长事务导致完成时间的延长。如果允许并发执行,短事务可以较早地完成。因此,并发执行可减少事务的平均响应时间。 缺点 若不对事务的并发执行加以控制,则可能破坏数据库的一致性。,事务并发执行可能出现的问题,

11、读脏数据。如果事务T2读取事务T1修改但未提交的数据后,事务T1由于某种原因中止而撤销,这时事务T2就读取了不一致的数据。数据库中将这种读未提交且被撤销的数据为读“脏数据”。 丢失更新。两个或多个事务都读取了同一数据值并修改,最后提交事务的执行结果覆盖了前面提交事务的执行结果,从而导致前面事务的更新被丢失。,事务并发执行可能出现的问题,不可重复读。是指事务Ti两次从数据库中读取的结果不同,可分为三种情况: 事务Ti读取一数据后,事务Tj对该数据进行了更改。当事务Ti再次读该数据时,则会读到与前一次不同的值。 事务Ti按某条件读取数据库中某些记录后,事务Tj删除了其中部分记录。当事务Ti再次按相

12、同条件读取时,发现记录数变少了。(幻影现象1) 事务Ti按某条件读取数据库中某些记录后,事务Tj插入了新的记录。当事务Ti再次按相同条件读取时,发现记录数变多了。(幻影现象2),事务并发执行问题举例,例10.3 设A航班的剩余票数为10张,有两个事务T1和T2同时请求出售该航班机票2张和3张。它们各自的执行序列如图10-1所示(这里只考虑对航班剩余票数的更新)。,事务并发执行问题举例,如果是串行执行,则不管是T1先执行再执行T2(图10-2(a),还是T2先执行再执行T1(图10-2(b),都可得到正确的执行结果,即剩余票数都为5。,事务并发执行问题举例,读脏数据:在图10-3中,事务T1在T

13、2读取其更新值(8)后回滚,而T2仍然使用读到T1修改后的值进行运算,得到的结果是5。但实际上T1未执行成功,系统只出售了3张票,余票数应为7。,事务并发执行问题举例,不可重复读:如图10-4所示,T3第一次读时余票数为10张,第二次读时为8张,两次读结果不一致。,事务并发执行问题举例,丢失更新:在图10-5中,T1和T2都读到余票数为10,由于T1后于T2提交,导致T2的更新操作没有发生作用,被T1的更新值(8)覆盖。,是不是所有并发执行事务都会出现这些问题呢?,事务并发执行得到正确的结果,例10.4 设A和B航班的剩余票数分别为10和15,事务T4与T5并发执行。事务T4请求出售A航班机票

14、2张和B航班机票2张,事务T5请求出售A航班机票3张和B航班机票3张。它们的执行序列如图10-6所示。,可以验证图10-6中并发执行的结果与T4、T5按先后顺序串行执行的结果是一样的,也是正确的。,启示:如果一组并发执行事务的执行结果与它们串行执行得到的结果是相同的,那么就可以认为该并发执行的结果是正确的。,事务调度定义,事务并发执行顺序是随机的,将由多个事务操作组成的随机执行序列称为一个调度。 对由一组事务操作组成的调度序列而言,应满足下列条件:该调度应包括该组事务的全部操作;属于同一个事务的操作应保持在原事务中的执行顺序。,串行调度,定义10.1(串行调度) 在调度S中,如果属于同一事务的

15、操作都是相邻的,则称S是串行调度。 对由n个事务组成的一组事务而言,共有n!种有效串行调度。 事务串行执行可保证数据库的一致性,如果能判断一个并发调度的执行结果等价于一个串行调度的结果,就称该并发调度可保证数据库的一致性。,冲突操作与冲突等价,假设调度S包含两个事务Ti与Tj,若两个相邻操作OiTi,OjTj访问不同的数据对象,则交换Oi与Oj不会影响调度中任何操作的结果。若Oi与Oj访问相同的数据对象,并且有一个为写操作时,则不能改变它们被调度执行的顺序。 定义10.2 在一调度S中,如果Oi与Oj是不同事务在相同数据对象上的操作,并且其中至少有一个是写操作,则称Oi与Oj是冲突操作;否则称

16、为非冲突操作。 定义10.3 如果一调度S可以经过交换一系列非冲突操作执行的顺序而得到一个新的调度S,则称S与S是冲突等价的(conflict equivalent)。,冲突可串行化,定义10.4 如果一调度S与一串行调度是冲突等价的,则称S是冲突可串行化的(conflict serializable). 在图10-6的调度中,通过交互非冲突操作可得到图10-7所示的串行调度,故图10-6的调度是冲突可串行化的。,冲突可串行化,冲突可串行化仅仅是正确调度的充分条件,并不是必要条件,即冲突可串行化调度执行结果一定是正确的,而正确的调度不一定都是冲突可串行化的。,优先图,设S是一个调度。由S构造一

17、个有向图,称为优先图,记为G=(V, E),其中V是顶点集,E是边集。顶点集由所有参与调度的事务组成,边集由满足下列3个条件之一的边TiTj组成: Ti执行了Wi(Q)后Tj执行Rj(Q); Ti执行了Ri(Q)后Tj执行Wj(Q); Ti执行了Wi(Q)后Tj执行Wj(Q)。,冲突可串行化测试算法,对于得到的优先图,如果图中无环,则S是冲突可串行化的;如果有环,则S是非冲突可串行化的。 测试冲突可串行化的算法为: 构建S的优先图; 采用环路测试算法(如基于深度优先搜索的环检测算法)检测S中是否有环; 若S包含环,则S是非冲突可串行化的,否则调度S是冲突可串行化的。,目 录,事务,10.1,并

18、发控制,10.2,恢复与备份,10.3,并发控制概述,并发控制机制大体上可分为悲观的和乐观的两种。 悲观的并发控制方法认为数据库的一致性经常会受到破坏,因此在事务访问数据对象前须采取一定措施加以控制,只有得到访问许可时,才能访问数据对象,如基于封锁的并发控制方法。 乐观的并发控制方法则认为数据库的一致性通常不会遭到破坏,故事务执行时可直接访问数据对象,只在事务结束时才验证数据库的一致性是否会遭到破坏,如基于有效性验证方法。 本章介绍基于封锁的并发控制方法。,基于封锁方法的基本思想,基本思想:当事务T需访问数据对象Q时,先申请对Q的锁。如批准获得,则事务T继续执行,且此后不允许其他任何事务修改Q

19、,直到事务T释放Q上的锁为止。 基本锁类型: 共享锁(shared lock, 记为S):如果事务T获得了数据对象Q的共享锁,则事务T可读Q但不能写Q。 排它锁(eXclusive lock, 记为X):如果事务T获得了数据对象Q上的排它锁,则事务T既可读Q又可写Q。,锁相容性,“锁相容”是指如果Ti已持有数据对象Q的某类型锁后,事务Tj也申请对Q的封锁。如果允许事务Tj获得对Q的锁,则称事务Tj申请锁类型与事务Ti的持有锁类型相容;否则称为不相容。 基本锁类型的封锁相容性原则: 共享锁与共享锁相容 排它锁与共享锁、排它锁与排它锁是不相容的。,单个事务封锁举例,申请和释放锁操作: SL(Q)申

20、请数据对象Q上的共享锁; XL(Q)申请数据对象Q上的排它锁; UL(Q)释放数据对象Q上的锁。 例10.5 假设事务在访问完数据对象后立即释放锁,则添加了封锁操作的事务T4操作序列如图10-12所示。由于事务T4要对A、B进行读写操作,因此访问A和B之前都使用XL操作申请排它锁。这样事务T4在释放A(或B)的封锁之前,其他事务不能访问A(或B)。,封锁能否保证并发执行事务的冲突可串行化?,并发事务封锁举例,例10.6 考虑并发事务T1、T2和T3,它们申请锁和释放锁的规则是: 访问数据对象前根据操作类型申请锁; 访问完后立即释放锁; 当一个事务释放锁后,由等待时间较长的事务优先获得锁。 它们

21、的一个可能的并发执行过程如图10-13所示。,该调度存在什么问题?,并发事务封锁举例,该调度避免了丢失更新,即不会有多个写事务读取同一数据对象的相同值,因为一个数据对象任何时候只能有一个排它锁。,并发事务封锁举例,但仍然存在以下问题: 读脏数据。如T2在步骤11读了T1修改后的数据,而T1在步骤12需ROLLBACK。,并发事务封锁举例,但仍然存在以下问题: 不可重复读。如T3两次读到A的值不同。,并发事务封锁举例,但仍然存在以下问题: 不可串行化。无论如何交换非冲突操作,上述调度都不能等价于T1、T2和T3的任何一个串行调度。,出现上述问题的原因是事务过早释放了其持有的锁!,两阶段封锁协议,

22、两阶段封锁协议要求每个事务分两个阶段完成封锁操作:增长(申请锁)阶段和缩减(释放锁)阶段: 增长阶段:事务可以获得锁,但不能释放锁; 缩减阶段:事务可以释放锁,但不能获得新锁。 两阶段封锁协议能保证冲突可串行化。对于任何事务,调度中该事务获得其最后加锁的时刻(增长阶段结束点)称为事务的封锁点。这样,多个事务可以根据它们的封锁点进行排序,而这个顺序就是并发事务的一个冲突可串行化顺序。,两阶段封锁协议举例,例10.7 图10-14采用了两阶段封锁,允许事务T4在获得全部锁后(A和B上的排它锁)提前释放部分锁(如步骤7释放了A上的排它锁),事务T5得以提前执行,从而提高了事务T4和T5的并发度。,冲

23、突可串行化,它等价于串行调度。,两阶段封锁协议存在的问题,问题一:可能导致死锁 持有锁事务出现相互等待都不能继续执行。,两阶段封锁协议存在的问题,问题二:不能避免读脏数据(T2读取了T1的未提交更新结果),导致的后果是“级联回滚” !,两阶段封锁协议变体,对于级联回滚可以通过将两阶段封锁修改为严格两阶段封锁协议加以避免。 严格两阶段封锁协议除了要求封锁是两阶段之外,还要求事务持有的所有排它锁必须在事务提交后方可释放。这个要求保证了未提交事务所写的任何数据在该事务提交之前均以排它方式加锁,防止了其他事务读取这些数据。 另一个两阶段封锁的变体是强两阶段封锁协议,它要求事务提交之前不得释放任何锁(包

24、括共享锁和排它锁)。,目 录,事务,10.1,并发控制,10.2,恢复与备份,10.3,故障分类、特征及恢复策略,事务故障 事务在运行过程中由于种种原因,如输入数据的错误、运算溢出、违反了某些完整性限制、某些应用程序的错误以及并发事务发生死锁等,使事务未运行至正常终止点就夭折了,这种情况称为事务故障。 特征:系统的软件和硬件都能正常运行,内存和磁盘上的数据都未丢失和破坏。 恢复策略:强行回滚(ROLLBACK)夭折事务,清除其对数据库的所有修改,使得该事务好象根本没有启动过一样,称这类恢复操作称为事务撤销(UNDO)。,故障分类、特征及恢复策略,系统故障 该类故障是指系统在运行过程中,由于某种

25、原因,如操作系统或DBMS代码错误、操作员操作失误、特定类型的硬件错误(如CPU故障)、突然停电等造成系统停止运行,致使所有正在运行的事务都以非正常方式终止。 特征:数据库缓冲区的信息全部丢失,但存储在外部存储设备上的数据未被破坏。 恢复策略 UNDO所有未完成事务。 重做(REDO)所有已提交的事务。,故障分类、特征及恢复策略,介质故障 该类故障是指系统在运行过程中,由于某种硬件故障,如磁盘损坏、磁头碰撞,或操作系统的某种潜在错误,瞬时强磁场干扰等,致使存储在外存中的数据部分丢失或全部丢失。这类故障比前两类故障的可能性小得多,但破坏了磁盘上的数据,危害性最大。 特征:存储在外部存储设备上的数

26、据被破坏。 恢复策略:需要装入发生介质故障前某个时刻的数据库数据副本,并重做(REDO)自备份相应副本数据库之后的所有成功事务,将这些事务已提交的更新结果重新反映到数据库中去。,故障分类、特征及恢复策略,其它故障 黑客入侵、病毒、恶意流氓软件等引起的事务异常结束、篡改数据等不一致性。 特征:恶意破环。 恢复策略:通过数据库的安全机制、审计机制等实现对数据的授权访问和保护 。,小结,对于不同类型的故障在恢复时应做不同的恢复处理。 恢复的本质是利用存储的冗余数据(如日志、影子、备份副本等)来重建数据库中已经被破坏或已经不正确的那部分数据。 DBMS中的恢复管理模块由两部分组成: 正常事务处理过程中

27、:系统需记录冗余的恢复信息,以保证故障发生后有足够的信息进行数据库恢复; 故障发生后:利用冗余信息进行UNDO或REDO等操作,将数据库恢复到一致性状态。,事务访问数据方式,对于一个事务而言,它是通过三个地址空间同数据库进行交互: 保存数据库记录的磁盘块空间物理数据库; 缓冲区管理器所管理内存地址空间数据缓冲区; 事务的局部地址空间事务工作区。 数据元素A在不同地址空间之间移动的操作原语包括: INPUT(X):将包含数据库记录A的磁盘块X拷贝到数据缓冲区。 READ(A):将数据记录A从缓冲区拷贝到事务工作区。如果包含A的磁盘块X不在缓冲区中,则首先执行INPUT(X)操作。 WRITE(A

28、):将A的修改值从事务工作区拷贝到缓冲区X块中以替换A的值。如果此时X块不在内存缓冲区中,则应先执行INPUT(X)后再替换。 OUTPUT(X):将更新后的X块写回磁盘。,事务访问数据方式,更新磁盘块X中的数据记录A和读磁盘块Y的数据记录B的原语操作过程如图10-17所示。,注意的是发出这些命令的对象是不同的:READ和WRITE由事务发出,而INPUT和OUTPUT由缓冲区管理器发出。,事务访问数据方式,例10.8 考虑机票订票服务,假设某售票点某航班的已售出票数A为0,且该航班剩余票数B为10,则出售2张机票的事务T的逻辑步骤为:A=A+2; B=B-2。数据库的一致性约束为:AB10。

29、假设包含A和B的记录开始分别位于在X和Y磁盘块中,且都不在数据缓冲区中。T的一个可能操作序列为:,(1) INPUT(X); (2) READ(A); (3) A=A2; (4) WRITE(A); (5) INPUT(Y); (6) READ(B); (7) B=B-2 (8) WRITE(B); (9) OUPUT(X); (10) OUTPUT(Y),1. 执行完步骤10后 ,A=?B=?A+B=?,2. 执行完步骤9之前发生故障,A=?B=? A+B=?,3. 执行完步骤9之后,步骤10之前发生故障,A=? B=? A+B=?,将磁盘块X从外存读入数据缓冲区X,从数据缓冲区X读入记录(

30、数据项)A到事务工作区,将事务工作区的记录(数据项)A写回数据缓冲区X,将磁盘块Y从外存读入数据缓冲区Y,从数据缓冲区Y读入记录(数据项)B到事务工作区,将事务工作区的记录(数据项)B写回数据缓冲区Y,将数据缓冲区X的数据写回磁盘块X,将数据缓冲区Y的数据写回磁盘块Y,在事务工作区进行数据更新,在事务工作区进行数据更新,A=2 B=8 A+B=10,A=0 B=10 A+B=10,A=2 B=10 A+B=12,日志及特点,日志是DBMS记录数据库全部更新操作的序列文件。 主要特点有: 日志文件记录了数据库的全部更新顺序。 日志文件是一个追加(append-only)文件。 DBMS允许事务的

31、并发执行导致日志文件是“交错的”。 属于单个事务的日志顺序与该事务更新操作的执行顺序是一致的。 日志记录通常是先写到日志缓冲区中,然后写到稳固存储器(如磁盘阵列)中。在不影响讨论的情况下,本章假设日志记录在生成时是直接写到稳固磁盘中。,日志记录类型,数据库中的日志记录有两种类型: 记录数据更新操作的日志记录,包括UPDATE、INSERT和DELETE操作; 记录事务操作的日志记录, 包括START、COMMIT和ABORT操作。,日志记录格式,表示事务Ti对数据元素A执行了更新操作,V1表示A更新前的值(前映像), V2表示A更新后的值(后映像)。对于插入操作,V1为空;对于删除操作,V2为

32、空。 表示事务Ti已经开始。此时DBMS完成对事务的初始化工作,如分配事务工作区等。 表示事务Ti已经提交,即事务Ti已经执行成功(该事务对数据库的修改必须永久化)。事务提交时其更新的数据都写到了数据缓冲区中,但是由于不能控制缓冲区管理器何时将缓冲块从内存写到磁盘。因此当看到该日志记录时,通常不能确定更新是否已经写到磁盘上。 表示事务已经中止,即事务执行失败。此时,如果Ti所做的更新已反映到磁盘上,DBMS必须消除Ti对磁盘数据库的影响。,先写日志规则,为了保证数据库能运用日志进行恢复,要求日志文件必须放到稳固存储器(如磁盘阵列)上,并且要求每条日志记录必须在其所包含数据记录的更新值写到外存储

33、器之前先写到稳固存储器上,即先写(write-ahead)日志规则。,UNDO操作,对于要UNDO的事务T,日志中记录有以及T对数据库的所有更新操作的日志记录。 UNDO过程为:从T的最后一条更新日志记录开始,从日志尾向日志头(反向)依次将T更新的数据元素值恢复为旧值(V1)。 如果增加一条规则:T对数据库的所有更新值在日志写到磁盘前不能写到磁盘。这样,如果没有看到事务T 的日志记录,就可以确定T的更新值一定没有写到磁盘,从而可避免UNDO操作。,REDO操作,与UNDO相反,REDO操作是对已提交事务进行重做,将数据库状态恢复到事务结束后的状态。 对于要REDO的事务T,日志中已经记录了、T

34、的所有更新操作日志以及。 REDO过程为:从T的第一条更新日志记录开始,从日志头向日志尾(顺向)依次将T更新的数据元素值恢复为新值(V2)。 如果增加一条规则:事务对数据库的所有更新值必须在提交日志写到磁盘之前写到磁盘,就可以避免REDO操作。,基于日志恢复策略举例,例10.9 考虑订票事务T1和T2,除更新航班的剩余票数A外,还分别需更新售票点的售出票数X和Y。假设先执行T1,再执行T2,几种可能的日志记录如图10-18所示。,基于日志恢复策略举例,情形(a): T1完成WRITE(A)后系统发生崩溃。当系统重启动时,检查到有,但没有。因此恢复时执行UNDO(T1),将X和A的值分别恢复为0

35、和10。,基于日志恢复策略举例,情形(b) :T2完成WRITE(A)后系统发生崩溃。这时需分别执行两个恢复操作UNDO(T2)和REDO(T1),因为T1既有,又有日志,而T2只有日志。恢复完成后X、Y和A的值分别为2、0和8。,基于日志恢复策略举例,情形(c):T2完成提交后系统发生崩溃。这时也需执行两个恢复操作REDO(T1)和REDO(T2),因为T1和T2都有START和COMMIT日志。恢复完成后X、Y和A的值分别为2、3和5。,并发执行事务的基本恢复过程,三个阶段: 分析阶段:从日志头开始顺向扫描日志,确定重做事务集(REDO-set)和撤销事务集(UNDO-set)。将既有又有

36、日志记录的事务T加入REDO-set;将只有没有日志记录的事务T加入UNDO-set。 撤销阶段:从日志尾反向扫描日志,对每一条属于UNDO-set中事务的更新操作日志依次执行UNDO操作。 重做阶段:从日志头顺向扫描日志,对每一条属于REDO-set中事务的更新操作日志依次执行REDO操作。 UNDO与REDO必须是幂等的,即重复执行任意次的结果与执行一次的结果是一样的。,引入检查点目的,利用日志文件恢复主要有两个问题: 日志扫描过程太耗时。因为日志文件必须保存在磁盘中,而且随着时间的不断推进,日志文件在不断扩大,扫描的时间也就变得越来越长。 许多要求REDO事务的更新实际上在恢复时都写入了

37、磁盘的物理数据库中。尽管对它们做REDO操作不会造成不良后果,但会使恢复过程变得更长,导致数据库系统停止服务延长,从而降低了数据库的可用性。 为了减少扫描开销和提高恢复效率,引入了检查点技术。,检验点技术,检查点是周期性地向日志中写一条检查点记录并记录所有当前活跃的事务,为恢复管理器提供信息,以决定从日志的何处开始恢复。 检查点工作主要包括: 将当前位于日志缓冲区的所有日志记录输出到磁盘上; 将当前位于数据缓冲区的所有更新数据块输出到磁盘上; 记录日志记录并输出到磁盘上,其中L是做检查点时活跃事务的列表。,静态检查点技术,在检查点执行过程中,不允许事务执行任何更新动作,如写缓冲块或写日志记录,

38、称其为静态检查点技术。 如果事务T在做检查点之前就已提交,那么它的记录一定出现在记录前,并且其更新在做Checkpoint时都已写到磁盘中,因此不需要对T做任何恢复操作,这样可大大减少恢复工作量。 如果数据缓冲区及日志缓冲区中缓存的更新数据很多时,就会导致系统长时间不能接受事务处理,这对响应时间要求较严格的系统来说是不可忍受的。为避免这种中断,可使用模糊检查点(fuzzy checkpoint)技术,允许在做检查点的同时接受数据库更新操作。,基于检验点恢复方法,图10-19是系统崩溃时的不同事务状态类型,其中tc为完成最近检查点时刻,tf为故障发生时刻。,基于检验点恢复方法,T1类事务的更新在

39、做检查点之前已经写到磁盘上,故不用做任何恢复操作。,基于检验点恢复方法,T2类事务在tc前的更新已写到磁盘,故重做时只需根据tc之后的日志记录进行REDO即可。,基于检验点恢复方法,T3类事务为在tc之前开始且在tf之前仍未结束的事务,这类事务需要全部撤销。,基于检验点恢复方法,T4类事务为在tc之后开始且在tf之前已完成的事务,这类事务需要全部重做。,基于检验点恢复方法,T5类事务为在tc之后开始且在tf之前仍未完成的事务,这类事务应全部撤销。,目 录,事务,10.1,并发控制,10.2,恢复与备份,10.3,数据备份,数据备份(backup)是数据库管理系统用来进行介质故障恢复的常用方法。

40、它是由DBA周期性地将整个数据库的内容复制到其他外存储器上(通常为大容量的磁带或磁鼓)保存起来。,静态备份和动态备份,数据备份操作可分为静态备份和动态备份 静态备份是在系统中无运行事务时进行的备份操作。优点是简单。但由于备份必须等待用户事务结束后才能进行,而新的事务必须等待备份结束后才能执行,因此会降低数据库的可用性。 动态备份是指备份操作与用户事务的执行并发进行,备份期间允许对数据库进行存取或修改。动态备份克服了静态备份的缺点,它不用等待正在运行的用户事务结束,也不会影响新事务的运行。但它不能保证副本中的数据正确有效。,全备份与增量备份,具体进行数据备份时可以分全备份和增量备份。 全备份是指每次备份全部数据库,而增量备份是只备份上次备份后更新过的数据。 从恢复角度看,一般说来使用全备份得到的后备副本进行恢复会更方便些。但如果数据库很大,事务处理又十分频繁,则增量备份方式更实用更有效。 不管是那种形式的备份及介质故障的恢复处理,都需要DBA介入。由于备份又是十分耗费时间和资源的,不能频繁进行。所以DBA应该根据数据库使用情况确定适当的备份周期和备份方法。,本章结束!,请同学们对本章内容进行复习、总结!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报