Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Oracle

убить сессии пользователя из командной строки : Oracle

19.04.2024 1:26


26.02.2008 08:53
akonev
 
вопрос: как собственно?

ситуация стандартная, что-то правили в супермаге, связь пропала, сессии подвисли. при повторном подключении, пока сессии по таймауту не отвалятся - в те же документы не пускают.

хочется придумать простой способ дать юзеру возможность убить собственные сессии

родил батник, который выполняет стандартную процедуру убийства.
работает, но выглядит коряво, на мой собственный взгляд.

кто-нибудь знает более элегантный способ?
Вложения
Тип файла: rar kill.rar (975 байт, 235 просмотров)
26.02.2008 09:26
Mtirt
 
Андрей, по-моему лучше убивать не из v$session а из sslocks. Сама по себе зависшая сессия тебе особо ничем не мешает, отвалится потом по таймауту.
Ну и лучше всего, я думаю, получать имя пользователя от пользователя, а не рубить все сессии без разбора. А если задание какое исполнялось в этот момент?
26.02.2008 09:52
kadr
 
вот таким образом снимаем блокировку с документа
Код:
delete from sslocks where id='М17ВС02948'; -- снятие блокировки с документа
commit;
ну а как туда передать номер документа уж наверно можно придумать, только вот давать пользователю возможность напрямую что-то править в системных таблицах не есть гут, ошибётся и не с того документа снимет блокировку потом разбирайся где и что наредактировали.
26.02.2008 10:28
Vovantus
 
Думаю, как раз мой случай. У нас переодически падает выделенный канал между офисом и магазинами. Если в этот момент "что-то" редактировали в базе, то после восстановления связи это "что-то" блокируется и пользователи, в лучшем случае, звонят в офис и просят разблокировать документ. На что я, через DBA Studio, лезу в базу и убиваю все сессии несчастных пользователей. Нужен механизм, который будет автоматизировать эти действия. Я вижу это таким образом. Если пользователь редактировал документ, потом упал канал данных и после восстановления какие-то документы невозможно открыть, то он запускает обычный батник и тем самым создаёт флаг на сервере. Появляение этого флага отслеживается на сервере и в соответствии с названием флага посылается запрос в базу, который вычищает все сессии пользователя, создавшего флаг.
26.02.2008 10:45
OlegON
 
Убивать лучше утилитой orakill на сервере, одновременно вычищая sslocks, "killed"-сессия иногда может болтаться очень долгое время. Думаю в идеале - пробег по v$session с пропинговкой машин, непингуемым - orakill
26.02.2008 10:55
Vovantus
 
Цитата:
OlegON Думаю в идеале - пробег по v$session с пропинговкой машин, непингуемым - orakill
.. можно и так. Но мне кажется это лишнее.. Тупо - есть флаг, значит рубим на сервере сессии пользователя его создавшего!
26.02.2008 11:11
Vovantus
 
Кстати, я похожую тему уже создавал:
http://www.olegon.ru/showthread.php?t=3258
.. но так ни чего и не родил Запнулся на моменте использования orakill..
26.02.2008 11:36
akonev
 
в общем, все понятно. пришли к тому же:
выскребаем список сессий и бьем оракиллом или альтер сессией.

про sslock на досуге подумаю, как приспособить, чтобы прицельно вырезать только действительно лишние сессии.

оракилл меня отпугнул тем, что везде и всегда про него пишут:
"это последнее, что вы должны пользовать"
понятно, что причина в потенциальной возможности прибить системные процессы.
но зачем же нарываться? :)

ну и вдобавок альтер сессия хорошо работает на любой машине, не только сервере.
26.02.2008 12:22
kadr
 
Цитата:
Andrew_Konev про sslock на досуге подумаю, как приспособить, чтобы прицельно вырезать только действительно лишние сессии.
Скорее лишние блокировки, но никак не сессии
Часовой пояс GMT +3, время: 01:26.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.