Hay ocasiones que el abrir tu Console Manager para resolver un bloqueo o un interbloqueo, puedes mejor ejecutar unas sentencias para obtener la información que necesitas y así tomar las medidas que sean pertinentes.
Dejo las consultas que hasta ahora tengo para obtener esa información
-- Consulta de Bloqueo de Objetos por Sesiones
select substr(a.os_user_name,1,8) "OS User"
, substr(b.object_name,1,30) "Object Name"
, substr(b.object_type,1,8) "Type"
, substr(c.segment_name,1,10) "RBS"
, e.process "PROCESS"
, substr(d.used_urec,1,8) "# of Records"
, e.sid
, e.serial#
, e.username
, p.spid
from v$locked_object a
, dba_objects b
, dba_rollback_segs c
, v$transaction d
, v$session e
, v$process p
where a.object_id = b.object_id
and a.xidusn = c.segment_id
and a.xidusn = d.xidusn
and a.xidslot = d.xidslot
and d.addr = e.taddr
and p.addr = e.paddr;
-- Consulta de Objetos Bloqueados por usuarios
select
l.oracle_username,
l.session_id,
l.os_user_name,
o.owner,
o.object_name,
dl.lock_type,
dl.mode_held
from v$locked_object l, dba_objects o, dba_locks dl
where o.object_id = l.object_id
and dl.session_id = l.session_id;
--Consulta para Interbloqueos
select lock1.sid, ' BLOQUEA ', lock2.sid
from v$lock lock1, v$lock lock2
where lock1.block =1 and lock2.request > 0
and lock1.id1=lock2.id1
and lock1.id2=lock2.id2;
-- Consulta de SPID
select v.sid, a.SPID, v.serial#, v.username, v.OSUSER, v.program, v.MACHINE, v.LOGON_TIME
from dba_users u, v$session v, v$process a
where v.user# = u.user_id
and v.paddr = a.addr;
-- Consulta sesiones pendientes de rollback o commit
SELECT s.username,
s.sid,
s.serial#,
t.used_ublk,
t.used_urec,
rs.segment_name,
r.rssize,
r.status
FROM v$transaction t,
v$session s,
v$rollstat r,
dba_rollback_segs rs
WHERE s.saddr = t.ses_addr
AND t.xidusn = r.usn
AND rs.segment_id = t.xidusn
ORDER BY t.used_ublk DESC;
No hay comentarios:
Publicar un comentario
Deja tu comentario aquí