九.数据库保护.ppt

  1. 1、本文档共52页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
九.数据库保护

2.不可重复读问题 如图所示,T1需要两次读取同一个数据A,但是在两次读取操作的间隔中,另一个事务T2改变了A的值。从而使T1两次读取同一个数据A却读出了不同的值。事务T2干扰了事务T1的独立性。 3.读脏数据问题 如图所示,事务T1把A的值修改为80,但是还没有执行COMMIT操作,事务T2紧跟着读了未提交的值80。接着事务T1执行了ROLLBACK操作,把A的值恢复为100。而事务T2仍然在使用被撤销了的A值80。事务T2对A的读处理是无效的,它读取的是被丢弃的垃圾值。因此,在数据库技术中把未提交的随后又被撤销的数据称为“脏数据”。 9.3.3封锁与封锁协议技术 在数据库环境下,进行并发控制的主要方式是使用封锁机制. 封锁:就是事务T在对数据进行操作之前,先向系统申请对其进行加锁,此时不允许其它事务更新该数据,直到事务T释放该数据上的锁。 封锁类型 排它锁(又称写锁,简称X锁) 若事务T对数据对象A加上X锁,则其它事务不能在A上加任何类型的锁,此时,只允许事务T读取和修改A,直到T释放A上的锁。 共享锁(又称读锁,简称S锁) 若事务T对数据对象A加上S锁,则其它事务也可在A上加S锁,但不能加X锁,事务T和其它事务只能读取A,但不能修改A。 封锁类型的相容矩阵 封锁协议 在运用X锁和S锁为数据对象加锁时,还需要约定一些规则,如何时申请X锁或S锁、持锁时间、何时释放锁等。这些规则称为封锁协议或加锁协议(Locking Protocel)。 * 封锁级别 加锁 放锁 防止丢失修改 保证可重复读 不读“脏”数据 一级 事务T在修改数据A之前必须先对其加X锁 事务结束才释放X锁 可防止 不能保证 不能保证 二级 一级封锁协议加上事务T在读取数据A之前必须对其加S锁 读完后即可释放S锁 可防止 不能保证 能保证 三级 一级封锁协议加上事务T在读取数据A之前必须对其加S锁 事务结束才释放S锁 可防止 能保证 能保证 * 一级封锁协议例 Xlock A Read (A) A=10 A=A-5 Write(A) Commit Unlock A Xlock A Read (A) A=5 A=A-5 Write(A) Commit Unlock A 等待 等待 等待 等待 获得 Xlock A 事务T1 事务T2 没有丢失修改 READ(C,D) M=C+D READ(C,D) M=C+D READ(C,D) C=C+10 D=D+10 事务T1 事务T2 不可重复读 Write (D) Write (C) Xlock C Xlock D Unlock C Unlock D * 二级封锁协议例 READ(C,D) M=C+D READ(C,D) C=C+10 D=D+10 事务T1 事务T2 防止读“脏”数据 Write (D) Write (C) Xlock C Xlock D Unlock C Unlock D RollBack Slock C Slock D 等待 等待 等待 获得Slock C 获得Slock D Unlock C Unlock D READ(C,D) M=C+D READ(C,D) C=C+10 D=D+10 事务T1 事务T2 不可重复读 Write (D) Write (C) Xlock C Xlock D Unlock C Unlock D Slock C Slock D Unlock C Unlock D 等待 获得Xlock C 获得Xlock D READ(C,D) M=C+D Slock C Slock D Unlock C Unlock D 等待 获得Slock C 获得Slock D Commit Commit Commit * 三级封锁协议例 READ(C,D) M=C+D READ(C,D) C=C+10 D=D+10 事务T1 事务T2 可重复读 Write (D) Write (C) Xlock C Xlock D Unlock C Unlock D READ(C,D) M=C+D Slock C Slock D Unlock C Unlock D 等待 获得Xlock C 获得Xlock D 等待 Commit Commit 活锁:事务T1,T2申请数据对象A,T1先给A加锁,T1释放A上的锁后,事务T3又给A加锁,T2等待,这样,A始终被其他事务封锁,事务T2可能长时间得不到A,这种情况称为活锁。 避免活锁的方法:采用先来先服务的原则。 活锁与死锁 T1 XLOCK A T2 XLOCK A T3 XLOCK A A A已被封锁,不成功等待 A刚被释放,成功 A刚被T2 释放,成功 时间点 * 死锁 :事务T1已经封锁A,而又想申请封

文档评论(0)

wyjy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档