数据库并发控制和封锁协议分析.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据库并发控制和封锁协议分析

数据库并发控制和封锁协议分析   [摘要] 数据库可以提供给多个用户共享数据信息资源,所以就必须对并发的事务进行控制,这种并发控制必须引入一些封锁协议以保证数据的完整性。本文针对数据库并发操作中可能产生的数据不一致性问题进行分析,并给出解决的方法。   [关键词] 数据库 并发控制 一致性 封锁 封锁协议      一、引言   目前主流的关系数据库通常都允许多个用户同时使用和共享,所以也都具有并发控制的机制,也就是控制数据库,防止多用户并发使用数据库时造成数据错误和程序运行错误,以保证数据的完整性。   二、事务与并发控制的概念   当多用户并发存取数据时,就会产生多个事务同时存取同一数据的情况,从而引起严重的数据错误和程序运行错误。   那么我们来看,什么是事务及并发控制呢?   事务就是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的很小的工作单位。例如,在SQL语言中,定义事务的语句有三条:   BEGIN TRANSACTION;   COMMIT;   ROLLBACK;   其中的BEGIN TRANSACTION是事务开始的标记,而以COMMIT或者ROLLBACK结束,COMMIT用于提交事务的所有操作,ROLLBACK则在事务运行过程中一旦发生了某种故障而使事务无法继续执行的时候,系统就将事务中对数据库的所有刚刚完成的操作全部撤消,滚动回到事务开始时的状态。   为了充分利用系统资源,使数据库的共享资源得以有效利用,必须可以使多个事务并行的执行,而数据库对并行执行的事务进行的控制就是并发控制。   三、事务进行并发操作可能引起的数据不一致问题   由于种种原因,都可能引起数据库的数据遭到破坏,比如多个事务在并行运行的时候,不同的事务的操作产生了交叉执行,或者,事务在运行过程中被强行停止或者中断。   因此,事务在进行并发操作的时候很可能引起数据的不一致,下面我们看一个具体的例子。例如飞机票的联网销售系统,如果有以下的操作序列:   1.甲售票处(设置为T1事务)读出某班次的机票剩余数A,设A=20   2.乙售票处(设置为T2事务)读出同班次的机票剩余数A,也是20 ?? 3.甲售票处(T1事务)卖出一张机票,修改剩余数减一(A←A-1),把A=19写回数据库中   4.乙售票处(T2事务)也卖出一张机票,修改剩余数减一(A←A-1),把A=19写回数据库中   从这些操作中,我们看到,乙售票处的修改数据覆盖了甲售票处修改的数据,实际发生了两张机票的销售,而数据库中却错误的存入19,少了一张。参看图1的情况。   这种情况是并发操作引起数据不一致的第一种情况,叫做丢失修改(Lost Update),第二种是不可重复读(Non-Repeatable Read),第三种是读“脏”数据(Dirty Read)。   下边看第二种情况,不可重复读是指事务T1读数据以后,T2执行更新操作,就使T1无法再现原先读取的数据,得到与上一次不同的结果,例如图2。   读“脏”数据是指T1修改某数据并将其写回数据库,T2读取同一数据后,T1由于某种原因被撤消,T1执行回滚,恢复到原始的数据,T2就读取到了过程中的一个作废的数据,这个数据就是一种垃圾数据,称之为“脏”数据,也是不正确的。参看图3。   从以上例子我们看到,数据不一致性的主要原因就是并发操作没有对事务进行一定的隔离,所以,正确的调度应该使一个用户的事务不受到其他事务的干扰,从而避免数据的不一致性。   四、在并发控制中采用封锁协议解决数据的不一致性   并发控制的主要方法是封锁(Locking)。就是要用正确的方式调度并发操作,使一个用户的事务在执行过程中不受其他事务的干扰,从而避免造成数据的不一致性。   封锁是使事务对它要操作的数据有一定的控制能力。封锁通常具有3个环节:第一个环节是申请加锁,即事务在操作前要对它将使用的数据提出加锁申请;第二个环节是获得锁,即当条件成熟时,系统允许事务对数据进行加锁,从而事务获得数据的控制权;第三个环节是释放锁,即完成操作后事务放弃数据的控制权。   基本的封锁类型有以下两种:   1.排它锁(Exclusive Locks,简称X锁)   排它锁也称为独占锁或写锁。一旦事务T对数据对象A加上排它锁(X锁),则只允许T读取和修改A,其他任何事务既不能读取和修改A,也不能再对A加任何类型的锁,直到T释放A上的锁为止。   2.共享锁(Share Locks,简称S锁)   共享锁又称读锁。如果事务T对数据对象A加上共享锁(S锁),其他事务只能再对A加S锁,不能加X锁,直到事务T释放A上的S锁为止。   在对数据进行加锁时,另外需要约

文档评论(0)

189****7685 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档