Как да "убием" 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;