- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(a) 串行调度策略,正确的调度 Slock B Y=B=2 Unlock B Xlock A A=Y+1 写回A(=3) Unlock A ? ? ? ? ? ? ? Slock A X=A=3 Unlock A Xlock B B=X+1 写回B(=4) Unlock B T1 T2 (b) 串行调度策略,正确的调度 ? ? ? ? ? ? ? Slock B Y=B=3 Unlock B Xlock A A=Y+1 写回A(=4) Unlock A SlockA X=A=2 Unlock A Xlock B B=X+1 写回B(=3) Unlock B ? ? ? ? ? T1 T2 (c) 不可串行化的调度 Slock B Y=B=2 ? ? Unlock B ? Xlock A A=Y+1 写回A(=3) ? ? ? Unlock A ? ? Slock A X=A=2 ? Unlock A ? ? ? Xlock B B=X+1 写回B(=3) ? Unlock B T1 T2 由于其执行结果与(a)、(b)的结果都不同,所以是错误的调度。 (d) 可串行化的调度 Slock B Y=B=2 Unlock B Xlock A ? A=Y+1 写回A(=3) Unlock A ? ? ? ? ? ? ? ? Slock A 等待 等待 等待 X=A=3 Unlock A Xlock B B=X+1 写回B(=4) Unlock B T1 T2 由于其执行结果与串行调度(a)的执行结果相同,所以是正确的调度。 8.5.6 两段封锁协议 在对任何一个数据进行读写操作之前,事务必须获得对该数据的封锁; 在释放一个封锁之后,事务不再获得任何其他封锁 遵守该协议的事务分为两个阶段:获得封锁阶段,也称为“扩展”阶段;释放封锁阶段,也称为“收缩”阶段 如果所有的事务都遵守“两段封锁协议”,则所有可能的并发调度都是可串行化的 T1 Lock A Lock B Lock C ┇ Unlock A Unlock B Unlock C T2 Lock A Lock B Unlock A Unlock B Lock C ┇ Unlock C 2PL not 2PL Growing phase Shrinking phase 本章小结 事务以及事务的四个性质 数据库的完整性 SQL中相应的权限授予语句 数据库数据的恢复原理、常用技术、故障类型和恢复方法 检查点技术 封锁操作以及封锁带来的问题 并发操作和可串行化 * * * * * * * * * * * * * * * * * * * * * * 8.5.1 并发操作引起的问题 丢失修改是指事务1与事务2从数据库中读入同一数据并修改 事务2的提交结果破坏了事务1提交的结果,导致事务1的修改被丢失。 并发操作带来的问题1——丢失修改 丢失修改是由于两个事务同时修改同一数据造成写—写冲突引起的。 T1 T2 ① 读A=16 ? ② ? ③ A←A-1 写回A=15 ? ④ ? ? 读A=16 ? ? ? ? A←A-1 写回A=15 8.5.1 并发操作引起的问题 并发操作带来的问题1——丢失修改 例:飞机订票系统中的一个活动序列: (1)甲售票点(甲事务)读出某一航班的机票余额A,设A=16。 (2)乙售票点(乙事务)读出同一航班的机票余额A,也为16。 (3)甲售票点卖出一张机票,修改余额A←A-1,A=15,把A写回数据库 (4)乙售票点也卖出一张机票,修改余额A←A-1,A也等于15,把A写回数据库 问题:明明卖了两张机票,结果数据库中机票余额只减少1。 8.5.1 并发操作引起的问题 时间 更新事务T1 数据库中A的值 更新事务T2 t0 ? 100 ? t1 READ(A) ? ? t2 ? ? READ (A) t3 A:=A-30 ? ? t4 ? ? A:=A*2 t5 WRITE(A) ? ? t6 ? 70 WRITE (A) t7 ? 200 ? 在时间t7丢失了事务T1的修改 并发操作带来的问题1——丢失修改 并发操作带来的问题2——读脏数据 事务1修改某一数据,并将其写回磁盘 事务2读取同一数据后 事务1由于某种原因被撤销,这时事务1已修改过的数据恢复原值 事务2读到的数据就与数据库中的数据不一致, 是不正确的数据,又称为“脏”数据。 8.5.1 并发操作引起的问题 读脏数据是由于一个事务读了另一个更新事务尚未提交的数据引起的,称为写—读冲突。 并发操作带来的问题2——读脏数据 时间 更新事务T1 数据库中A的值 读事务T2 t0 ? 100 ?
文档评论(0)