Как да "убием" Oracle сесия ?

Една сесия може да бъде "убием" вътре в Oracle като използваме синтаксиса ALTER SYSTEM KILL SESSION. Обикновенно ни се налага да "убием" сесия, когато имаме блокирани(описано в друга статия) сесии или по някъква друга причина. Естествено първо трябва да открием сесията която да "убием" и по-специално нейните SID и SELIAL# стойности по следният начин:

SQL> select l1.sid, ' IS BLOCKING ', l2.sid
from v$lock l1, v$lock l2
where l1.block =1 and l2.request > 0
and l1.id1=l2.id1
and l1.id2=l2.id2
/

   SID 'ISBLOCKING'    SID
------ ------------- -----
    14 IS BLOCKING      13



SQL> SELECT s.sid,s.serial#, s.osuser, s.program FROM v$session s;

SID SERIAL# OSUSER                         PROGRAM
--- ------- ------------------------------ ---------------
  1       1 SYSTEM                         ORACLE.EXE
  2       1 SYSTEM                         ORACLE.EXE
  3       1 SYSTEM                         ORACLE.EXE
  4       1 SYSTEM                         ORACLE.EXE
  5       1 SYSTEM                         ORACLE.EXE
  6       1 SYSTEM                         ORACLE.EXE
  7       1 SYSTEM                         ORACLE.EXE
  8       1 SYSTEM                         ORACLE.EXE
  9      46 HOME\Administrator             PLSQLDev.exe
 10     229 HOME\Administrator             PLSQLDev.exe
 12     363 HOME\Administrator             PLSQLDev.exe
 13    9432 HOME\Administrator             PLSQLDev.exe
 14     347 HOME\Administrator             PLSQLDev.exe
 15      35 HOME\Administrator             PLSQLDev.exe
 16       4 HOME\Administrator             PLSQLDev.exe
					

Стойностите на SID и SELIAL# могат да бъдат заменени в следният израз:

SQL>ALTER SYSTEM KILL SESSION 'sid,serial#';
					

В някои случай Oracle не може да "убие" сесията веднага. В тези случаи сесията е маркирана за "убиване" и това ще стане колкото е възможно за Oracle сървъра по-скоро. Използването на ALTER SYSTEM KILL SESSION командата е единственият и най-безопасен начин да "убиете една Oracle сесия. Ако маркираната сесия продължава да стои известно време, можете да обмислите да убиете сесията на ниво ОС, но имайте предвид, че това е мтого опасно и маже да доведе до срив на инстанцията, за това трябва да поемете известен риск. Възможно е да форсирате дадена сесия за "убиване" като изпълнете следната команда:

SQL>ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;