Database triggers в FB

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
VerLeon
Сообщения: 44
Зарегистрирован: 24 ноя 2007, 08:43

Database triggers в FB

Сообщение VerLeon » 12 янв 2009, 13:20

Здравствуйте, уважаемые!

Вопрос следующий - как работают в FB database triggers на дисконнект и завязаны ли они на MON$ATTACHMENTS? А конкретнее, хотелось бы узнать, что произойдет, если сервер по каким-либо причинам аварийно завершил работу? Вполне ведь возможен вариант, что эти триггеры сработать не смогли. И в MON$ATTACHMENTS в базе зависнут записи. Что тогда произойдет при восстановлении работы сервера и обращения к этой базе - очистятся ли "мертвые" строчки в MON$ATTACHMENTS и если да, то сработают ли при этом триггеры на дисконнект?

Прошу прощения, что смешал в кучу два понятия, просто у нас при переходе с IB на FB возникла проблема. В IB мы использовали свою табличку в базе, в которой лежали активные сессии. В силу различных причин (н-р, аварийных отключений клиентов от базы) в этой табличке периодически появлялся мусор, который чистился при подключении любого пользователя путем сравнения содержимого таблицы с содержимым TMP$ATTACHMENTS. Однако в FB такое не канает - юзер (не SYSDBA) видит только свой аттачмент и не может понять, какие из записей в нашей таблице мертвые, а какие - нет. Альтернативы я вижу две:
1. Использование database triggers. Исключаются все причины образования мусорных записей, связанные с ненормальным отключением клиента, но, видимо, остаются проблемы при ненормальном завершении работы самого сервера.
2. Вроде как в FB 2.5 мониторинговые таблицы полностью может видеть не только SYSDBA. Вот только как этого добиться описаний пока нет, да и у FB 2.5. даже беты пока нет, а сроки уже поджимают...

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: Database triggers в FB

Сообщение dimitr » 12 янв 2009, 18:02

1) Триггеры уровня БД с MON$-таблицами никак не связаны.
2) Триггеры на дисконнект не сработают только если сервер упал по Access Violation.
3) Данные MON$-таблиц не хранятся в базе, они генерятся динамически в момент запроса. Соотв-но, ничего в них "зависнуть" не может.
4) В 2.1.2 (RC выйдет в этом месяце) не-SYSDBA юзеры смогут видеть все аттачи от своего имени.

VerLeon
Сообщения: 44
Зарегистрирован: 24 ноя 2007, 08:43

Re: Database triggers в FB

Сообщение VerLeon » 13 янв 2009, 08:57

Спасибо за инфу!
Но рядовые юзеры будут видеть только свои аттачи, а чужие все равно не увидят, так что старый метод все равно работать не будет...
Т.е. единственный вариант - триггеры на дисконнект и надеяться, что сервер не упадет. Ну и видимо какой-то процесс, работающий от имени SYSDBA, для страховки.

А вот помню где-то обсуждался вариант с новой системной ролью, типа RDB$MON, все юзеры с этой ролью могли бы видеть полностью все мониторинговые таблицы, как их видит SYSDBA - этого не будет?

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: Database triggers в FB

Сообщение dimitr » 13 янв 2009, 12:08

VerLeon писал(а):А вот помню где-то обсуждался вариант с новой системной ролью, типа RDB$MON, все юзеры с этой ролью могли бы видеть полностью все мониторинговые таблицы, как их видит SYSDBA - этого не будет?
будет только в 3.0

Ответить