- 1、本文档共119页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ch07事务处理
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 7.2.3 多粒度封锁与意向锁 意向锁(Intention Lock) 以简化检查过程,IBM System R 中首先采用 意向锁的使用规定 对任一结点加锁时,必须先对它的上层结点加意向锁; 如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁。 在多粒度封锁中,要对一个数据对象加锁,必须先对这个数据对象的所有上级加相应的意向锁。 因此,在申请锁时:自上而下申请;释放锁时:自下而上释放。 * 7.2.3 多粒度封锁与意向锁 意向锁(cont.) 例:对任一元组 r 加X锁,先对关系R加意向锁 事务T要对关系R加X锁, 系统只要检查根结点数据库和关系R是否已加了不相容的锁。 不需要搜索和检查R中的每一个元组是否加了X锁。 * 7.2.3 多粒度封锁与意向锁 常用意向锁 意向共享锁(Intent Share Lock, IS锁) 如果对结点N加IS锁,表示它的某些子孙拟加或已加了S锁。 意向排它锁(Intent Exclusive Lock, IX锁) 如果对结点N加IX锁,表示它的某些子孙拟加或已加了X锁。 共享意向排它锁(SIX=S+IX, SIX锁) 如果对结点N加SIX锁,表示对结点N本身加S锁,并准备在它的某些子孙拟加或已加了X锁。 * 7.2.3 多粒度封锁与意向锁 带有意向锁的锁相容矩阵 其它事务已持有的锁 S锁 X锁 IS锁 IX锁 SIX锁 当前事务申请的锁 S锁 Yes No Yes No No X锁 No No No No No IS锁 Yes No Yes Yes Yes IX锁 No No Yes Yes No SIX锁 No No Yes No No Yes:表示相容的请求 No:表示不相容的请求 * 7.2.3 多粒度封锁与意向锁 例 无意向锁 有意向锁 T1 Table Row T2 X X? No X T1 Table Row T2 X IX? No T1 Table Row T2 X X? No X T1 Table Row T2 X IX X? No * 7.2.3 多粒度封锁与意向锁 * 7.2.3 多粒度封锁与意向锁 * 7.2.3 多粒度封锁与意向锁 具有‘意向锁’的多粒度封锁方法的优点 减少了加锁和解锁的开销 提高了系统的并发度 * 补充 在Oracle中,锁如何获得/释放 有一条扩充的SQL命令,事务可用来显式地获得封锁。 LOCK TABLE表[,表…] IN EXCLUSIVE MODE [NOWAIT]; SHARE SHARE UPDATE ROW EXCLUSIVE ROW SHARE * 补充 在Oracle中,锁如何获得/释放 X锁 获得 显式方式:LOCK TABLE命令 隐式方式:执行如下SQL命令: INSERT INTO表 …; UPDATE 表 …; DELETE FROM表 …; 释放 四种方式: COMMIT/ROLLBACK(即事务结束时); DDL操作; 程序终止运行; LOGOFF(即终止会话时) * 补充 在Oracle中,锁如何获得/释放 S锁 获得: 显式方式:LOCK TABLE命令 释放: 同X锁 SU锁 获得: 显式方式:LOCK TABLE命令 隐式方式:执行 SELECT … FOR UPDATE命令 释放: 同X锁 * 目录 Contents 7.1 数据库恢复 恢复的基本技术 日志结构与机制 更新事务的执行与恢复 各类失效的具体恢复对策 7.2 并发控制 并发控制概述 加锁协议 多粒度封锁
文档评论(0)