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';