[ОТВЕТИТЬ]
Опции темы
26.02.2008 08:53  
akonev
вопрос: как собственно?

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

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

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

кто-нибудь знает более элегантный способ?
Вложения
Тип файла: rar kill.rar (975 байт, 195 просмотров)
 
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, время: 21:06.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.