v$lock中block的含义

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表示一个全局的潜在锁定冲突,对于查询阻塞没有什么意义

请使用浏览器的分享功能分享到微信等