Четверг, 25.04.2024, 22:15

  • Полезные Скрипты Oracle
Главная Книги Быстрый Поиск О Сайте

Oracle
PL/SQL
Решения для Oracle
ПОИСК
Быстрый поиск
 Принудительно завершить пользовательский сеанс
Завершение текущего сеанса 
Следующий пример, завершает сеанс с 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



Copyright sql.ucoz.com © 2024
Оцените сайт

Всего ответов: 51