середа, 30 березня 2016 р.

Определяем блокирующие сессии

Запрос не мой. Помогает, если не могу скомпилировать пакет - находим блокирующую сессию и киляем ее. Вылаживаю, что бы был под рукой.

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
)

Немає коментарів:

Дописати коментар