网站大量收购闲置独家精品文档,联系QQ:2885784924

事务管理与恢复.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
并发事务封锁举例 但仍然存在以下问题: 读脏数据。如T2在步骤11读了T1修改后的数据,而T1在步骤12需ROLLBACK。 T1 XL(A) 等待 等待 等待 R(A) A=A-2 W(A) UL(A) ROLLBACK T2 XL(A) 等待 等待 等待 等待 等待 等待 等待 R(A) A=A-3 W(A) UL(A) COMMIT T3 SL(A) R(A) UL(A) SL(A) 等待 等待 等待 等待 等待 等待 等待 等待 R(A) UL(A) COMMIT 步骤 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 图10-14 T1、T2和T3上锁操作序列 并发事务封锁举例 但仍然存在以下问题: 不可重复读。如T3两次读到A的值不同。 T1 XL(A) 等待 等待 等待 R(A) A=A-2 W(A) UL(A) ROLLBACK T2 XL(A) 等待 等待 等待 等待 等待 等待 等待 R(A) A=A-3 W(A) UL(A) COMMIT T3 SL(A) R(A) UL(A) SL(A) 等待 等待 等待 等待 等待 等待 等待 等待 R(A) UL(A) COMMIT 步骤 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 图10-14 T1、T2和T3上锁操作序列 并发事务封锁举例 但仍然存在以下问题: 不可串行化。无论如何交换非冲突操作,上述调度都不能等价于T1、T2和T3的任何一个串行调度。 出现上述问题的原因是事务过早释放了其持有的锁! T1 XL(A) 等待 等待 等待 R(A) A=A-2 W(A) UL(A) ROLLBACK T2 XL(A) 等待 等待 等待 等待 等待 等待 等待 R(A) A=A-3 W(A) UL(A) COMMIT T3 SL(A) R(A) UL(A) SL(A) 等待 等待 等待 等待 等待 等待 等待 等待 R(A) UL(A) COMMIT 步骤 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 图10-14 T1、T2和T3上锁操作序列 两阶段封锁协议 两阶段封锁协议要求每个事务分两个阶段完成封锁操作:增长(申请锁)阶段和缩减(释放锁)阶段: 增长阶段:事务可以获得锁,但不能释放锁; 缩减阶段:事务可以释放锁,但不能获得新锁。 两阶段封锁协议能保证冲突可串行化。对于任何事务,调度中该事务获得其最后加锁的时刻(增长阶段结束点)称为事务的封锁点。这样,多个事务可以根据它们的封锁点进行排序,而这个顺序就是并发事务的一个冲突可串行化顺序。 两阶段封锁协议举例 [例10.8] 图10-15采用了两阶段封锁,允许事务T4在获得全部锁后(A和B上的排它锁)提前释放部分锁(如步骤7释放了A上的排它锁),事务T5得以提前执行,从而提高了事务T4和T5的并发度。 T4 XL(A) R(A) A=A-2 W(A) XL(B) UL(A) R(B) B=B-2 W(B) UL(B) T5 XL(A) 等待 等待 等待 等待 等待 R(A) A=A-3 W(A) XL(B) 等待 等待 UL(A) R(B) B=B-3 W(B) UL(B) 步骤 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 图10-15 T4和T5的两阶段封锁 冲突可串行化,它等价于T4,T5串行调度。 两阶段封锁协议存在的问题 问题一:可能导致死锁 持有锁事务出现相互等待都不能继续执行。 T4 XL(A) R(A) A=A-2 W(A) XL(B) (等待T6释放B上的排它锁) T6 XL(B) R(B) B=B-3 W(B) XL(A) (等待T4释放A上的排它锁) 图10-16 采用两阶段封锁时T4和T6出现死锁 两阶段封锁协议存在的问题 问题二:不能避免读脏数据(T2读取了T1的未提交更新结果) T1 R(A) A=A-2 W(A) ROLLBACK T2 R(A) A=A-3 W(A) T7 R(A) A=A-4 W(A) 图10-17 由于读脏数据引起的级联回滚 导致的后果是“级联回滚” ! 两阶段封锁协议变体 对于级联回滚可以通过将两阶段封锁修改为严格两阶段封锁协议加以避免。 严格两阶段封锁协议除了要求封锁是两阶段之外,还要求事务持有的所有排它锁必须在事务提交后方可释放。这个要求保证

您可能关注的文档

文档评论(0)

好文精选 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档