《王珊萨师煊课件第10章数据库恢复技术》由会员分享,可在线阅读,更多相关《王珊萨师煊课件第10章数据库恢复技术(91页珍藏版)》请在金锄头文库上搜索。
1、问题,就图书馆信息管理系统而言: 1、数据库系统是一个人使用,还是多个人同时使用?共享 2、数据库系统是长时间使用,还是短时间使用? 3、系统在执行过程中,会不会出现故障? 4、出现故障的原因是什么,该如何处理?,主要内容,事务 概念,特性,并发执行,可串行化等 数据库恢复 故障的种类,恢复的实现技术和策略,数据库恢复技术,假设在一个银行系统中,有账户A和B, 开始账户A上有1000元,账户B上有2000元。,A和B之间存在业务来往,需要从账户A上转100元到账户B上, 问这个转账过程的执行顺序是怎样的?,步骤1:从账户A上取100元,A-100=1000-100,步骤2:在账户B上增加100
2、B+100=2000+100,该过程简单吗,有问题吗?,10.1 事务,进一步分析,由于整个转帐过程在数据库系统中进行,假设当系统完成第1步,在进行第2步前,系统发生了问题(故障),导致转帐过程不能进行下去。,会发生什么现象?,A被减掉100,而B没有增加100,步骤1:从账户A上取100元,步骤2:在账户B上增加100,发生这种现象的原因是什么?,在转账过程中,步骤1和步骤2是相互独立的,没有相互约束。,解决方法是什么?,把步骤1和步骤2组合成一个不可再分的整体,在执行过程中,步骤1和步骤2要么都执行,要么都不执行。,原子化,是用户定义的一个数据库操作序列,这些操作要么 全做要么全不做,是一
3、个不可分割的工作单位。,事务:,即事务是访问并可能更新各种数据项的一个程序执行单元。,与程序的区别在于:一个程序可以包含多个事务。,10.1.1事务应该具有的特性,就前例而言: 1,首先明确,A和B在转账前后,两者的总金额应保持不变,为3000。前后一致性。,2,一旦转帐成功,数据更新已保存到磁盘中,该次转帐对数据的影响是否是持久的?,是,反映出这次操作(事务)对数据影响的持续性,3,若在A和B进行转帐的过程中,另外一个操作f要计算A和B的总金额。如果f恰好在步骤1完成后,步骤2开始前读取了A和B的数据,过程如下。,步骤1: A减100,步骤2: B加100,问会出现什么现象,原因是什么,如何
4、解决?,操作f计算A和B的总金额(1000-100)+2000=2900,如果把转账过程看作一笔业务,操作f也看作一笔业务,操作f读取了转账业务操作后的一部分数据和没有操作的一部分数据,即操作f受到了转账操作的干扰。,解决方法:将业务操作隔离(使事务不相互干扰)。,一致性(Consistency),原子性(Atomicity),持续性(Durability),隔离性(Isolation),简称:ACID特性,因此,事务应该具有的特性如下:,1,数据库系统是所有相关应用程序共享使用的,多个事务同时运行是事实,因此,事务的交叉运行是必然的。,数据库系统的并发控制机制,确保一致性和隔离性,2,事务在
5、执行过程中,可能由于用户或故障原因被强行停止。,数据库管理系统的恢复机制,确保原子性和持续性,如何保证事务的ACID特性,10.2 事务的并发执行,包括: 并发执行 可串行化 可串行化判定,10.2.1事务的并发执行,假设在一个银行系统中,有账户A和B,开始账户A上有1000元,账户B上有2000元。存在如下两个事务T1, T2 :,T1:read(A); A:=A-100; write(A); read(B); B:=B+100; write(B);,A-100,B+100,过程,T2:read(A); temp:=A*0.2 A:=A-temp; write(A); read(B); B:
6、=B+temp; write(B);,A- A*0.2,B+ A*0.2,过程,如果把事务的执行顺序称为调度。,为什么要存在调度?,下面T1,T2的调度(调度1和调度2)是串行的。,过程,A-100,B+100,A- A*0.2,B+ A*0.2,在该调度1中,T1,T2执行完毕后,账户A和账户B的值分别应该是多少?,T1执行完毕: A=A-100; B=B+100 T2执行完毕:A=A-A*0.2; B=B+ A*0.2,最终账户A和账户B的值分别应该是多少?,A=A-100-(A-100) *0.2; B=B+100+ (A-100) *0.2,该调度1是否都确保了事务的一致性和隔离性?,
7、是,过程,A- A*0.2,B+ A*0.2,A- 100,B+ 100,在该调度2中,T1,T2执行完毕后,账户A和账户B的值分别应该是多少?,T2执行完毕:A=A-A*0.2; B=B+ A*0.2 T1执行完毕: A=A-100; B=B+100,最终账户A和账户B的值分别应该是多少?,A=A-A*0.2 -100; B=B+100+ A*0.2,该调度2是否都确保了事务的一致性和隔离性?,是,依据:计算一下A和B操作前后的总值,问:两个事务一共有几种串行调度,若有n个事务呢?,2种 n!种,为了提高执行效率,减少与外设的交互时间,详细内容请参阅微机原理和操作系统相关内容。,对T1,T2
8、作如下调度(调度3和调度4)并发执行,过程,A-100,B+100,A- A*0.2,B+ A*0.2,调度3是否确保了事务的一致性和隔离性?,确保了事务的一致性和隔离性(有交叉,但不干扰),在该调度3中,T1,T2执行完毕后,账户A和账户B的值分别应该是多少?,A=A-100-(A-100)*0.2; B=B+ 100+(A-100)*0.2。,过程,A-100,B+100,A- A*0.2,B+ A*0.2,调度4是否确保了事务的一致性和隔离性?,破坏了事务的一致性和隔离性(有交叉,且干扰),在该调度4中,T1,T2执行完毕后,账户A和账户B的值分别应该是多少?,A=A-100; B=B+
9、 A*0.2。,问:调度3与调度1是否等效(对外存中数据的影响) ,调度4与调度1、调度2呢,调度2与调度1呢?,称调度3与调度1冲突等价,调度3与调度1等效,问:n个事务一共有多少种调度(包括串行和并发)?,要远大于n!.在这些调度中哪些是正确的, 如何控制调度总是正确的?,可串行化判定,并发控制,下一章讲解,本节小结,什么是事务,有哪些特性? 为什么要存在事务的并发执行? 并发执行可能会破坏事务的哪些特性?,10.2.2冲突等价,比较调度3和4,是什么原因会导致事务间的干扰,从而破坏事务的隔离性?,不同事务对同一数据的读/写顺序的变化。,So,如果只考虑read()和write(),调度3
10、可以简化为:,两个事务的并发调度有多种,问下面哪些调度与调度3可以等效?,1、分别考查各个账户值的变化; 2、考查总值是否一致。,等效,不等效,等效,等效,不等效,1、T2:read(A)不能在T1:write(A)之前执行,Why? 2、 T2:read(B)不能在T1:write(B)之前执行,Why? 3、 T1:read(B)可以在T2:write(A)之前或之后执行, Why?,该结论是否具有一般性?,结论:,现在考虑一个调度S,其中含有分别属于事务Ti和Tj的两个连续的指令Ii与Ij(i不等于j)。,若Ii与Ij处理不同的数据项,则交换Ii与Ij会产生怎样的影响?,若Ii与Ij处理
11、相同的数据项Q,则交换Ii与Ij会产生怎样的影响? 分4种情况:,1、 Ii =read(Q), Ij =read(Q),2、 Ii =read(Q), Ij =write(Q),3、 Ii =write(Q), Ij =read(Q),4、 Ii =write(Q), Ij =write(Q),不产生任何影响,结论:,1、Ii与Ij是不同事务在相同数据项上的操作,并且其中至少有一个是write指令时, Ii与Ij就说是冲突的。,2、如果调度S可以经过一系列非冲突指令交换变换成S,称 S和S是冲突等价的。,3、若调度S与一个串行调度冲突等价,称S是冲突可串行化的。,保证了事务的隔离性。,在事务
12、的众多并发调度中,如何判断调度是可串行化的?,问题,什么是事务,有什么特性? 事务为什么要并发执行? 什么是冲突指令,什么是冲突等价? 什么是冲突可串行化?,可串行化判定,设S是一个调度,由S构造一个有向图,称为优先图G=(V,E),V是顶点集,由所有参与调度的事务组成;E是有向边集,是满足下列三个条件之一的边TiTj组成:,1、在Tj执行read(Q)之前, Ti执行write(Q);,2、在Tj执行write(Q)之前, Ti执行read(Q);,3、在Tj执行write(Q)之前, Ti执行write(Q);,如果优先图中存在边TiTj ,则在任何等价于S的串行调度S中, Ti必然出现T
13、j在之前。,例如:,存在环路,结论:,如果对调度的有向图进行拓扑排序,若没有环路,则调度可以串行化,否则就不能串行化。,前面内容总结:,转帐问题,在事务的并发执行的分析过程中,我们一直基于一个假设,是什么?,假设事务总是能够无故障的执行。,现在对前面2个事务,考察下面一个调度:,1、根据事务的原子性,T1由于故障而失败,应该怎样处理T1已经产生的影响?,2、根据事务的一致性, T1由于故障而失败,应该怎样处理T2 ,能够做到吗?,撤销(回滚) T1所造成的影响,撤销T2 ,而且由于T2没有完成(或提交)可以撤销(回滚)。,考查另一个调度:,此时,称调度3为可恢复调度。,1、根据原子性,T1由于
14、故障而失败,应该怎样处理T1已经产生的影响,根据事务的一致性, 应该怎样处理T2?,2、 T2已经完成(提交) ,根据事务的持续性, T2能撤销吗?,都必须撤销(回滚) 。,不能,在怎样的调度中,事务能够撤销?,称调度5为不可恢复调度。,结论:,可恢复调度,在一个调度S中,存在两个事务Ti和Tk,如果Tk读取了由Ti所写的数据项,并且Ti先于Tk完成(提交),称调度S为可恢复调度,为什么?,考查下一个调度:,假设在T1执行过程中出现故障,哪些事务需要撤销?,都需要撤销(回滚),这种现象称为级联回滚,如何避免级联回滚?,对于存在于一个调度S中的两个事务Ti和Tk,Tk读取了Ti所写的数据项,如果
15、Ti在Tk进行读取前已经提交(完成),就可以避免出现级联回滚,此时称S为无级联调度。,在事务的调度中要避免级联调度,由并发控制机制来实现。,事务小结,事务的讲解总线如下:,转账问题,调度的可恢复性如何实现,数据库如何从故障中恢复?,10.3数据库恢复技术,事务的状态 故障的种类 恢复技术和策略。,10.3.1事务的状态,T1:read(A); A:=A-100; write(A); read(B); B:=B+100; write(B);,问:该事务从创建到成功执行完毕,要经历哪几个阶段?,开始执行,执行中,执行完毕。,若该事务在执行过程中出现故障,会发生怎样的情况?,执行失败,撤销事务回滚事
16、务。,成功执行后的事务称为已提交事务,此时事务处于提交状态。,未能成功完成执行的事务称为中止事务,此时事务处于失败状态。,术语:,事务开始执行,称事务处于活动状态。,事务的最后一条语句执行后,称事务处于部分提交状态。,事务失败后,事务回滚并且数据库已恢复到事务开始前的状态后,称事务处于中止状态。,事务状态间的转化如下:,此时数据还驻留在内存中,活动状态,10.3.2故障的种类,在使用计算机系统时常发生的故障有哪些?,系统故障,介质(磁盘)故障,计算机病毒,事务本身就是一段程序,它本身能否出现问题?,能事务故障,如何克服故障,恢复数据?,10.3.3恢复技术,从事务的特性来看,发生故障后,需要恢复数据库的主要原因是什么?,破坏了事务的原子性和持续性。,现在考查一个简单的能够保持事务的原子性和持续性的方案。,假设在该方案中,将数据库看作是磁盘上的一个文件,并且在