第6节 管理数据库.ppt

  1. 1、本文档共89页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 1.封锁及锁的类型 所谓封锁就是当一个事务在对某个数据对象(可以是数据项、记录、数据集、以至整个数据库)进行操作之前,必须获得相应的锁,以保证数据操作的正确性和一致性。 封锁的3个环节:申请加锁,获得锁,释放锁。 基本的封锁类型有2种:排它锁(Exclusive Locks,也称X锁)和共享锁(Share Locks,也称S锁)。 6.4.3 封锁 * ①排它锁(Exclusive Lock) 排它锁又称写锁,简称为X锁,其采用的原理是禁止并发操作。 当事务T对某个数据对象R实现X封锁后,其他事务要等T解除X封锁以后,才能对R进行封锁。这就保证了其他事务在T释放R上的锁之前,不能再对R进行操作。 ② 共享锁(Share Lock) 共享锁又称读锁,,简称为S锁,其采用的原理是允许其他用户对同一数据对象进行查询,但不能对该数据对象进行修改。 当事务T对某个数据对象R实现S封锁后,其他事务只能对R加S锁,而不能加X锁,直到T释放R上的S锁。 这就保证了其他事务在T释放R上的S锁之前,只能读取R,而不能再对R作任何修改。 基本的封锁类型 * 封锁可以保证合理的进行并发控制,保证数据的一致性。 实际上,锁是一个控制块,其中包括被加锁记录的标识符及持有锁的事务的标识符等。 在封锁时,要考虑一定的封锁规则,例如,何时开始封锁、封锁多长时间、何时释放等,这些封锁规则称为封锁协议。 对封锁方式规定不同的规则,就形成了各种不同的封锁协议。 封锁协议在不同程序上对正确控制并发操作提供了一定的保证。 上面讲述过的并发操作所带来的丢失更新、污读和不可重读等到数据不一致性问题,可以通过三级封锁协议在不同程度上给予解决,下面介绍三级封锁协议。 2 .锁协议(Lock Protocol) * 一级封锁协议的内容是:事务T在修改数据对象之前必须对其加X锁,直到事务结束。 具体地说,就是任何企图更新记录R的事务必须先执行“XLOCK R”操作,以获得对该记录进行寻址的能力并对它取得X封锁。 如果未获准“X 封锁”,那么这个事务进入等待状态,一直到获准“X封锁”,该事务才继续做下去。 该事务规定事务在更新记录R时必须获得排它性封锁,使得两个同时要求更新R的并行事务之一必须在一个事务更新操作执行完成之后才能获得X封锁,这样就避免了两个事务读到同一个R值而先后更新时所发生的丢失更新问题。 ①一级封锁协议 * 利用一级封锁协议可以解决表4.5中的数据丢失更新问题,如表4.4所示。 事务T1先对R进行X封锁(XLOCK),事务T2执行“XLOCK R”操作,未获准“X封锁”,则进入等待状态,直到事务T1更新R值以后,解除X封锁操作(UNLOCK X)。 此后事务T2再执行“XLOCK R”操作,获准“X封锁”,并对R值进行更新(此时R已是事务T1更新过的值,R=900)。 这样就能得出正确的结果。 ①一级封锁协议(2) * 时间 事务T1 数据库中R的值 事务T2 t0 XLOCK R 1000 ? t1 FIND R ? ? t2 ? ? XLOCK R t3 R=R-100 ? WAIT t4 UPDATE R ? WAIT t5 UNLOCK X 900 WAIT t6 ? ? XLOCK R t7 ? ? R=R-200 T8 ? ? UPDATE R t9 ? 700 UNLOCK X ①一级封锁协议(3) 一级封锁协议只有当修改数据时才进行加锁,如果只是读取数据并不加锁,所以它不能防止“脏读”和“重读”数据。 * 二级封锁协议的内容是:在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后释放S锁。 所以二级封锁协议不但可以解决更新时所发生的数据丢失问题,还可以进一步防止“脏读”。 利用二级封锁协议可以解决表4.2中的数据“脏读”问题,如表4.5所示。 事务T1先对R进行X封锁(XLOCK),把R的值改为900,但尚未提交。这时事务T2请求对数据R加S锁,因为T1已对R加了X锁,T2只能等待,直到事务T1释放X锁。 ②二级封锁协议 * 之后事务T1因某种原因撤销,数据R恢复原值1000,并释放R上的X锁。事务T2可对数据R加S锁,读取R=1000,得到了正确的结果,从而避免了事务T2读取“脏数据”。 时间 事务T1 数据库中R的值 事务T2 t0 XLOCK R 1000 ? t1 FIND R ? ? t2 R=R-100 ? ? t3 UPDATE R ? ? t4 ? 900 SLOCK R t5 ROLLBACK ? WAIT t6 UNLOCK R 1000 S

文档评论(0)

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

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

1亿VIP精品文档

相关文档