Принудительное завершение сеансов Oracle

Источник: all-oracle

Рекомендовано для:
  • Oracle Database 9i R1
  • Oracle Database 9i R2
  • Oracle Database 10g R1
  • Oracle Database 10g R2
  • Oracle Database 11g R1
 

Средствами 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


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=20768