powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Предотвратить рекурсию
62 сообщений из 62, показаны все 3 страниц
Предотвратить рекурсию
    #39790984
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте ВСЕ!

Нужны идеи.
У меня что-то не придумывается.

Триггер:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TRIGGER TRANSACTION_START
ACTIVE ON TRANSACTION START
AS
BEGIN
  IF (RDB$GET_CONTEXT ('SYSTEM', 'READ_ONLY') = 'FALSE') THEN
    IN AUTONOMOUS TRANSACTION DO
      INSERT INTO USER_TRANSACTION (USER_NAME, TRANSACTION_ID) VALUES (CURRENT_USER, CURRENT_TRANSACTION);
END;


понятное дело, что старт новой транзакции (IN AUTONOMOUS TRANSACTION DO)
приводит к бесконечной рекурсии и исключению Too many concurrent executions of the same request.

Есть у кого-нибудь мысли, как обойти?

--
Регардсы и прочее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39790985
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

сравни current_transaction до и внутри области действия
Код: sql
1.
IN AUTONOMOUS TRANSACTION DO.



Если меняется - повезло, тогда пиши значение в глобальную переменную и используй для отсечки рекурсии.
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39790987
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
25.03.2019 15:06, ёёёёё пишет:
> сравни current_transaction до и внутри области действия

КАКИМ каком?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39790989
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий, в основной транзакции писать TRANSACTION_ID в какую-нибудь контекстную переменную USER_SESSION, которую затем проверять в триггере старта транзакции и если не совпадает - ничего не делать?
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39790990
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий> IF (RDB$GET_CONTEXT ('SYSTEM', 'READ_ONLY') = 'FALSE') THEN
Мимопроходящий> IN AUTONOMOUS TRANSACTION DO
Мимопроходящий> INSERT INTO USER_TRANSACTION

Стандартное
Код: sql
1.
2.
3.
4.
5.
6.
7.
IF (RDB$GET_CONTEXT (Session, 'SOMEVAR') = 'FALSE') THEN
begin
RDB$SET_CONTEXT (Session, 'SOMEVAR', 'True');
IN AUTONOMOUS TRANSACTION DO
INSERT INTO USER_TRANSACTION
RDB$SET_CONTEXT (Session, 'SOMEVAR', 'False');
end


не подходит, конкуренция большая?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39790993
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
25.03.2019 15:14, Гаджимурадов Рустам пишет:
> не подходит, конкуренция большая?

думал об этом.
но у такой переменной область видимости глобальная для сессии.
что не даёт гарантий отсутствия "пропусков" конкурентных транзакций
в рамках этой же сессии.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791009
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий, из описалова в доке не совсем понятно - для чего служит поле MON$TOP_TRANSACTION. Может это оно и есть - идентификатор транзакции, которая инициировала другую транзакцию?
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791017
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
25.03.2019 15:40, rdb_dev пишет:
> Мимопроходящий, из описалова в доке не совсем понятно - для чего служит поле MON$TOP_TRANSACTION.
> Может это оно и есть - идентификатор транзакции, которая инициировала другую транзакцию?

MON$TOP_TRANSACTION is the upper limit used by the sweeper transaction when advancing the global OIT.
All transactions above this threshold are considered active.
It is normally equivalent to the MON$TRANSACTION_ID but COMMIT RETAINING or ROLLBACK RETAINING
will cause MON $TOP_TRANSACTION to remain unchanged (“stuck”) when the transaction ID is incremented.

это было в релизных нотах к 2.1

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

за использование MON$ в ON TRANSACTION START надо руки отрывать.

Мимопроходящий,

а точно надо в ON TRANSACTION START писать? Может подойдёт запись USER_TRANSACTION в ON TRANSACTION COMMIT и ON TRANSACTION ROLLBACK? Или поздно уже?
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791019
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

автономная тр-ция тоже будет read only.
Так что не с рекурсией тебе нужно бороться.

Как вариант - RO тр-ция пишет в GTT ON COMMIT PRESERVE, RW тр-ция пишет в обычную таблицу - про себя и из GTT, очищая при этом GTT.
Не думаю, что RW тр-ции в одном коннекте массово одновременно стартуют и будут драться.
Но даже если попадёшь на lock conflict при удалении из GTT - не беда, следующая RW тр-ция сделает работу.
Ну и - ON DISCONNECT тоже нужен в этой схеме.

Проще - не логгировать старты RO тр-ций :)
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791023
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
25.03.2019 15:59, hvlad пишет:
> автономная тр-ция тоже будет read only.

эммм...
без обид, но ты ВЫНИМАТЕЛЬНО прочитал стартовый пост?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791024
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий25.03.2019 15:40, rdb_dev пишет:
> Мимопроходящий, из описалова в доке не совсем понятно - для чего служит поле MON$TOP_TRANSACTION.
> Может это оно и есть - идентификатор транзакции, которая инициировала другую транзакцию?

MON$TOP_TRANSACTION is the upper limit used by the sweeper transaction when advancing the global OIT.
All transactions above this threshold are considered active.
It is normally equivalent to the MON$TRANSACTION_ID but COMMIT RETAINING or ROLLBACK RETAINING
will cause MON $TOP_TRANSACTION to remain unchanged (“stuck”) when the transaction ID is incremented.

это было в релизных нотах к 2.1

зы: Денис, надо бы в доку внести, а то действительно, нихрена ж не понятно.


добавлю
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791027
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий25.03.2019 15:59, hvlad пишет:
> автономная тр-ция тоже будет read only.

эммм...
без обид, но ты ВЫНИМАТЕЛЬНО прочитал стартовый пост?Похоже не вынимательно :)
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791029
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда можно на старте тр-ции писать в GTT ON COMMIT DELETE, без автономки.
При коммите - переносить в постоянную таблицу, без автономки
При роллбеке - переносить в постоянную таблицу, в автономке.

Если там мало чего писать, то можно не в GTT, а в контекстную переменную уровня тр-ции (USER_TRANSACTION)
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791030
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
25.03.2019 15:59, Симонов Денис пишет:
> а точно надо в ON TRANSACTION START писать? Может подойдёт запись USER_TRANSACTION в ON TRANSACTION COMMIT и ON TRANSACTION ROLLBACK? Или поздно уже?

поздно.
пытаюсь соорудить human-readable сообщение о лок-конфликте.
что мол запись блокирует ВАСЯ ПУПКИН, а не транзакция № 2-12-85-06
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791035
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийпытаюсь соорудить human-readable сообщение о лок-конфликте.
что мол запись блокирует ВАСЯ ПУПКИН, а не транзакция № 2-12-85-06Пиши тогда это всё в другую БД
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791036
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
25.03.2019 16:10, hvlad пишет:
> Тогда можно на старте тр-ции писать в GTT ON COMMIT DELETE, без автономки.
> При коммите - переносить в постоянную таблицу, без автономки
> При роллбеке - переносить в постоянную таблицу, в автономке.

не пойдёт.
мне нужна глобальная видимость этой записи пока транзакция активна.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791039
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
25.03.2019 16:18, hvlad пишет:
> Пиши тогда это всё в другую БД

склоняюсь к этому варианту.
только не в другую, а в эту же (физически), под видом
Код: sql
1.
2.
3.
4.
EXECUTE STATEMENT ...
WITH AUTONOMOUS TRANSACTION
AS USER "специальный" PASSWORD '12345'
ON EXTERNAL DATA SOURCE ...


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

а не дороговато ли с точки зрения ресурсов?
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791047
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий> Пиши тогда это всё в другую БД

склоняюсь к этому варианту.Это была полушутка...

Но с fb4 это может стать нормальным вариантом - там есть пул внешних коннектов
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791049
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
25.03.2019 16:29, Симонов Денис пишет:
> а не дороговато ли с точки зрения ресурсов?

щупать надо. пока не знаю.
готов выслушать любые альтернативные идеи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791051
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийщупать надо. пока не знаю.
готов выслушать любые альтернативные идеи.Вести таблицу активных транзакций с пользователями в memory mapped файле через UDF?
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791057
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
25.03.2019 16:40, rdb_dev пишет:
> Вести таблицу активных транзакций с пользователями в memory mapped файле через UDF?

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

в Legacy UDF не надо!!! В UDR ещё можно сделать, но тоже не очень хорошо.
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791061
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис> а не дороговато ли с точки зрения ресурсов?

До ресурсов есть еще вопрос безопасности.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791062
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
25.03.2019 16:57, Гаджимурадов Рустам пишет:
> До ресурсов есть еще вопрос безопасности.

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

на мой взгляд ресурсы здесь будет узким местом. Стартовать новое соединение на каждую транзакцию дорого, особенно если транзакции стартуют часто и короткие, в 4.0 будет дешевле за счёт пула внешних соединений.
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791089
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потестил.
по времени получается порядка 200мс.
в общем-то, лаг допустимый.

засада пока видится одна - ON EXTERNAL DATA SOURCE
невозможно НЕ указывать имя сервера.
соответственно получаем обломингу при ресторе в другое место.

кроме того, алиасы не канают, нужен ПОЛНЫЙ путь к базе.
с точки зрения безопасности это нехорошо.

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

ну и вообще параметры внешнего соединения можно хранить в специальной таблице констант. Надо будет поменяешь в отресторенной БД
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791101
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийпытаюсь соорудить human-readable сообщение о лок-конфликте.
что мол запись блокирует ВАСЯ ПУПКИН, а не транзакция № 2-12-85-06

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

не прокатит из-за прав на MON$. В 3.0 SECURITY DEFINER ещё нет
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791111
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

RDB$GET_CONTEXT('SYSTEM', 'DB_NAME') не канает?
Ну и имя сервера localhost
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791116
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисне прокатит из-за прав на MON$. В 3.0 SECURITY DEFINER ещё нет

Зато есть ES, способный исполняться от имени заданного пользователя, включая SYSDBA.
Несекурненько, но это уже другой вопрос.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791117
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
25.03.2019 18:09, Симонов Денис пишет:
> RDB$GET_CONTEXT('SYSTEM', 'DB_NAME') не канает?

ух ты!
круто.
слона то я и не заметил...

> Ну и имя сервера localhost

не, имя сервера оказалось не нужно. это я погорячился.

СПАСИБО за наводку!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791129
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин!
дак ON EXTERNAL DATA SOURCE вообще не нужен оказался!

спасибо DS!

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791152
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий> в чем трабл?

Ну пароль же торчать будет, да ещё RWшный.
Впрочем, это тоже можно решать подпрыгиваниями.

Мимопроходящий> по времени получается порядка 200мс.
Мимопроходящий> в общем-то, лаг допустимый.

И шо, это реально лучше обычного варианта с флагом или внешней таблицы?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791795
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
погонял тесты при сравнительно нагруженной таблице.
просадка производительности всё же заметна.
вариант с EXECUTE STATEMENT ... WITH AUTONOMOUS TRANSACTION AS USER ...
на данный момент развития исторического материализма придётся исключить.
у-вы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791798
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийпросадка производительности всё же заметна.

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

У тебя настолько часты конфликты или ты таки засунул эту конструкцию в триггер?


Похоже, коту стало совсем нехрен делать
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39791852
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СПМ> Похоже, коту стало совсем нехрен делать

И студеною зимой, и зеленою весной
И стобою и со мной, это яйца-а-а.
Ты проснешься на рассвете
Слышишь как смеются дети
Лишь бы только были эти, эти яйца-а-а. (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39792089
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийна данный момент развития исторического материализма придётся исключить.
у-вы.Таким образом, тебе остаётся только UDR и memmap.
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39792155
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
27.03.2019 11:00, rdb_dev пишет:
> Таким образом, тебе остаётся только UDR и memmap.

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

а тебе изучить вопрос

Мимопроходящий,

а что совет DS не прокатил? Создать функцию или ХП и вызывать её в момент конфликта передавая в качестве аргумента номер конфликтующей транзакции

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE OR ALTER FUNCTION SF_USER_BY_TRANSACTION (
    A_TRANSACTION_ID BIGINT)
RETURNS VARCHAR(63)
AS
DECLARE VARIABLE STMT BLOB SUB_TYPE TEXT;
DECLARE VARIABLE USER_NAME VARCHAR(63);
BEGIN
  STMT = '
    select
      a.MON$USER
    from MON$ATTACHMENTS a
    join MON$TRANSACTIONS t on t.MON$ATTACHMENT_ID = a.MON$ATTACHMENT_ID
    where t.MON$TRANSACTION_ID = :ID
  ';
  EXECUTE STATEMENT(STMT)(ID := A_TRANSACTION_ID)
      AS USER 'SYSDBA' PASSWORD 'masterkey' -
      INTO USER_NAME;
  RETURN USER_NAME;
END





Код: sql
1.
2.
3.
4.
select
  t.mon$transaction_id,
  SF_USER_BY_TRANSACTION(t.mon$transaction_id) as username
from mon$transactions t
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39792216
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
27.03.2019 12:07, Симонов Денис пишет:
> а что совет DS не прокатил? Создать функцию или ХП и вызывать её в момент конфликта передавая в качестве аргумента номер конфликтующей транзакции

не хотелось дёргать таблицы мониторинга.
да и эскалирование прав до уровня SYSDBA внутри процедуры с открытим паролем не есть гуд.
из всего предложенного и протестированного, наименее тормозной и относительно безопасный
способ - писать во временную таблицу.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
RECREATE TABLE U_TRANS
EXTERNAL FILE '. . .'
(
    USER_NAME       CHAR(31),
    TRANSACTION_ID  CHAR(20),
    CONNECTION_ID   CHAR(20),
    CLIENT_PROCESS  CHAR(255),
    CLIENT_ADDRESS  CHAR(255),
    DATE_START      CHAR(26) DEFAULT CURRENT_TIMESTAMP NOT NULL
);

GRANT SELECT ON TABLE U_TRANS TO PUBLIC;

CREATE OR ALTER TRIGGER ON_TRANSACTION_START
ACTIVE ON TRANSACTION START
AS
BEGIN
  IF (RDB$GET_CONTEXT ('SYSTEM', 'READ_ONLY') = 'FALSE') THEN
    INSERT INTO U_TRANS (USER_NAME, TRANSACTION_ID, CONNECTION_ID, CLIENT_PROCESS, CLIENT_ADDRESS)
      VALUES (CURRENT_USER, CURRENT_TRANSACTION, CURRENT_CONNECTION, RDB$GET_CONTEXT('SYSTEM', 'CLIENT_PROCESS'), RDB$GET_CONTEXT('SYSTEM', 'CLIENT_ADDRESS'));
END;

GRANT SELECT, INSERT ON TABLE U_TRANS TO TRIGGER ON_TRANSACTION_START;


ну и грохать этот файл еженощно, по крону.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39792219
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тьфу, очепятка.
не во временную, а во ВНЕШНЮЮ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39792228
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

делать insert с клиента после старта тр-ции - не вариант ?
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39792243
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
27.03.2019 12:55, hvlad пишет:
> делать insert с клиента после старта тр-ции - не вариант ?

теоретически можно.
но нужно перелопатить все приложения.
а это чуть более 2 тысяч модулей.
с явными и неявными стартами транзакций.
либо вшить код прямо в IBX.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39792386
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий> но нужно перелопатить все приложения.


А прикладная цель какая - ловишь кого-то или статистику собираешь?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39792410
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамА прикладная цель какая - ловишь кого-то или статистику собираешь?
21842937
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39792440
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял, спасибо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39793209
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с внешним файлом засада...

запись в него сервером из разных коннектов на CS
не сериализована и не гарантирована.

вот такой вот ACHTUNG...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39793285
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мешанина получается?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39793503
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
28.03.2019 19:15, Гаджимурадов Рустам пишет:
> Мешанина получается?

если размер записи достаточно большой, то гарантия "битых" рекордов почти 100%.
ужался до минимума.
пишу только 2 int32: CONNECTION_ID и TRANSACTION_ID.
надо бы конечно писать int64, но 1-й диалект этого не позволяет.
при таком размере записи пишет вродь нормально.
но есть "фантомные боли".
до тех пор, пока пишущий коннект(транзакция) не прочитает
свою же собственную запись, другие коннекты её не видят.

очень интересное поведение.
хотелось бы это всё обсудить...


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39793528
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

external table - для импорта\экспорта, не для конкурентного доступа.
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39793550
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо, просто туда никто не лазил ;)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39793559
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

лазил.
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39793575
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
29.03.2019 13:45, hvlad пишет:
> лазил.

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

ещё раз - external table "оптимизированы" для монопольного доступа в режиме экпорт\импорт.
Никто не собирается приделывать туда синхронизацию и управление кешем для конкурентного доступа.
Это просто никому и низачем не нужно.
Для конкурентного доступа есть таблицы (внезапно! в СУБД есть таблицы - о как ?!)
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39793621
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
29.03.2019 14:17, hvlad пишет:
> ещё раз - external table "оптимизированы" для монопольного доступа в режиме экпорт\импорт.

нет там никакого монопольного доступа.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39793655
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,


"оптимизированы" для
...
Рейтинг: 0 / 0
Предотвратить рекурсию
    #39793671
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
29.03.2019 15:06, hvlad пишет:
> *"оптимизированы" для *

Ок.
значит не глюк. :)

добавил селект в триггер.
пока вродь жужжит нормально.
тормозов не наблюдаю.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
62 сообщений из 62, показаны все 3 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Предотвратить рекурсию
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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