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

第14章数据库中并发控制.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
目标 事务的并发 在一般的数据库应用中,不太可能出现在一个时刻有且只有一个事务在操作数据库的情况,对于大多数数据库应用来说,往往都会出现两个或两个以上事务试图修改数据库中的同一个数据的情况,这种情况就被称为事务的并发。 事务并发带来的问题 锁与锁定 锁与锁定是实现并发控制的非常重要的技术。锁是多个用户能够同时操纵同一个数据源而不会出现数据不一致现象的重要保障,是防止其他事务访问指定的资源控制、实现并发控制的一种主要手段。如果一个数据库对象被添加了锁,则此数据库对象就有了一定的访问限制,也就是说对此数据库对象进行了锁定操作。所谓锁定是数据库用来同步多个用户对同一个数据库对象访问的一种机制。通过锁定可以阻止其他事务造成的负面影响,当事务不再依赖锁定的数据资源时,可以将锁释放。 锁定的流程图 锁的基本类型 独占锁 独占锁是对锁定的资源只允许进行锁定操作的事务使用的,独占锁又称为写锁,表示如果某事务在数据库对象A上加了独占锁,则只允许该事务对A进行操作,其他任何事务都既不能对A进行操作或者加锁,直到该事务释放A上的独占锁为止。这就确保不会同时有多个事务对同一数据库对象进行操作。 共享锁 共享锁是指对不更改或不更新数据的读取操作的事务使用的,共享锁又称为读锁,它是非独占的,允许多个并发事务读取其锁定的数据库对象。如果某个事务在数据库对象A上加了共享锁,则只允许该事务读取A但不能更改A。其他任何其他事务也可以同时对A进行读取操作,但不能更改A,这样就确保了多个事务可以对保护的数据库对象同时进行读操作,但不能同时进行写操作。 独占锁和共享锁锁定的示意图 锁定协议 一级锁定协议 事务在修改数据库对象A之前,必须先对其加独占锁,并直到事务结束时才释放该独占锁,如果事务仅仅是读取A,则不需要加任何锁。 二级锁定协议 二级锁定协议是在一级锁定协议的基础上,加上事务在读取A之前必须加共享锁,读完后立即释放共享锁。 三级锁定协议 三级锁定协议是在二级锁定协议的基础上,加上事务在读取A之前必须加共享锁,直到事务结束后才释放共享锁。 不同级别的锁定协议及其作用 活锁与死锁 活锁的例子 死锁的例子 死锁的预防 一次锁定法 该方法要求每个事务必须一次将所有要使用的数据库对象全部锁定,否则就不继续执行。在之前表14- 5中的例子中,如果事务T1一次就将数据库对象A1、A2全部都锁定的话,T1就会执行下去。T2开始是等待的,但在T1执行完毕释放锁之后,T2就可以锁定A1、A2了,也就可以执行下去了。 顺序锁定法 顺序锁定法要求预先对数据库对象规定一个锁定的顺序,所有事务都按这个顺序来实行锁定。在之前表14- 5中的例子中,规定锁定顺序是A1、A2,事务T1 和T2都按此顺序锁定,即T2也必须首先锁定A1。当T2请求锁定A1 时,由于A1被T1锁定,所以T2只能等待,当T1释放A1和A2上的锁后,T2就可以锁定A1了,也就可以执行下去了。 诊断与解除死锁 超时法 如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。超时法实现简单,但其不足也很明显。一是有可能误判死锁,当事务因为其他原因使得等待时间超过时限,系统会误认为发生了死锁。二是时限若设置的太长,死锁发生后不能及时发现。 顺序锁定法 该方法是用离散数学的图论来诊断死锁的方法。事务的等待图是一个有向图G=(T,U)。T为所数据库系统中正在运行的各个事务的节点的集合,U为有向边的集合,每条边表示事务等待的情况。如果T1事务等待T2事务,则在T1、T2节点之间就有一条从T1指向T2的有向边。事务等待图动态地反映了当前的各个事务之间的等待情况。 锁的粒度 依据数据库的结构层次,可以将锁的粒度从高到低依次划分为:数据库、表、记录、列。 Oracle中锁的分类 DDL锁(字典锁) DML锁(数据锁) Oracle中锁的级别 在Oracle中可以在数据库、数据表、数据表中的行这3个数据对象上使用锁,但不支持对数据表中的列使用锁。 数据库级别的锁 表级别的锁 行级别的锁 通过SQL*Plus检测与解决锁争用 在Oracle的会话中,sys用户可以通过查询与锁相关的视图来查看锁的信息,了解阻塞会话与被阻塞会话的sid、serial#、用户名及其所使用的DML操作语句等内容。 通过OEM检测与解决锁争用 在浏览器地址栏中输入:http://localhost:5500/em就会进入登陆界面 通过OEM检测与解决锁争用 通过OEM检测与解决锁争用 首先以sys用户并以sysdba身份登录OEM,进入“主目录”页面,在该页面中单击“性能”超链接,进入“性

文档评论(0)

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

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

1亿VIP精品文档

相关文档