- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
管理数据并发处理 课程目标 学完本课后,应能完成以下工作: 描述锁定机制以及Oracle如何管理数据并发处理 监视和解决锁定冲突 锁 可防止多个会话同时更改同一数据。 是在指定语句的最低可能级别自动获取的。 不会升级。 锁定机制 高级数据并发处理: 执行插入、更新和删除时使用行级锁 查询不需要任何锁 自动队列管理 在事务处理结束(使用 COMMIT 或 ROLLBACK 操作)之前会一直保持锁定 示例 假设 employee_id 100 和 101 所在的行位于同一块中: 数据并发处理 数据并发处理完整备注页 DML 锁定 事务处理 1 事务处理 2 入队机制 入队机制用于跟踪: 等待锁的会话 请求的锁模式 会话请求锁的顺序 锁冲突 锁冲突的可能原因 未提交更改 长时间运行事务处理 不必要的高锁定级别 检测锁冲突 在“Performance (性能)” 页上选择“Block Sessions (阻塞会话)” 。 解决锁冲突 为了解决锁定冲突,您应该: 提交或回退持有锁的会话 终止持有锁的会话(在紧急情况下) 使用 SQL 解决锁定冲突 可以使用SQL 语句来确定阻塞会话并终止该会话。 死锁 小结 在本课中,应该已经学会如何: 描述锁定机制以及Oracle如何管理数据并发处理 监视和解决锁定冲突 练习概览:管理数据和并发处理 本练习包含以下主题: 找出锁定冲突 解决锁定冲突 Copyright ? 2009, Oracle. All rights reserved. [ Delete from Slide Master ] 9 - * 9 Copyright ? 2009, Oracle. All rights reserved. 事务处理 1 事务处理 2 SQL UPDATE employees 2 SET salary=salary*1.1 3 WHERE employee_id=100; SQL UPDATE employees 2 SET salary=salary+100 3 WHERE employee_id=100; 事务处理 1 事务处理 2 SQL UPDATE employees 2 SET salary=salary*1.1 3 WHERE employee_id=101; SQL UPDATE employees 2 SET salary=salary+100 3 WHERE employee_id=100; UPDATE hr.employees SET salary=salary+100 WHERE employee_id=xxx; 事务 x ... ... UPDATE hr.employees SET salary=salary+100 WHERE employee_id=102; 事务处理 3 UPDATE hr.employees SET salary=salary+100 WHERE employee_id=101; 事务处理 2 UPDATE hr.employees SET salary=salary+100 WHERE employee_id=100; 事务处理 1 时间: 09:00:00 每个 DML 事务处理必须获取两个锁: 针对正在更新的一行或多行的 EXCLUSIVE 行锁定 针对包含这些行的表的 ROW EXCLUSIVE (RX)模式下的表锁(TM) SQL UPDATE employees 2 SET salary=salary*1.1 3 WHERE employee_id= 106; 1 row updated. SQL UPDATE employees 2 SET salary=salary*1.1 3 WHERE employee_id= 107; 1 row updated. commit; 16:30:01 1 row updated. 会话继续进行 在最后 7.5 个小时里进行了许多选择、插入、更新和删除操作,但未提交,也未回退! 16:30:00 会话仍在等待! SELECT sum(salary) FROM employees; SUM(SALARY) ----------- 692634 9:00:05 UPDATE employees SET COMMISION_PCT=2 WHERE employee_id=10
文档评论(0)