powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Триггер на дисконнект. когда должен сработать?
42 сообщений из 42, показаны все 2 страниц
Триггер на дисконнект. когда должен сработать?
    #39619092
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробую триггер на дисконнект, хочу почистить некие хвосты в базе по отключению юзера.

1. прикладная программа завершается штатно - триггер сработал.
2. прикладная программа завершается аварийно(грохнул через таск менеджер) - триггер сработал.
3. вышвырнул юзера delete from mon$attachments - триггер не сработал.

пункт 3 это бага? в треккер?
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39619097
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

AFAIK, удаление из MON$ATTACHMENTS соединение не убивает. Повторная попытка использовать соединение приведет к ошибке, и тогда по идее триггер сработает. Но это так - пальцем в небо, сразу говорю.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39619108
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

нет. Обсуждалось уже
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39619129
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky3. вышвырнул юзера delete from mon$attachments - триггер не сработал.Сработает. Когда будет рельный дисконнект.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39619153
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladIvan_Pisarevsky3. вышвырнул юзера delete from mon$attachments - триггер не сработал.Сработает. Когда будет рельный дисконнект.Подождать keepalive интервал? Завтра проверю.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39619162
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

Сетевое соединение не разрывается, чтобы клиент мог получить корректное сообщение об ошибке (isc_att_shutdown).
Если клиент спит часами, то и сетевого дисконнекта не будет.
Поэтому keepalive тут не при чём.

Но.
Я ещё раз это всё посмотрел - в 2.5 таки не вызывается триггер при отстреле из мониторинга, и при шатдауне БД.
А вот в 3 - вызывается. Вроде :)
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39623751
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladА вот в 3 - вызывается. Вроде :)Дошли таки руки проверить, на двушке как ты и говорил триггер не срабатывает. С двушке я потихоньку уползаю, так что это для меня не приоритет.

Проверил на трешке(сборка 32924), те же яйца, токмо в профиль. то что должен был подчистить триггер висит в таблице. Шатдаун базы не приводит к срабатываю триггера. По идее, если база в шатдауне коннектам все едино ничего уже не светит, надо дать сработать триггеру, как с удалением коннекта через мон табличку тоже. Если клиент неожиданно для сервера умер, триггер же срабатывает, это я проверил.

Таки писать треккеру?

Я понимаю, что триггер не панацея, неожиданно умереть может и сам сервер (например сбой по питанию), но все таки, если коннект обрубается штатными средствами сервера, триггер должен работать, иначе какой в нем смысл?
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39623776
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

насколько помню (но могу и путать), явный отстрел коннектов (в отличие от штатного дисконнекта или отвала сети) хотели сделать максимально быстрым. Выполнять при этом триггеры, которые ХЗ что делают, не хотелось.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39623780
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrВыполнять при этом триггеры, которые ХЗ что делают, не хотелось.Есть же режим no_db_triggers на коннекте, чтоб кривой триггер на коннект обойти. У то го же shutdown-а тоже есть немного настроек... может их употребить?
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624022
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно, нелогично, что на коннект есть отключающий триггеры параметр, а на дисконнект нет :)
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624050
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

пересмотрел ещё раз 3-ку - там, хоть и менялся код отвечающий за шатдаун\дисконнект, но триггеры на дисконнект всё же не вызываются.

Давайте обсудим. Есть несколько причин для дисконнекта:
- по просьбе приложения (т.е. штатный дисконнект)
- обрыв связи с приожением
- удаление коннекта через мониторинг
- шатдаун БД, вызванный сисадмином
- шатдаун сервера в целом

В текущей реализации только синхронный дисконнект (первые два пункта) вызывает срабатывание триггера.
Все случаи асинхронного дисконнекта (все остальные случаи) - не вызывают.
Для этого есть причина - когда нужно максимально быстро погасить БД (например пропало питание и админ\скрипт экстренно гасит всё подряд), триггеры лучше не вызывать.
Кроме того, код дисконнекта не знает причину дисконнекта.

Мне кажется разумным вызывать триггеры в таких случаях
- удаление коннекта через мониторинг
- шатдаун БД, вызванный сисадмином - если он не форсирован

Есс-но, это может быть сделано в 4-ке. Бекпорт в 3 не обещается

Какие будут мнения ?
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624051
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryСобственно, нелогично, что на коннект есть отключающий триггеры параметр, а на дисконнект нет :)Нет такого параметра.
Есть другой - он отключает все database триггеры, не только на коннект
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624055
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladМне кажется разумным вызывать триггеры в таких случаях
- удаление коннекта через мониторинг


как по мне этот вариант спорный. Удаление коннекта через мониторинг может рассматриваться админом как экстренная мера, требующая как можно более быстрого дисконнекта. Кмк тут нужно давать право выбора.

В случае шатдауна всё понятно, как минимум админ может уточнять какой именно шатдаун он хочет
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624057
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисУдаление коннекта через мониторинг может рассматриваться админом как экстренная мера, требующая как можно более быстрого дисконнекта. Кмк тут нужно давать право выбора.Каким образом ?
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624059
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

может быть указывать через контекстные переменные или через изменение окружения оператором типа
SET MON_CONN_MODE <mode>
И сделать так чтобы этот оператор срабатывал вне транзакции как это сделано например для управления тайм-аутами

P.S. Нормальное имя переменной не приходит в голову
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624065
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladWildSeryСобственно, нелогично, что на коннект есть отключающий триггеры параметр, а на дисконнект нет :)Нет такого параметра.
Есть другой - он отключает все database триггеры, не только на коннектЯ потому смайлик и поставил.

На самом деле, "экстренное выключение" выполняется специально написанным батником, который сперва выполняет короткие "завершающие" SQL-операции (и здесь же можно написать выключение триггера на дисконнект, если бы он был), а уже затем тушит базу.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624069
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,

я бы хотел что бы как можно больше операций было доступно через SQL. Например, было бы неплохо чтобы через SQL можно было делать и shutdown, только если он не full. Сделал shutdown, накатил изменения, вернул БД в онлайн и всё это в одном SQL скрипте без прыжков между различными инструментами.

Я уже предлагал такое http://www.sql.ru/forum/1103091/shutdown-online-iz-skripta
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624131
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladДавайте обсудим. Есть несколько причин для дисконнекта:
- по просьбе приложения (т.е. штатный дисконнект)
- обрыв связи с приожением
- удаление коннекта через мониторинг
- шатдаун БД, вызванный сисадмином
- шатдаун сервера в целомпервые 2 реализованы, вопросов к ним у меня нет.
3. если бы можно было навесить свои триггеры на системные таблицы и они спокойно(штатно) переживали бы бэкап-рестор, то вопроса бы не возникло.
4. доп параметр шатдауна тоже снимет все вопросы.
5. у меня нет тут явного решения. Как вариант разделить триггеры на бефор и афтер коннект/дисконнект и исполнять какие-нибудь одни. И пусть программист решает, что важнее быстро погаснуть или исполнить весь сценарий дисконнекта.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624135
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

3. Нет смысла говорить о несуществующем :)
4. Да, у меня тоже была такая идея.
5. Тут типичный конфликт интересов программиста и администратора: первый хочет меньше кодировать, второй хочет чтобы всё "летало и не падало" ("само", есс-но).
Шатдаун сервера в эктренной ситуации за минимально возможное время - это всё же ответственность не программиста, так что я тебя тут не подержу - не должен программист решать что важнее в данном случае.
И - да - это означает, что он (программист) должен уметь обрабатывать такие ситуации (есс-но, когда всё снова поднимется в штатном режиме)
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624140
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У шатдауна же был параметр "время" (или только в режиме force - не помню). Недостаточно просто дать триггерам выполниться за это время, а кто не успел - их проблемы? Потому что если вводить доп.параметр, то могут появиться проблемы с "не-шатдауном" из-за выполняющихся триггеров.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624158
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

это время ожидания добровольного дисконнекта других.
Если они не успеют -шатдаун отменяется.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624171
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad3. Нет смысла говорить о несуществующем :)Как фичреквест для четверки? Тем более это идея возникла не у меня, тут в форуме уже были "пионэры", которые делали нечто подобное, правда жаловались, что оно не "тово".

Да по идее логично дать триггеру сработать при удалении через монатачмент.

Мне лично это доставило минимум проблем, у меня есть гуевая "отключалка", я туда впендюрил еще один запрос с логикой из триггера на дисконнект и вопрос для себя решил.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624184
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyДа по идее логично дать триггеру сработать при удалении через монатачмент.

не всегда. Как минимум два варианта: считать что ситуация со срубанием через мониторинг нормальная и триггер должен отработать, или это срубание вызвано какой-то экстренной ситуацией и триггер срабатывать не должен.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624186
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

что-то я тебя потерял, ты о чём сейчас ?

О триггерах на таблицы мониторинга ?
Их нет и не будет.
Как нет и самых событий insert\update\delete для этих псевдо-таблиц.

Или всё же о триггере на дисконнект ?
Это как раз обсуждается.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624187
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисКак минимум два варианта: считать что ситуация со срубанием через мониторинг нормальная и
триггер должен отработать, или это срубание вызвано какой-то экстренной ситуацией и
триггер срабатывать не должен.

Если к базе ещё удаётся послать запрос на удаление из таблицы, то ситуация совсем не
экстренная.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624195
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

а если некий ССЗБ напишет в on disconnect бесконечный цикл? Не намеренно, просто случайно вышло.
Сейчас если там зависон можно сделать delete from mon$attachments и вуаля коннект срублен.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624197
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladИли всё же о триггере на дисконнект ?О дисконнекте, хочется чтобы он вел себя логично и задокументировано. Мониторинговые таблицы тут "сбоку", нет у них событий, ну и ладно.

Симонов Денисэто срубание вызвано какой-то экстренной ситуацией и триггер срабатывать не должен.Присоединюсь в ДСу, сделал запрос, получил идентификаторы коннектов, какая тут эктренность? Было бы логично иметь логику дисконнекта в одном месте, а не размазывать ее по всей БД.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624199
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениса если некий ССЗБ напишет в on disconnect бесконечный цикл?Если SYSDBA стреляет себе с ногу, то сервер должен принудительно отнять у него логин? Если разработчик напишет бесконечный цикл на инсерте в базу и наинсертит пока место на диске не кончится? Что толку в пустом флуде?
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624202
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad> Если они не успеют -шатдаун отменяется.

А, сорри, я уже подзабыл... Умолкаю.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624212
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

это смотря как рассматривать возможность delete from mon$attachments. Лично я рассматриваю это как вырубание коннектов для нештатных ситуаций, в том числе и вырубание SYSDBA.

Ivan_PisarevskyЕсли разработчик напишет бесконечный цикл на инсерте в базу и наинсертит пока место на диске не кончится?

в данном случае delete from mon$attachments способен просто вырубить коннект делающий эту гадость.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624304
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

... и запустить ту, что в триггере на дисконнект
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624306
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,

сейчас триггер на дисконнект не запускается. Вы за то чтобы он срабатывал после delete from mon$attachments Причём всегда.
А я считаю что нужно право выбора запускать или нет.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624311
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисА я считаю что нужно право выбора запускать или нет.Триггер на мон табличку не навесить, см. выше. Где должен поселиться мифический выбор?

Если разработчик настолько туп, что запустил бесконечный цикл на рабочей БД, то чем тут поможет сервер? Пусть тестирует тщательнее на "кошках". А аварийно остановить тестовый сервер дело плевое. Рестартанул сервер целиком и правь свои кривульки в новом коннекте. Я не пойму такой трепетной заботы о криворуком разрабе именно в этом контексте? Почему бы не запретить джойны? можно же заставить сервер набирать "бесконечный" резалтсет, "уронив" при этом сервер.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624527
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladМне кажется разумным вызывать триггеры в таких случаях
- удаление коннекта через мониторинг
- шатдаун БД, вызванный сисадмином - если он не форсирован

Какие будут мнения ?
Согласен с этим.
Но хотелось бы оставить возможность удаления коннекта без вызова триггера на отключение. Например, так: ALTER USER 'PETROV' DELETE ATTATCHMENTS;
Либо через другую таблицу, которая содержит минимум информации - ID и имя пользователя, например.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39624625
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMaxЛибо через другую таблицу, которая содержит минимум информации - ID и имя пользователя, например.Эта логика совершенно штатно делается прямо сейчас, делай триггер в нем ссылка на таблицу, если там сидит юзер то выйти из триггера без действий, инсертить в таблицу до маневров нет никакой проблемы.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39625148
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyПрисоединюсь в ДСу, сделал запрос, получил идентификаторы коннектов, какая тут эктренность?

а если не получал ?

Код: sql
1.
delete from mon$attachment


или
Код: sql
1.
delete from mon$attachment where mon$attachment_id <> current_connection



с точки хрения движка во время процедуры delete над конкретной строкой-коннектом нет разницы, была ли где-то раньше сложная медленная логика или нет?

PS. Кстати, если предположить, что я примерно представляю как долго "подчищает хвосты" какой коннект, то может появиться смысл срубать их отсортировать и сначала убивать самые долгие, а под конец - самые быстрые. Это так, к тезису, что в экстренной ситуации не будет предварительных запросов.
Если "ток кончится" через долю секунды - то надо просто убивать сервер вместе с незаписанными на диск кэшами. А если у нас есть несколько секунд на сброс кэшей, то уж на предварительный "сделал запрос, получил идентификаторы коннектов" тем более доля секунды найдется.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39625153
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисможет быть указывать через контекстные переменные или через изменение окружения оператором типа SET MON_CONN_MODE <mode>

тогда уж добавить в mon$attachment изменяемый столбец mon$db_triggers_enabled:boolean и update его в любую сторону перед delete
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39631405
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochизменяемый столбец mon$db_triggers_enabledКак-то криво.

Меня тут посетила мысль, если нет триггеров на mon$attachment, то updatable view на нее навесить по идее можно, надо проверить только как она переживет b/r, и в триггер on delete прописать еще и свою логику, помимо удаления собственно записи из самой мон таблички. Далее все манипуляции производить над вьюхой.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39631407
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

должна пережить. ХП которые используют mon$ ведь переживают
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39631419
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky, ты забыл пункт 4 - уборщица случайно зацепила шваброй Ethernet патч-корд и произвела хардовый дисконнект. :)
По правде сказать, мне тоже не понятна такая избирательность FirebirdSQL сервера в отношении разных вариантов дисконнекта... Это, как минимум, неунифицировано!
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39631425
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devты забыл пункт 4 - уборщица случайно зацепила шваброй Ethernet патч-корд и произвела хардовый дисконнект. :)Выше это уже обсудили, перетерли, все там нормально. И убиение клиента таск менеджером тоже. Давай по теме, хватит партизанить.
...
Рейтинг: 0 / 0
Триггер на дисконнект. когда должен сработать?
    #39631586
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyAriochизменяемый столбец mon$db_triggers_enabledКак-то криво.

криво потому, что нет реализации изменяемых mon-таблиц.

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

реализации же изменения конкретного столбца в конкретной строке нет вообще.
и городить её из-за одного единственного случая, разумеется, не хочется.

но как раз концептуально это IMHO наиболее чистый вариант

остальное же сведется к хаотичному набору одноразовых (ad hoc) решений
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Триггер на дисконнект. когда должен сработать?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]