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

Petter Rafael

Desenvolvedor Web atua com as tecnologias Java e PHP apoiadas pelos bancos de dados Oracle e MySQL. Além dos ambientes de desenvolvimento acima possuiu amplo conhecimento em servidores Apache/Tomcat, Photoshop, Arte & Foto, Flash e mais uma dezena de ferramentas e tecnologias emergentes. Atualmente colabora com o Viablog escrevendo sobre programação e tecnologia.