- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10数据库恢复技术
问题 就图书馆信息管理系统而言: 1、数据库系统是一个人使用,还是多个人同时使用?——共享 2、数据库系统是长时间使用,还是短时间使用? 3、系统在执行过程中,会不会出现故障? 4、出现故障的原因是什么,该如何处理? 主要内容 事务 概念,特性,并发执行,可串行化等 数据库恢复 故障的种类,恢复的实现技术和策略 10.1 事务 假设在一个银行系统中,有账户A和B, 开始账户A上有1000元,账户B上有2000元。 进一步分析 10.2 事务的并发执行 包括: 并发执行 可串行化 可串行化判定 本节小结 什么是事务,有哪些特性? 为什么要存在事务的并发执行? 并发执行可能会破坏事务的哪些特性? 问题 什么是事务,有什么特性? 事务为什么要并发执行? 什么是冲突指令,什么是冲突等价? 什么是冲突可串行化? 10.3数据库恢复技术 事务的状态 故障的种类 恢复技术和策略。 redo和undo 单纯地从日志内容的角度出发,什么时候使用redo或undo? 问题 数据库系统的日志量有多大? 基于日志的恢复小结 根据日志的记录来恢复数据库,根据写日志和更新数据库的时机不同可分为延迟的数据库修改和立即的数据库修改。 2、数据转储 转存是指DBA定期地将整个数据库复制到另外一个磁盘上保存起来的过程。 目的:一旦由于介质故障导致数据破坏,就可以从备份中还原数据。 静态转储 动态转储 10.3.4恢复策略 在系统发生故障时,如何利用恢复技术进行数据库恢复?主要从3个角度进行介绍: 事务故障的恢复 恢复的步骤是怎样的? 系统故障的恢复 介质故障的恢复 数据文件被破坏。恢复过程如下: 10.4事务的SQL语句实现或描述(选讲) 注意: 在SQL中事务有隐式和显式之分。 本章小结 事务的概念、特性 课堂练习 1、事务故障、系统故障和介质故障分别会破坏事务的哪些特性? 延迟的数据库修改 假设在一个银行系统中,有账户A、B、C,它们初始值分别为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。日志内容,和数据更新时间如下: 日志内容: T1start T1,A,900 T1,B,2100 T1commit T2 start T2,C,1400 T2 commit 数据库更新: A=900 B=2100 C=1400 在日志中仅出现数据项的新值可以吗,这种方法会发生怎样的情况,该如何处理? 由于事务在执行时,先写日志,在事务部分提交时,才真正更新数据库,故不论数据库是否更新,日志中总是体现该事务对数据库的影响。 从三个方面考虑: 1、写日志的过程中,出现故障; 3、数据库更新失败,则事务中止,日志不能正确反映数据库的状态。该如何恢复? 2、若数据库更新成功,则事务成功提交,日志正确。 日志内容不完整(没有commit记录),数据库数据一定没有更新。只需删除该日志记录。 一切正常。 此时采用redo(重做)恢复 也就是重启系统后,根据日志中的新值,来重新更新数据库的值,如上例,系统重启后的日志和数据库的值如下。 日志内容: T1start T1,A,900 T1,B,2100 T1commit T2 start T2,C,1400 T2 commit 数据库: A=1000 B=2000 C=1700 数据库根据 日志更新数据 A=900 B=2100 C=1400 可见,日志中只有更新的数据时,可用redo来进行恢复。 立即的数据库修改 日志内容: T1start T1,A,1000,900 T1,B,2000,2100 T1commit T2 start T2,C,1700,1400 T2 commit 数据库更新: B=2100 C=1400 A=900 先写更新日志,接着马上更新数据库。这种方法会发生怎样的情况,该如何处理? 1、事务成功的提交。 2、有一个更新只写了日志,但数据库没有更新(故障)。 3、其中一个更新写了日志,数据库也更新了,接下来出现故障,后面的操作(更新)不能进行。 正常 日志不完整(没有commit部分),删除该更新的日志记录。 日志不完整,需要还原数据库的更新,该如何操作? 采用undo操作 日志内容: T1start T1,A,1000,900 数据库: B=2000 C=1700 A=900 数据库根据 日志还原数据 A=1000 B=2000 C=1700 若事务的日志有T commit 说明事务已经成功执行,恢复时使
文档评论(0)