Завершение текущего сеанса
Следующий пример, завершает сеанс с SID равным 7 и серийным номером 15:
ALTER SYSTEM KILL SESSION '7,15';
Для идентификации индекса (SID) и серийного номера выполняется запрос к представлению V$SESSION.
Следующий запрос выбирает все сеансы пользователя TEST:
SELECT SID, SERIAL#
FROM V$SESSION
WHERE USERNAME = 'TEST';
Завершение активных сеансов
Если пользователь выполняет SQL инструкции, обращается к серверу Oracle, т.е. его сеанс имеет статус ACTIVE, и его сеанс принудительно завершен, то пользователь немедленно получит сообщение об ошибке: ORA-00028: your session has been killed
Если, после получения сообщения об ошибке пользователь пытается сохранить какие-либо данные или выполняет SQL предложение, то Oracle вернет ошибку:
ORA-01012: not logged on
Если активный сеанс не может быть прерван (например, выполняется откат транзакции или идут операции ввода/вывода в сети), то, сеанс не сможет быть прерван до его завершения. В этом случае, сеанс держит все ресурсы, до своего завершения. Дополнительно, сеанс выполняющий предложение ALTER SYSTEM, перед завершением ожидает 60 секунд, и уже затем завершается. Если сеанс не завершается по истечении 60 секунд, то пользователь инициирующий завершение сеанса получает сообщение, о том, что сеанс «помечен» на завершение. Сеанс, помеченный на удаление, в представлении V$SESSION имеет статус KILLED и значение в поле SERVER отличное от PSEUDO.
Завершение неактивных сеансов
Если сеанс имеет статус INACTIVE, когда он прерывается, сообщение об ошибке:
ORA-00028: your session has been killed
Как только неактивный сеанс прекращен, STATUS в представлении V$SESSION выглядит как KILLED.
В Oracle Database 11g был добавлен новый метод завершения сеансов - ALTER SYSTEM DISCONNECT SESSION.
В отличие от команды KILL SESSION, когда сеансу предлагаеться завершить самого себя, команда DISCONNECT SESSION завершает процесс выделенного сервера, что равносильно завершению процесса из операционной системы.
Основной синтаксис DISCONNECT SESSION аналогичен KILL SESSION, но с добавлением условия POST_TRANSACTION.
Например:
ALTER SYSTEM DISCONNECT SESSION 'sid, serial#' POST_TRANSACTION;
ALTER SYSTEM DISCONNECT SESSION 'sid, serial#' IMMEDIATE;
Предложение POST_TRANSACTION, сообщает о необходимости дождаться завершения текущих транзакций, и только после их завершения, сеанс завершается.
Предложение IMMEDIATE как и в случае с KILL SESSION разрывает сеанс принудительно.
Использование средств Windows платформы :
Для завершения сеанса в среде Windows, первым делом идентифицируйте сеанс, затем укажите его данные в команде, выполняемой из командной строки:
C:> orakill ORACLE_SID spid
например :
C:> orakill ORCL 38991
Использование средств UNIX платформы :
Для завершения сеанса в среде UNIX или Linux, первым делом идентифицируйте сеанс, затем укажите его SPID в следующей команде:
shell#> kill 38991
чтобы немедленно завершить сеанс необходимо перед SPID поставить метку -9 :
shell#> kill -9 38991