Запрос не мой. Помогает, если не могу скомпилировать пакет - находим блокирующую сессию и киляем ее. Вылаживаю, что бы был под рукой.
select distinct orakill from (
select
/*+ ordered */
w1.sid waiting_session,
h1.sid holding_session,
w.kgllktype lock_or_pin,
w.kgllkhdl address,
(
select 'ALTER SYSTEM DISCONNECT SESSION ''' || s.SID || ',' || s.SERIAL# || ''' IMMEDIATE;' sqll1
from v$session s , v$process p
where s.PADDR=p.ADDR and s.sid = h1.sid
) orakill,
decode (h.kgllkmod, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive', 'Unknown' ) mode_held,
decode (w.kgllkreq, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive', 'Unknown' ) mode_requested
from dba_kgllock w,
dba_kgllock h,
v$session w1,
v$session h1
where ( ( (h.kgllkmod != 0)
and (h.kgllkmod != 1)
and ((h.kgllkreq = 0)
or (h.kgllkreq = 1)) )
and ( ((w.kgllkmod = 0)
or (w.kgllkmod = 1))
and ((w.kgllkreq != 0)
and (w.kgllkreq != 1)) ) )
and w.kgllktype = h.kgllktype
and w.kgllkhdl = h.kgllkhdl
and w.kgllkuse = w1.saddr
and h.kgllkuse = h1.saddr
)
select distinct orakill from (
select
/*+ ordered */
w1.sid waiting_session,
h1.sid holding_session,
w.kgllktype lock_or_pin,
w.kgllkhdl address,
(
select 'ALTER SYSTEM DISCONNECT SESSION ''' || s.SID || ',' || s.SERIAL# || ''' IMMEDIATE;' sqll1
from v$session s , v$process p
where s.PADDR=p.ADDR and s.sid = h1.sid
) orakill,
decode (h.kgllkmod, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive', 'Unknown' ) mode_held,
decode (w.kgllkreq, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive', 'Unknown' ) mode_requested
from dba_kgllock w,
dba_kgllock h,
v$session w1,
v$session h1
where ( ( (h.kgllkmod != 0)
and (h.kgllkmod != 1)
and ((h.kgllkreq = 0)
or (h.kgllkreq = 1)) )
and ( ((w.kgllkmod = 0)
or (w.kgllkmod = 1))
and ((w.kgllkreq != 0)
and (w.kgllkreq != 1)) ) )
and w.kgllktype = h.kgllktype
and w.kgllkhdl = h.kgllkhdl
and w.kgllkuse = w1.saddr
and h.kgllkuse = h1.saddr
)
Немає коментарів:
Дописати коментар