Sessões bloqueadoras e bloqueadas no Oracle
[ad#texto]
Muitas vezes precisamos descobrir qual é a sessão bloqueadora e também qual é a sessão bloqueada no Oracle, isso é bem simples, veja o exemplo abaixo:
select 'SID ' || l1.sid ||' está bloqueando ' || l2.sid blocking
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;
Ainda é possível extrair mais informações acerca de bloqueios e as sessões no Oracle com a query abaixo:
select substr(to_char(c.LOCKWAIT),1,8) lockwait
,substr(to_char(b.session_id)||','||to_char(c.serial#),1,12) sid_serial#
,c.status
,rpad(c.osuser,8) unix
,rpad(c.username,8) ora
,to_char(c.logon_time,'dd/mm hh24:mi:ss') logon_time
,a.object_name Tabela
,decode(b.locked_mode,1,'No Lock',
2,'Row Share',
3,'Row Exclusive',
4,'Share',
5,'Share Row Excl',
6,'Exclusive',null) Status_Lock
,rpad(c.module,15) Prog
,c.terminal terminal
,rpad(c.action,20) acao
from all_objects a
,v$locked_object b
,v$session c
where b.object_id = a.object_id
and b.session_id = c.sid
order by 6, 7 desc