| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.server -> Blocking lock!
Hi
I use this query to check the blocking locks. SELECT DISTINCT o.object_name,
sh.username ||
'(' ||
sh.sid ||
')' Holder,
qh.sql_text htext,
sw.username ||
'(' ||
sw.sid ||
')' Waiter,
qw.sql_text wtext,
DECODE (
lh.lmode,
1, 'NULL',
2, 'row share',
3, 'row exclusive',
4, 'share',
5, 'share row exclusive',
6, 'exclusive'
) l_type
FROM all_objects o, v$session sw, v$lock lw, v$sqlarea qw,
v$session sh, v$lock lh, v$sqlarea qh
WHERE lh.id1 = o.object_id
AND lh.id1 = lw.id1
AND sh.sid = lh.sid
AND sw.sid = lw.sid
AND sw.sql_address = qw.address
AND sw.sql_hash_value = qw.hash_value
AND sh.sql_address = qh.address
AND sh.sql_hash_value = qh.hash_value
AND sh.lockwait IS NULL
AND sw.lockwait IS NOT NULL
It works fine when I test it. I set up a job in production. I cannot understand the first row of the following part. The second row is fine, which means WAITER is waiting for one row in table ROLE. I think Object Name should always appear in Waiter Text, since Waiter hungs for the HOLDER. But why in the first row I cannot find BU_EVENTLOG in Waiter Text?
Object Holder Waiter Name HOLDER Text WAITER Text L_TYPE----------- -------- -------------- -------- -------------
from Role from Role
where ( where (
Title = :1) Title = :1)
FOR UPDATE FOR UPDATE
ROLE ...(21) SELECT * ...(75) SELECT * row share
from Role from Role
where ( where (
Title = :1) Title = :1)
FOR UPDATE FOR UPDATE
Regards,
Bin
Received on Wed Aug 07 2002 - 21:06:39 CDT
![]() |
![]() |