|
果然好贴,看完这篇帖子,又认真的看了一下 oracle9i的 concept
针对于--jeffly73说的:
------------
为了方便地进行锁冲突的检测,希望在表(上)级能够标识行(下)级加锁的情况,这就引入了“意向锁”(intention lock mode)的概念。根据在行级要加S锁或X锁的不同,在表级相应的就有两种意向锁,即:如果事务要在行级获得S锁,它需要首先在表级获得意向共享锁(Intent Share Lock,IS锁);如果事务要在行级获得X锁,它需要首先在表级获得意向排它锁(Intent Exclusive Lock,IX锁)。
------------
有一些不同的理解,并做了实验,可能很简单,请指正:
oracle意向锁的加入,应该并不是为了方便的进行锁冲突检测,而是避免同时发生ddl操作
比如:table aaa(只包含temp一个字段) 有2行记录 1,2
1》首先在一个session中执行:select * from aaa for update
2》然后在另外一个session中执行:update aaa set temp=temp where temp=1 会锁住
3》但如果执行:update aaa set temp=temp where temp=3 就不会锁住
说明锁的检测主要是检测行级的冲突 其实表级的锁操作2,3是一样的,oracle dml锁遵循的原则是最小数据锁定(翻译可能不准确),不应该出现检查了表级锁就能确定本会话是否能对我所操作的记录可否操作,我理解是这个样子。
如果理解不对 请指正。 |
|