v$lock的block列表明的是这个锁是否阻塞了其它的锁
block常见的取值有3个:
0 ->没有阻塞 block=0不是说没有锁,它表明的意思是它的锁占用并没有阻碍别人。也就是我占着这个锁资源,我也没妨碍你操作这块资源,这与锁类型有关。v$lock中并不是所有的id1都表示object_id,这也与锁类型有关。只有锁类型为'TM'时,id1才表示object_id,再例如当锁类型为'TS'时,此时的id1表示的是TS$的TS#这列。
1 ->正在阻塞,此时可以用如下的语句查一下谁阻碍了谁
SELECT L1.SID, ' IS BLOCKING ', L2.SID
FROM V$LOCK L1, V$LOCK L2
WHERE L1.BLOCK = 1
AND L2.REQUEST > 0
AND L1.ID1 = L2.ID1
AND L1.ID2 = L2.ID2;
2 ->这也是你遇到的,一般发生在rac或ops这样的环境,它表明这是一个全局的锁,RAC环境下GV$LOCK.BLOCK=2表示一个全局的潜在锁定冲突,对于查询阻塞没有什么意义
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/196700/viewspace-1177602/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/196700/viewspace-1177602/