Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Удалить сесию


Автор: MakNik 7.5.2010, 15:43
Подскажите, пожалуйста, как SQL-запросом удалить сеслию, если известен SID сесии?

Автор: ToshaCh 7.5.2010, 16:38
Нужен не только sid, но и serial# (берём из v$session).
Код

alter system kill session 'sid,serial#';


Автор: MakNik 12.5.2010, 12:03
Сесия удаляется, но в v$session продолжает висеть с состоянием KILLED.
Через какое-то время запись исчезает.
А как возможно ускорить очистку v$session от убитых сесий?

Автор: ToshaCh 12.5.2010, 13:02
Никак. Точнее, можно всякими грязными хаками, но это бестолково. Сессия находится в убитом состоянии, поскольку в это время происходит откат незакомиченных операций (а это зависит только от производительности вашей системы). Для завершения этого отката ораклу необходимы идентификаторы сессии и прочая служебная инфа, поэтому запись и существует. Как только оракл всё откатит он запись удалит. Ускорить процесс невозможно - такова логика работы. 

Автор: Zloxa 12.5.2010, 15:15
ToshaCh, хм... я тоже когдато отстреливал сессии alter system kill session. Не помню почему, но теперь мне мой DBA выделяет мне коннект в консоль где я могу сделать kill(или же orakill) процессу. Чтото там не так было... 

Автор: ToshaCh 12.5.2010, 17:43
Zloxa, да, такие траблы бывают. Фактически kill session это не кил, а вежливая просьба к процессу совершить самоубийство. В нормальной ситуации это проходит без проблем. Но есть варианты, когда процесс не в адеквате и реагирует на такие предложения медленно. Такое бывает, когда, например процесс упал в своп - на AIX случается, при неправильной настройке, или банально сервер настолько загружен, что команда на завершение будет блуждать где-то внутри оракла непомерно долго. 
Поэтому kill на уровне ОС это глобально и надёжно, хотя бывают и тут траблы, но это именно баги в ядре, когда оракл не нормально реагирует на отстрел. 
В 11g добавили фишку 'alter system disconnect session'. Говорят, что это эквивалентно kill на уровне ОСи. Хз, честно говоря - в боевых условиях не было возможности проверить. 

Резюмерую: кошерно делать alter system kill, надёжно - стрелять процесс в системе. При стрельбе главное понимать, что процесс и сесия не всегда состоят в отношении один к одному (shared server), поэтому надо знать систему на которой ты такое проворачиваешь. 

А статус KILLED ко всей этой замарочке отношения не имеет - это именно rollback. http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:4974573906087 комментарии от Тома Кайта. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)