Vi har et antal applikationer, hvoraf et par stykker kommer fra eksterne leverandøre, og fred med det. I den senere tid har jeg dog overtaget et par af disse - og specielt en har det med at lave deadlocks, primært forudsaget af nogen LOCK TABLE uden NOWAIT.

Det jeg går efter i de situationer, er dels hvem der blokere, i hvorlang tid og typisk også hvilken wait class vi taler om - commit kunne f.eks være en af oracles egne prosesser lgwr f.eks, og er derfor typisk ikke den interessante.

OSUSER                         BLOCKING_SESSION        SID    SERIAL#  WAIT_CLASS                SECONDS_IN_WAIT
------------------------------ ---------------- ---------- ---------- ---------------------------------------------------------------- ---------------
tojense2202                                 265        541      33562 Other                                                                          0

Selecten for ovenstående ser således ud

SQL> select  osuser,   blocking_session,   sid,   serial#,   wait_class,   seconds_in_wait from
v$session where  blocking_session is not NULL order by blocking_session

Ovenstående viser mig af SID 265 blokker for SID 541 - tilgengæld er SECONDS_IN_WAIT 0 - så den er nok uskadelig. Var situationen en anden ville jeg undersøge SID og SERIAL# på SID 265

SQL> select sid, serial# where sid = 265;

SID    SERIAL#
-------   --------------
265     53764

Med disse informationer - kan jeg nu droppe den session der blokker.

SQL> alter system kill session '265,53764';