powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Узнать имя таблицы из триггера
25 сообщений из 90, страница 3 из 4
Узнать имя таблицы из триггера
    #35424551
Anjey aka PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrкстати, последнее время я все больше склоняюсь к тому, чтобы имитировать уровень изоляции рабочей транзакции. Т.е. для read-committed делать "снапшотность" мониторинга на уровне клиентского запроса, а не транзакции.

мб стоит добавить дополнительный параметр для RC транзакции, чтобы контролировать это поведение?
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35424564
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrТ.е. для read-committed делать "снапшотность" мониторинга на уровне клиентского запроса, а не транзакции.
и что тебя подталкивает сделать этот сомнительный шаг? :-)
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35424681
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvи что тебя подталкивает сделать этот сомнительный шаг? :-)
как минимум мониторить можно будет одной "вечной" RC read-only транзакцией, не терзая понапрасну счетчик. Да и в целом, более логично будет поведение выглядеть. А если по уму сделать, то еще и в процедурах станет возможным использование "живых" данных мониторинга, а не "замороженных".

альтернатива - оставить все как есть и реализовать явный "сброс" мониторинга (через SQL) для текущей транзакции. Правда, меня пугают возможные извраты типа:
Код: plaintext
1.
FOR SELECT ... FROM MON$...
DO DROP MONITORING SNAPSHOT;
:-)
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35424811
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv dimitrТ.е. для read-committed делать "снапшотность" мониторинга на уровне клиентского запроса, а не транзакции.
и что тебя подталкивает сделать этот сомнительный шаг? :-)Сомнительно сделали как раз в ИБ, мы пока что только скопировали эту особенность. Но она нам не нравится.
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35424914
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНо она нам не нравится.
вообще мне тоже не нравится что для получения обновленной информации надо рестартовать транзакцию. Но с другой стороны имеющиеся тулзы, да и вообще, ориентированы на получение связанной информации - БД-коннекты-транзакции-запросы.
То есть, логически было бы хорошо стартовать RC read only, и перечитыванием запроса получать обновления, но тогда не будет консистентности таблиц. А раз надо - придется стартовать снапшот-транзакцию, и все равно рестартовать ее когда надо обновить инфу. Тогда, по большому счету, вычитка данных таблиц мониторинга в RC read only теряет смысл.
Так что я за совместимость.
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35424917
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arniНаглядность и интуитивность кода на уровне "взглянул - понял" - тоже чего-то стоит, пусть и в ущерб кол-ву строк.
Наглядность и интуитивность - вещи весьма субъективные.
А длина - она и в Африке длина
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35424929
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы пока за
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35424931
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
моб ять.

так вот. я бы пока за isc_refresh_mon_info проголосовал. Т.е. за вызов api. а дальше можно поглядеть.
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35424947
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr
Код: plaintext
1.
FOR SELECT ... FROM MON$...
DO DROP MONITORING SNAPSHOT;

Если всё будет в автомате, то получить стабильный снимок мониторинга можно будет только "правильной" транзакцией.
Если дать возможность управлять, то это может быть лучше в плане контроля разработчиком.
например:
процедура_1 прочитала некоторые мониторинговые данные и вызвала процедуру_2
процедура_2 сделала DROP MONITORING SNAPSHOT и вернула управление процедуре_1
процедура_1 запросила другие таблицы мониторинга и "налетела" на несогласованность.

Если кого такой вариант не устроит могут использовать автономки. Минус действительно видится один - счётчик дёргается с вытекающими.

2kdv
Добавление вызова API мне нравится. Но процедуркам оно разобраться между собой не поможет.
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35425053
Николай1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Николай1> У меня есть "buffer-compare" - это оператор языка

"У меня" - это в где? И оператор какого языка?

Николай1> Остается извлечь значения этих полей их каждого буфера и сложить куда надо.

Зачем? Сравнивать, извлекать... они итак уже "извлечены" в new и old. ;)


Posted via ActualForum NNTP Server 1.4

4GL

В смысле "извлечены" ?
Буферы содержат все поля, а сохранить в аудите надо только те, которые изменились. buffer-compare и дает их список.
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35425182
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМинус действительно видится один - счётчик дёргается с вытекающими.
у нас в IBTM (Transaction Monitor) идет считывание состояния транзакций (OIT, OST, OAT, Next) каждую минуту.
Если делать через services api - старта транзакций нет, но нет и инфы о реальном числе активных транзакций.
Firebird API - увеличивает счетчик Next +1
Firebird mon$ и IB tmp$ - требуется старт транзакции, т.е. тоже Next +1

Так вот. Даже если с БД ничего не делают, Next+1 за сутки (!) растет всего на 1440 отсчетов (минут в сутках). На мой взгляд это полная фигня по сравнению с любой минимально активной системой, в которой нынче количество транзакций за рабочие сутки начинается минимум от 15000.
В среднем - 200к транзакций в сутки. У "гигантов" - 500к и более.

Так что рестарт транзакции для снятия инфы каждую минуту - фигня.
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35425221
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще - отсчет для tmp$ (пока mon$ не поддерживается) делается так:
коннект
старт транзакции
получение данных из tmp$
коммит
дисконнект

для этой задачи держать открытым коннект, да еще транзакцию активной, пусть даже и rc read only - считаю моветоном.
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35425334
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvи еще - отсчет для tmp$ (пока mon$ не поддерживается) делается так:
коннект
старт транзакции
получение данных из tmp$
коммит
дисконнект

для этой задачи держать открытым коннект, да еще транзакцию активной, пусть даже и rc read only - считаю моветоном.Для этой задачи - может быть.
Но не в общем случае.
Когда сервер загружен так, что мыша не проползает, и нужно быстро прибить виновника, ты не сможешь даже получить коннект в приемлемое время.
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35425437
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvТак что рестарт транзакции для снятия инфы каждую минуту - фигня.
Согласен. Для снятия статистики - фигня. Но для предложенного варианта получения имени текущего объекта, совсем не фигня. Если хотя бы половина объектов, задействованных в пользовательском запросе, будут порождать автономки, то это минимум рост счётчика в разы, а реально и в десятки раз.
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35426281
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrкстати, последнее время я все больше склоняюсь к тому, чтобы имитировать уровень изоляции рабочей транзакции. Т.е. для read-committed делать "снапшотность" мониторинга на уровне клиентского запроса, а не транзакции.+1

Я бы даже предложил забить на эту согласованность данных (это же не реальные данные, а данные мониторинга), хотя это кому-то покажется крамолой. Нехай будет RC-read (хотя это больше похоже на dirty read ;-) ). А различные "DROP MONITORING" считаю ненужным извращением.
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35426285
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай1В смысле "извлечены" ?Находятся в этой структуре.

Николай1Буферы содержат все поля, а сохранить в аудите надо только те, которые изменились. buffer-compare и дает их список.Решать, что сохранять, а что нет должен не компарер, а автор механизма логирования. Это, во-первых.
Во-вторых, все эти сравнения и "выборка только измененных" по времени, очень вероятн,
что уступят простому копированию (правда выиграет по занимаемому месту).
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35864312
dedRasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
afgmX11
Вопрос в следующем. Может спустя столько лет появилась возможность узнать имя таблицы для которой срабатывает триггер? Может это будет в версии 2.х или 3.х?

В 2.5 будет можно. Примерно так:
...
Правда на данной стадии разработки на данном запросе Firebird-2.5.0.20542-0_Win32 валится

Сейчас попробовал (версия 2.5.0.22796) - все работает!
Так что если добавить преддложенную товарищем KiLLun строчку
Код: plaintext
1.
Select rdb$relation_name from rdb$triggers where rdb$trigger_name =: procname into :tablename
то обсуждение заканчивается вполне позитивно.

C уважением

Александр
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35893865
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dedRasta[quot afgm][quot X11]
Сейчас попробовал (версия 2.5.0.22796) - все работает!


Не могу найти 2.5.0. 22796 или выше для Windows. Не подскажите ли? Уже минут сорок в гугле и в гугл-группах ищу.
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35893889
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Не могу найти 2.5.0. 22796 или выше для Windows. Не подскажите ли? Уже минут сорок в гугле и в гугл-группах ищу.
http://firebirdsql.org/download/snapshot_builds/win/
http://193.110.114.157/firebird/
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35893906
Фотография zirra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11 , а на официальном сайте смотреть не пробовал?..
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35894034
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ура, нашёл
http://firebirdsql.org/downloads/snapshot_builds/win/
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35894042
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zirra,

Искал конечно же. Но там только альфа 1, не знаю, где твоя ссылка живёт на офиц. сайте.
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35894054
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И на офиц. сайте тоже нашёл, спасибо.

Windows 32-bit / 64-bit v.2.1.x and v.2.5 (HEAD)

Просто меня смутило слово HEAD в названии ссылки.
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35894070
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код нерабочий, ругается на procname

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
AS
declare variable table_name varchar( 50 );
declare variable tablename varchar( 50 );
begin
  if (coalesce(rdb$get_context('USER_SESSION','can_exp_change'),'1')='1' )
  then begin
      table_name = 'OBJECTS';



      Select rdb$relation_name from rdb$triggers where rdb$trigger_name =: procname into :tablename;


      if (inserting) then execute procedure SP_SYS_LOG(table_name, new.id, '+');
      if (updating) then execute procedure SP_SYS_LOG(table_name, old.id, '<');
      if (deleting) then begin
        execute procedure SP_SYS_LOG(table_name, old.id, '-');
        execute procedure sp_send_to_deleted(old.id, table_name);
      end
  end
end
...
Рейтинг: 0 / 0
Узнать имя таблицы из триггера
    #35894074
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
can't format message 13:794 -- message system code -4.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
PROCNAME.
At line 10, column 76.
...
Рейтинг: 0 / 0
25 сообщений из 90, страница 3 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Узнать имя таблицы из триггера
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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