| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Oracle > Удалить сесию |
| Автор: MakNik 7.5.2010, 15:43 |
| Подскажите, пожалуйста, как SQL-запросом удалить сеслию, если известен SID сесии? |
| Автор: ToshaCh 7.5.2010, 16:38 | ||
Нужен не только sid, но и serial# (берём из v$session).
|
| Автор: 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 комментарии от Тома Кайта. |