第13章 事务和锁.ppt

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

Oracle Database 11g:数据库管理 - 课堂练习 I 9-* DML 锁定 每个 DML 事务处理会获取两类锁定: 针对正在更新的一行或多行的 EXCLUSIVE 行锁定。 针对要更新的表的 ROW EXCLUSIVE 表级锁定。这可避免在进行更改时由另一会话锁定整个表(可能会删除或截断表)。 对表执行 ROW EXCLUSIVE 锁定时,会禁止 DDL 在未提交的事务处理中更改字典元数据。这样便可在事务处理的有效期内保持字典完整性和读取一致性。 Oracle Database 11g:数据库管理 - 课堂练习 I 9-* 锁定冲突 锁定冲突经常发生,但通常随着时间流逝,会通过入队机制得以解决。极少数情况下,锁定冲突可能需要管理员干预。如幻灯片所示,事务处理 2 在 9:00:00 对某一行获取了锁且忘记了提交,从而一直锁定。事务处理 1 在 9:00:05 尝试更新整个表,因此需要锁定所有行。但事务处理 2 会阻塞事务处理 1,直到在 16:30:01 提交事务处理 2 为止。 这种情况下,用户要尝试执行事务处理 1,就一定要与管理员联系以获得帮助,DBA 必须检测冲突并解决冲突。 Oracle Database 11g:数据库管理 - 课堂练习 I 9-* 锁定冲突的可能原因 锁定冲突的最常见原因是未提交更改,但存在一些其它可能原因: 长时间运行事务处理:许多应用程序使用批处理来执行批量更新。这些批作业通常会安排在没有用户活动或者用户活动少时执行,但是,有些情况下,批作业在用户活动少的期间内没有完成或要占用过长的时间来运行。同时执行事务处理和批处理通常会发生锁定冲突。 不必要的高锁定级别:并不是所有数据库都支持行级锁定(Oracle 在 1988 年的发行版 6 中添加了对行级锁定的支持)。某些数据库仍然在页级或表级上进行锁定。当开发人员编写要在许多不同数据库上运行的应用程序时,他们会人为地使用高锁定级别来编写应用程序,以便使 Oracle DB 与功能较少的数据库系统的操作方式相同。如果开发人员不熟悉 Oracle,有时也会以高于 Oracle DB 要求的锁定级别编写代码,其实这是不必要的。 Oracle Database 11g:数据库管理 - 课堂练习 I 9-* 检测锁定冲突 使用 Enterprise Manager 中的“Blocking Sessions(阻塞会话)”页可找出锁定冲突。有冲突的锁定请求以分层布局的形式显示,其中持有锁的会话位于顶部,下面是排队请求锁的所有会话。 对于冲突中涉及的每个会话,会显示用户名、会话 ID 和会话已等待的秒数。选择会话 ID 可查看会话当前正在执行或请求的实际 SQL 语句。 自动数据库诊断监控程序 (ADDM) 还会自动检测锁定冲突,并且会就低效的锁定趋势提出建议。 Oracle Database 11g:数据库管理 - 课堂练习 I 9-* 解决锁定冲突 要解决锁定冲突,持有锁的会话必须释放锁。让会话释放锁的最好方式是与用户联系,要求用户完成事务处理。 紧急情况下,管理员可以通过单击“Kill Session(终止会话)”按钮来终止持有锁的会话。请记住,终止会话后,当前事务处理中的所有工作都会丢失(回退)。会话终止后用户必须再次登录,然后重做终止会话后上次提交以来所做的所有工作。 如果用户的会话已终止,用户下次尝试发出 SQL 语句时会收到以下错误: ORA-03135: connection lost contact 注:如果会话出现空闲超时,PMON 会话检测程序会自动终止会话,这可以通过使用概要文件或资源管理器来完成。 Oracle Database 11g:数据库管理 - 课堂练习 I 9-* 使用 SQL 解决锁定冲突 与在 Enterprise Manager 中执行的大多数其它任务一样,会话操作也可以通过发出 SQL 语句来完成。v$session 表包含所有连接会话的详细信息。blocking_session 是阻塞会话的会话 ID。如果查询 SID 和 SERIAL#(其中 SID 与阻塞会话 ID 相匹配),则会提供执行 kill session 操作所需的信息。 注:可以使用数据库资源管理器自动注销阻塞其它会话的空闲会话。 Oracle Database 11g:数据库管理 - 课堂练习 I 9-* 死锁 死锁是锁定冲突的特殊情况。两个或更多会话等待被其中另一会话锁定的数据时,就会发生死锁。因为每个会话都在等待另一个会话释放锁定,所以任何一个会话都不能完成事务处理,也就不能解决冲突。 Oracle DB 会自动检测死锁并终止发

文档评论(0)

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

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

1亿VIP精品文档

相关文档