Средствами SQL*Plus
Сеансы могут быть завершены средствами SQL*Plus используя SQL предложение ALTER SYSTEM KILL SESSION.
Во-первых, идентифицируйте сеанс, который требуется завершить:
SELECT SID,
SERIAL#,
OSUSER,
PROGRAM
FROM V$SESSION;
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
20 60 SYSTEM DBSNMP.EXE
43 11215 TEST1 SQLPLUSW.EXE
33 5337 TEST2 SQLPLUSW.EXE
Полученные значения SID и SERIAL# указываются в SQL предложении:
ALTER SYSTEM KILL SESSION 'sid,serial#';
Например, для завершения сеанса пользователя TEST1 SQL предложение будет выглядеть так:
ALTER SYSTEM KILL SESSION '43, 11215';
В некоторых ситуациях процесс oracle не может быть завершен немедленно. В таких случаях сеанс помечается на прерывание. И будет уничтожен, как только будет возможно.
Предложение ALTER SYSTEM KILL SESSION самый безопасный способ прекращения сеанса Oracle. Если сеанс, помеченный на завершение, не может быть завершен в течение некоторого времени, то он может быть завершен на уровне операционной системы. Завершение на уровне операционной системы может быть опасно, и может привести к неработоспособности экземпляра.
Есть возможность завершить сеанс форсировано, добавлением ключевого слова IMMEDIATE:
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
Например, для завершения сеанса пользователя TEST1 из вышеприведенного примера, команда будет выглядеть так:
ALTER SYSTEM KILL SESSION '43, 11215' IMMEDIATE;
Это позволит избежать использования orakill.exe в Windows, или использование команды kill в *NIX системах.
В операционной системе Windows
Для завершения сеанса в операционной системе Windows, определяем сеанс:
SELECT S.SID,
P.SPID,
S.OSUSER,
S.PROGRAM
FROM V$PROCESS P,
V$SESSION S
WHERE P.ADDR = S.PADDR;
SID SPID OSUSER PROGRAM
---------- --------- ------------------------------ ---------------
1 310 SYSTEM ORACLE.EXE
2 300 SYSTEM ORACLE.EXE
3 309 SYSTEM ORACLE.EXE
4 299 SYSTEM ORACLE.EXE
5 302 SYSTEM ORACLE.EXE
6 350 SYSTEM ORACLE.EXE
20 412 SYSTEM DBSNMP.EXE
43 410 TEST1 SQLPLUSW.EXE
33 364 TEST2 SQLPLUSW.EXE
Полученные значения SID и SERIAL# указываются в командной строке:
C:> orakill ORACLE_SID spid
Например, для завершения сеанса пользователя TEST1, команда будет выглядеть так:
C:> orakill 43 410
Сеанс будет завершен немедленно, и ресурсы системы будут освобождены для использования другими сеансами.
В операционных системах семейства *NIX
Для завершения сеанса средствами операционной системы семейства *NIX, во-первых, идентифицируйте сеанс, аналогично способу, описанному для Windows, выполнив SQL команду. Далее запоминаем значение SPID сеанса, который требуется завершить, и выполняем команду:
kill -9 spid
Например, для завершения сеанса пользователя TEST1, команда будет выглядеть так:
kill -9 410
Завершенный сеанс будет завершен немедленно и освободит используемые ресурсы.
Если, вы сомневаетесь, то проверить SPID на соответствие PROCESSID в UNIX можно выполнив:
ps -ef / grep ora