数据库恢复技术.ppt

上传人:小飞机 文档编号:5985617 上传时间:2023-09-11 格式:PPT 页数:91 大小:365.50KB
返回 下载 相关 举报
数据库恢复技术.ppt_第1页
第1页 / 共91页
数据库恢复技术.ppt_第2页
第2页 / 共91页
数据库恢复技术.ppt_第3页
第3页 / 共91页
数据库恢复技术.ppt_第4页
第4页 / 共91页
数据库恢复技术.ppt_第5页
第5页 / 共91页
点击查看更多>>
资源描述

《数据库恢复技术.ppt》由会员分享,可在线阅读,更多相关《数据库恢复技术.ppt(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上增加100B+100=200

2、0+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,问会出现什么现象,原因是什么,如何解决?,操作f计算A和B的

4、总金额(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:=B+temp;write(B);,A-A*0.2,B

6、+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+100T2执行完毕: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是否都确保了事务的一致性和隔离性?,是,过程,A-A*0.2,B+A*0.2,A-100,B+100,在该调度2中,T

7、1,T2执行完毕后,账户A和账户B的值分别应该是多少?,T2执行完毕:A=A-A*0.2;B=B+A*0.2T1执行完毕: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作如下调度(调度3和调度4)并发执行,过程,A-100,B+100,A-A*0.2,B+A*0.2,调度3

8、是否确保了事务的一致性和隔离性?,确保了事务的一致性和隔离性(有交叉,但不干扰),在该调度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+A*0.2。,问:调度3与调度1是否等效(对外存中数据的影响),调度4与调度1、调度2呢,调度2与调度1呢?,称调度3与

9、调度1冲突等价,调度3与调度1等效,问:n个事务一共有多少种调度(包括串行和并发)?,要远大于n!.在这些调度中哪些是正确的,如何控制调度总是正确的?,可串行化判定,并发控制,下一章讲解,本节小结,什么是事务,有哪些特性?为什么要存在事务的并发执行?并发执行可能会破坏事务的哪些特性?,10.2.2冲突等价,比较调度3和4,是什么原因会导致事务间的干扰,从而破坏事务的隔离性?,不同事务对同一数据的读/写顺序的变化。,So,如果只考虑read()和write(),调度3可以简化为:,两个事务的并发调度有多种,问下面哪些调度与调度3可以等效?,1、分别考查各个账户值的变化;2、考查总值是否一致。,等

10、效,不等效,等效,等效,不等效,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处理相同的数据项Q,则交换Ii与Ij会产生怎样的影响?分4种情况:,1、Ii=read(Q),Ij=read(Q),2、Ii=read(Q),Ij

11、=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是冲突可串行化的。,保证了事务的隔离性。,在事务的众多并发调度中,如何判断调度是可串行化的?,问题,什么是事务,有什么特性?事务为什么要并发执行?什么是冲突指令,什么是冲突等价?什么是冲突可串行化?,可串行化判定,设S是一个调度

12、,由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必然出现Tj在之前。,例如:,存在环路,结论:,如果对调度的有向图进行拓扑排序,若没有环路,则调度可以串行化,否则就不能串行化。,前面内容总结:,转帐问题,在事务的并发执行的分析过程中,我们一直基于一个假设

13、,是什么?,假设事务总是能够无故障的执行。,现在对前面2个事务,考察下面一个调度:,1、根据事务的原子性,T1由于故障而失败,应该怎样处理T1已经产生的影响?,2、根据事务的一致性,T1由于故障而失败,应该怎样处理T2,能够做到吗?,撤销(回滚)T1所造成的影响,撤销T2,而且由于T2没有完成(或提交)可以撤销(回滚)。,考查另一个调度:,此时,称调度3为可恢复调度。,1、根据原子性,T1由于故障而失败,应该怎样处理T1已经产生的影响,根据事务的一致性,应该怎样处理T2?,2、T2已经完成(提交),根据事务的持续性,T2能撤销吗?,都必须撤销(回滚)。,不能,在怎样的调度中,事务能够撤销?,称

14、调度5为不可恢复调度。,结论:,可恢复调度,在一个调度S中,存在两个事务Ti和Tk,如果Tk读取了由Ti所写的数据项,并且Ti先于Tk完成(提交),称调度S为可恢复调度,为什么?,考查下一个调度:,假设在T1执行过程中出现故障,哪些事务需要撤销?,都需要撤销(回滚),这种现象称为级联回滚,如何避免级联回滚?,对于存在于一个调度S中的两个事务Ti和Tk,Tk读取了Ti所写的数据项,如果Ti在Tk进行读取前已经提交(完成),就可以避免出现级联回滚,此时称S为无级联调度。,在事务的调度中要避免级联调度,由并发控制机制来实现。,事务小结,事务的讲解总线如下:,转账问题,调度的可恢复性如何实现,数据库如

15、何从故障中恢复?,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恢复技术,从事务的特性来看,发生故障后,需要恢复数据库的主要原因是什么?,破坏了事务的原子性和持续性。,现在考查一个简单的能够保持事务的原子性和持续性的方案。,假设在该方案中,将数据库看作是磁盘上的一个文件,并且在磁盘上维护一个指针(db_pointer),它指向数据库的当

17、前备份,并假设在某一时刻只有一个活动事务。,该方案的执行过程如下:,1、事务一开始执行,就给数据库创建一个新的备份,并使指针db_pointer指向数据库的新备份,如下图所示。,2、若事务成功的执行,db_pointer指向新的备份,并把db_pointer写到磁盘,删除旧的备份,此时说事务已提交了。,3、若事务失败,db_pointer指向数据库旧的备份,并删除新的备份。,对事务失败作进一步分析:,若故障:1 发生在更改db_pointer之前;,2发生在更改db_pointer之后,保存db_pointer之前;,db_pointer指向旧的备份,通过删除新的备份来中止事务。,db_poi

18、nter指向旧的备份,通过删除新的备份来中止事务。,db_pointer的原子性由磁盘系统提供。,3、系统故障 发生在保存db_pointer之后;,事务已经提交,db_pointer指向新的备份。,该方案称为影子拷贝方案。简单但不实用,该方案说明的问题是什么?,1某一时刻只存在一个活动事务;2整个数据库都需要备份。,1 恢复数据库需要冗余数据如何建立冗余数据。2 如何利用冗余数据来恢复数据库?,1、基于日志的恢复,日志是日志记录的序列,它记录了数据库中的所有更新活动,一旦出现故障,系统就利用日志记录来进行恢复。,因此对于一个更新活动,如何能正确的标识,即需要记录更新活动的哪些内容,以便可以从

19、日志中恢复?,谁做的更新事务的标识,对谁做的更新数据项的标识,做了哪些更新数据项的旧值和新值,更新状态事务的状态,因此一个日志记录包括的内容如下:,事务Ti已经中止。,事务Ti已经开始对数据项Xj执行写操作。写之前Xj的值是V1,写之后Xj的值是V2。,事务Ti已经提交。,事务Ti已经开始。,问题:在事务执行过程中,系统一方面要执行事务,另一方面要写日志,系统写日志的时机应该是什么?,延迟的数据库修改,可分为:,先将事务的状态和要更新的数据值写到日志,然后再把数据写到数据库。,立即的数据库修改,系统边写日志边执行事务。,延迟的数据库修改,假设在一个银行系统中,有账户A、B、C,它们初始值分别为

20、1000,2000,1700,现在有两个事务T1,T2如下:,T1:read(A);A:=A-100;write(A);read(B);B:=B+100;write(B);,T2:read(C);C:=C-300;write(C);,假设这两个事务串行执行,先执行T1,后执行T2。日志内容,和数据更新时间如下:,在日志中仅出现数据项的新值可以吗,这种方法会发生怎样的情况,该如何处理?,由于事务在执行时,先写日志,在事务部分提交时,才真正更新数据库,故不论数据库是否更新,日志中总是体现该事务对数据库的影响。,从三个方面考虑:,1、写日志的过程中,出现故障;,3、数据库更新失败,则事务中止,日志不

21、能正确反映数据库的状态。该如何恢复?,2、若数据库更新成功,则事务成功提交,日志正确。,日志内容不完整(没有commit记录),数据库数据一定没有更新。只需删除该日志记录。,一切正常。,此时采用redo(重做)恢复,也就是重启系统后,根据日志中的新值,来重新更新数据库的值,如上例,系统重启后的日志和数据库的值如下。,数据库根据日志更新数据A=900B=2100C=1400,可见,日志中只有更新的数据时,可用redo来进行恢复。,立即的数据库修改,先写更新日志,接着马上更新数据库。这种方法会发生怎样的情况,该如何处理?,1、事务成功的提交。,2、有一个更新只写了日志,但数据库没有更新(故障)。,

22、3、其中一个更新写了日志,数据库也更新了,接下来出现故障,后面的操作(更新)不能进行。,正常,日志不完整(没有commit部分),删除该更新的日志记录。,日志不完整,需要还原数据库的更新,该如何操作?,采用undo操作,数据库根据日志还原数据A=1000B=2000C=1700,redo和undo,单纯地从日志内容的角度出发,什么时候使用redo或undo?,若事务的日志有说明事务已经成功执行,恢复时使用redo;反之,若事务的日志没有说明事务失败,恢复时使用undo,对数据库更新做逆操作。,问题,数据库系统的日志量有多大?,跟事务的多少有关,当事务的数目非常多时,在进行恢复时需要处理大量的日

23、志具有检查点的恢复技术。,具有检查点的恢复技术,在事务运行过程中,将某一个时刻T看作是分界点,在T以后没有提交的事务执行undo,在T以后提交了的事务执行redo。,如下图所示,哪些事务需要redo 操作,哪些事务需undo 操作,哪些事务两者都不需要:,两者都不需要,redo,undo,redo,undo,恢复时,逆向读日志到tc时刻即可,提高了效率。,基于日志的恢复小结,根据日志的记录来恢复数据库,根据写日志和更新数据库的时机不同可分为延迟的数据库修改和立即的数据库修改。,redo 和undo,基于日志的恢复主要考虑故障导致事务中止,进而导致不一致性,如果是介质故障,即使事务正常提交,也会

24、导致数据库系统崩溃,此时该如何处理?,转存是指DBA定期地将整个数据库复制到另外一个磁盘上保存起来的过程。目的:一旦由于介质故障导致数据破坏,就可以从备份中还原数据。,2、数据转储,根据进行转储时,系统是否可以执行事务,把转储方法分为两类:静态转储和动态转储。,静态转储,停止所有事务,开始转储,转储过程,转储结束,继续事务,执行事务,故障发生,重新装入副本,装副本过程,副本装入完毕,开始重新运行事务,在Tb之后需要有日志,动态转储,开始转储,转储过程,转储结束,执行事务,故障发生,重新装入副本,装副本过程,副本装入完毕,重新运行Ta之后的事务,在Ta之后需要有日志,恢复策略,在系统发生故障时,

25、如何利用恢复技术进行数据库恢复?主要从3个角度进行介绍:,事务故障,系统故障,介质故障,事务故障的恢复,恢复的步骤是怎样的?,1、反向扫描日志,查找该事务的更新操作。,2、对该更新操作做逆操作。,3、继续反向扫描日志,查找该事务的其他更新操作,并进行步2。,4、直至读到该事务的开始标记。,系统故障的恢复,从事务的角度,数据库的不一致性体现在哪两个方面?,1、事务失败;,2、事务成功,但更新数据库失败;,针对这两方面的原因,恢复策略如下:,1、正向扫描日志文件。,2、对于既有开始,又有commit(提交)记录的事务放入redo队列。,3、对于只有开始,没有commit(提交)记录的事务放入und

26、o队列。,4、对于在redo队列中的事务,作redo操作;对于在undo队列中的事务,作undo操作。,介质故障的恢复,数据文件被破坏。恢复过程如下:,1、装入最近的副本;,2、利用日志redo或undo副本后的事务。,注意:1、采用动态转储技术或静态转储技术产生副本,恢复时应分别从何处开始redo或undo事务。2、数据库文件、日志文件和副本文件不要放在同一个介质里。,10.4事务的SQL语句实现或描述(选讲),事务的开始:,BEGIN TRANS(ACTION),事务的提交:,COMMIT TRANS(ACTION),事务的撤销:,ROLLBACK TRANS(ACTION),一个事务:,

27、BEGIN TRANSACTIONUPDATE studentSET s_no=340002WHERE s_no=101021IF(error0)ROLLBACK TRANSACTIONUPDATE s_cSET s_no=340002,WHERE s_no=101021IF(error0)ROLLBACK TRANSACTIONCOMMIT TRANSACTION,注意:,在SQL中事务有隐式和显式之分。,隐式事务,1、UPDATE table 2、DELETE table 等等,小到一个SQL语句就是一个事务,显式事务,显式的指明事务的开始(BEGIN TRANSACTION)和结束(COMMIT TRANSACTION),只有事务对数据库进行了修改(更新,添加,删除)时,数据库系统才把事务的活动写入日志。,本章小结,事务的概念、特性,事务的并发执行,可串行化,可串行化判定,事务状态,故障的种类,恢复技术,恢复策略,课堂练习,1、事务故障、系统故障和介质故障分别会破坏事务的哪些特性?,2、事务的部分提交状态是指什么状态,若事务进入部分提交状态,然后再进入中止状态,此时该如何恢复数据库?,3、如何判定一个调度是否为可串行化?,4、对于系统故障,该如何进行恢复?,作业:P289 T1,2,3,5,9,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号