Blocking locks
SET LINESIZE 300 SET PAGESIZE 9999 SET VERIFY off SELECT SUBSTR(s1.username,1,12) "WAITING USER" , SUBSTR(s1.osuser,1,8) "OS User" , SUBSTR(TO_CHAR(w.session_id),1,5) "Sid" , p1.spid "PID" , SUBSTR(s2.username,1,12) "HOLDING User" , SUBSTR(s2.osuser,1,8) "OS User" , SUBSTR(TO_CHAR(h.session_id),1,5) "Sid" , p2.spid "PID" FROM sys.v_$process p1 , sys.v_$process p2 , sys.v_$session s1 , sys.v_$session s2 , dba_locks w , dba_locks h WHERE h.mode_held != 'None' AND h.mode_held != 'Null' AND w.mode_requested != 'None' AND w.lock_type (+) = h.lock_type AND w.lock_id1 (+) = h.lock_id1 AND w.lock_id2 (+) = h.lock_id2 AND w.session_id = s1.sid (+) AND h.session_id = s2.sid (+) AND s1.paddr = p1.addr (+) AND s2.paddr = p2.addr (+) /
Blocking locks (RAC)
set linesize 500 set pagesize 9999 select /*+ ordered */ to_char(l.sid)|| ' - ' || to_char(w.sid) SID, 'DB instance: ' || trim(i.instance_name) || ' : blocking lock : ' ||trim(w.event) ||' - ' ||' WAITER: dbuser='|| ltrim(s.username) ||' sid='|| rtrim(ltrim(w.sid)) ||' ospid='|| rtrim(ltrim(p.spid)) ||' time_waited(s)='|| rtrim(ltrim(to_char(w.seconds_in_wait))) ||' program='|| rtrim(ltrim(s.program)) ||' machine='|| rtrim(ltrim(s.machine)) ||' - BLOCKER: dbuser='|| ltrim(s1.username) ||' sid='|| rtrim(ltrim(l.sid)) ||' ospid='|| rtrim(ltrim(p1.spid)) ||' program='|| rtrim(ltrim(s1.program)) ||' machine='|| rtrim(ltrim(s1.machine)) lock_desc, w.seconds_in_wait from gv$lock l, v$session s, v$process p, v$session_wait w, gv$session s1, gv$process p1, v$instance i where ( w.event = 'enqueue' or w.event like 'enq%' ) and w.state = 'WAITING' and w.p2 = l.id1 and l.block in (1, 2) and upper(l.type) in ('TM','TX','UL') and w.sid = s.sid and s.paddr = p.addr and l.sid = s1.sid and l.inst_id = s1.inst_id and s1.paddr = p1.addr and s1.inst_id = p1.inst_id order by s.sid, s.serial#;
Blocking session
select blocking_session, sid, serial#, wait_class, seconds_in_wait from v$session where blocking_session is not NULL order by blocking_session /