Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3      [все]
 Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

Здравствуйте ВСЕ!

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

Триггер:
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

25 мар 19, 14:58    [21842856]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
ёёёёё
Member

Откуда:
Сообщений: 101
Мимопроходящий,

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


Если меняется - повезло, тогда пиши значение в глобальную переменную и используй для отсечки рекурсии.
25 мар 19, 15:06    [21842864]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

25.03.2019 15:06, ёёёёё пишет:
> сравни current_transaction до и внутри области действия

КАКИМ каком?

Posted via ActualForum NNTP Server 1.5

25 мар 19, 15:09    [21842868]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2628
Мимопроходящий, в основной транзакции писать TRANSACTION_ID в какую-нибудь контекстную переменную USER_SESSION, которую затем проверять в триггере старта транзакции и если не совпадает - ничего не делать?
25 мар 19, 15:13    [21842870]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59689
Мимопроходящий> IF (RDB$GET_CONTEXT ('SYSTEM', 'READ_ONLY') = 'FALSE') THEN
Мимопроходящий> IN AUTONOMOUS TRANSACTION DO
Мимопроходящий> INSERT INTO USER_TRANSACTION

Стандартное
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

25 мар 19, 15:14    [21842871]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

25.03.2019 15:14, Гаджимурадов Рустам пишет:
> не подходит, конкуренция большая?

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

Posted via ActualForum NNTP Server 1.5

25 мар 19, 15:17    [21842876]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2628
Мимопроходящий, из описалова в доке не совсем понятно - для чего служит поле MON$TOP_TRANSACTION. Может это оно и есть - идентификатор транзакции, которая инициировала другую транзакцию?
25 мар 19, 15:40    [21842907]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

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

25 мар 19, 15:58    [21842921]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9393
rdb_dev,

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

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

а точно надо в ON TRANSACTION START писать? Может подойдёт запись USER_TRANSACTION в ON TRANSACTION COMMIT и ON TRANSACTION ROLLBACK? Или поздно уже?
25 мар 19, 15:59    [21842922]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
hvlad
Member

Откуда:
Сообщений: 10245
Мимопроходящий,

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

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

Проще - не логгировать старты RO тр-ций :)
25 мар 19, 15:59    [21842923]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

25.03.2019 15:59, hvlad пишет:
> автономная тр-ция тоже будет read only.

эммм...
без обид, но ты ВЫНИМАТЕЛЬНО прочитал стартовый пост?

Posted via ActualForum NNTP Server 1.5

25 мар 19, 16:03    [21842929]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9393
Мимопроходящий
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

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


добавлю
25 мар 19, 16:03    [21842930]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
hvlad
Member

Откуда:
Сообщений: 10245
Мимопроходящий
25.03.2019 15:59, hvlad пишет:
> автономная тр-ция тоже будет read only.

эммм...
без обид, но ты ВЫНИМАТЕЛЬНО прочитал стартовый пост?
Похоже не вынимательно :)
25 мар 19, 16:06    [21842934]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
hvlad
Member

Откуда:
Сообщений: 10245
Тогда можно на старте тр-ции писать в GTT ON COMMIT DELETE, без автономки.
При коммите - переносить в постоянную таблицу, без автономки
При роллбеке - переносить в постоянную таблицу, в автономке.

Если там мало чего писать, то можно не в GTT, а в контекстную переменную уровня тр-ции (USER_TRANSACTION)
25 мар 19, 16:10    [21842936]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

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

25 мар 19, 16:11    [21842937]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
hvlad
Member

Откуда:
Сообщений: 10245
Мимопроходящий
пытаюсь соорудить human-readable сообщение о лок-конфликте.
что мол запись блокирует ВАСЯ ПУПКИН, а не транзакция № 2-12-85-06
Пиши тогда это всё в другую БД
25 мар 19, 16:18    [21842947]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

25.03.2019 16:10, hvlad пишет:
> Тогда можно на старте тр-ции писать в GTT ON COMMIT DELETE, без автономки.
> При коммите - переносить в постоянную таблицу, без автономки
> При роллбеке - переносить в постоянную таблицу, в автономке.

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

Posted via ActualForum NNTP Server 1.5

25 мар 19, 16:18    [21842949]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

25.03.2019 16:18, hvlad пишет:
> Пиши тогда это всё в другую БД

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

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

Posted via ActualForum NNTP Server 1.5

25 мар 19, 16:24    [21842954]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9393
Мимопроходящий,

а не дороговато ли с точки зрения ресурсов?
25 мар 19, 16:29    [21842959]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
hvlad
Member

Откуда:
Сообщений: 10245
Мимопроходящий
> Пиши тогда это всё в другую БД

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

Но с fb4 это может стать нормальным вариантом - там есть пул внешних коннектов
25 мар 19, 16:36    [21842966]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

25.03.2019 16:29, Симонов Денис пишет:
> а не дороговато ли с точки зрения ресурсов?

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

Posted via ActualForum NNTP Server 1.5

25 мар 19, 16:37    [21842968]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2628
Мимопроходящий
щупать надо. пока не знаю.
готов выслушать любые альтернативные идеи.
Вести таблицу активных транзакций с пользователями в memory mapped файле через UDF?
25 мар 19, 16:40    [21842970]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

25.03.2019 16:40, rdb_dev пишет:
> Вести таблицу активных транзакций с пользователями в memory mapped файле через UDF?

идея хорошая, но мы от UDF отказались напрочь.
по многим причинам.

Posted via ActualForum NNTP Server 1.5

25 мар 19, 16:49    [21842976]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9393
rdb_dev,

в Legacy UDF не надо!!! В UDR ещё можно сделать, но тоже не очень хорошо.
25 мар 19, 16:56    [21842979]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59689
Симонов Денис> а не дороговато ли с точки зрения ресурсов?

До ресурсов есть еще вопрос безопасности.

Posted via ActualForum NNTP Server 1.5

25 мар 19, 16:57    [21842981]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

25.03.2019 16:57, Гаджимурадов Рустам пишет:
> До ресурсов есть еще вопрос безопасности.

в чем трабл?

Posted via ActualForum NNTP Server 1.5

25 мар 19, 16:58    [21842982]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9393
Гаджимурадов Рустам,

на мой взгляд ресурсы здесь будет узким местом. Стартовать новое соединение на каждую транзакцию дорого, особенно если транзакции стартуют часто и короткие, в 4.0 будет дешевле за счёт пула внешних соединений.
25 мар 19, 17:02    [21842984]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

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

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

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

но если сощурить левый глаз...

Posted via ActualForum NNTP Server 1.5

25 мар 19, 17:43    [21843025]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

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

Posted via ActualForum NNTP Server 1.5

25 мар 19, 17:46    [21843028]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9393
Мимопроходящий,

ну и вообще параметры внешнего соединения можно хранить в специальной таблице констант. Надо будет поменяешь в отресторенной БД
25 мар 19, 17:53    [21843035]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47284

Мимопроходящий
пытаюсь соорудить human-readable сообщение о лок-конфликте.
что мол запись блокирует ВАСЯ ПУПКИН, а не транзакция № 2-12-85-06

Тогда триггер-то тебе назачем? При получении ошибки дёргай SP, которая вернёт имя
пользователя по номеру его транзакции из таблиц мониторинга. Всё, телемаркет.

Posted via ActualForum NNTP Server 1.5

25 мар 19, 17:56    [21843039]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9393
Dimitry Sibiryakov,

не прокатит из-за прав на MON$. В 3.0 SECURITY DEFINER ещё нет
25 мар 19, 17:59    [21843044]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9393
Мимопроходящий,

RDB$GET_CONTEXT('SYSTEM', 'DB_NAME') не канает?
Ну и имя сервера localhost
25 мар 19, 18:09    [21843051]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47284

Симонов Денис
не прокатит из-за прав на MON$. В 3.0 SECURITY DEFINER ещё нет

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

Posted via ActualForum NNTP Server 1.5

25 мар 19, 18:23    [21843058]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

25.03.2019 18:09, Симонов Денис пишет:
> RDB$GET_CONTEXT('SYSTEM', 'DB_NAME') не канает?

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

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

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

СПАСИБО за наводку!

Posted via ActualForum NNTP Server 1.5

25 мар 19, 18:23    [21843059]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

блин!
дак ON EXTERNAL DATA SOURCE вообще не нужен оказался!

спасибо DS!

Posted via ActualForum NNTP Server 1.5

25 мар 19, 18:58    [21843078]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59689
Мимопроходящий> в чем трабл?

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

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

И шо, это реально лучше обычного варианта с флагом или внешней таблицы?

Posted via ActualForum NNTP Server 1.5

25 мар 19, 20:10    [21843136]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

погонял тесты при сравнительно нагруженной таблице.
просадка производительности всё же заметна.
вариант с EXECUTE STATEMENT ... WITH AUTONOMOUS TRANSACTION AS USER ...
на данный момент развития исторического материализма придётся исключить.
у-вы.

Posted via ActualForum NNTP Server 1.5

26 мар 19, 18:39    [21844162]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47284

Мимопроходящий
просадка производительности всё же заметна.

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

Posted via ActualForum NNTP Server 1.5

26 мар 19, 18:41    [21844165]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 531
Dimitry Sibiryakov
Мимопроходящий
просадка производительности всё же заметна.

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


Похоже, коту стало совсем нехрен делать
26 мар 19, 19:23    [21844198]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59689
СПМ> Похоже, коту стало совсем нехрен делать

И студеною зимой, и зеленою весной
И стобою и со мной, это яйца-а-а.
Ты проснешься на рассвете
Слышишь как смеются дети
Лишь бы только были эти, эти яйца-а-а. (с)

Posted via ActualForum NNTP Server 1.5

26 мар 19, 20:06    [21844246]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2628
Мимопроходящий
на данный момент развития исторического материализма придётся исключить.
у-вы.
Таким образом, тебе остаётся только UDR и memmap.
27 мар 19, 11:00    [21844726]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

27.03.2019 11:00, rdb_dev пишет:
> Таким образом, тебе остаётся только UDR и memmap.

любая инвазия в серверный процесс есть суксЪ.

Posted via ActualForum NNTP Server 1.5

27 мар 19, 11:57    [21844828]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9393
rdb_dev,

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

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

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

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




select
  t.mon$transaction_id,
  SF_USER_BY_TRANSACTION(t.mon$transaction_id) as username
from mon$transactions t
27 мар 19, 12:07    [21844848]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

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

не хотелось дёргать таблицы мониторинга.
да и эскалирование прав до уровня SYSDBA внутри процедуры с открытим паролем не есть гуд.
из всего предложенного и протестированного, наименее тормозной и относительно безопасный
способ - писать во временную таблицу.
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

27 мар 19, 12:45    [21844933]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

тьфу, очепятка.
не во временную, а во ВНЕШНЮЮ.

Posted via ActualForum NNTP Server 1.5

27 мар 19, 12:46    [21844937]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
hvlad
Member

Откуда:
Сообщений: 10245
Мимопроходящий,

делать insert с клиента после старта тр-ции - не вариант ?
27 мар 19, 12:55    [21844951]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

27.03.2019 12:55, hvlad пишет:
> делать insert с клиента после старта тр-ции - не вариант ?

теоретически можно.
но нужно перелопатить все приложения.
а это чуть более 2 тысяч модулей.
с явными и неявными стартами транзакций.
либо вшить код прямо в IBX.

Posted via ActualForum NNTP Server 1.5

27 мар 19, 13:04    [21844973]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59689
Мимопроходящий> но нужно перелопатить все приложения.


А прикладная цель какая - ловишь кого-то или статистику собираешь?

Posted via ActualForum NNTP Server 1.5

27 мар 19, 15:12    [21845158]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
m7m
Member

Откуда: Украина, Мариуполь
Сообщений: 1319
Гаджимурадов Рустам
А прикладная цель какая - ловишь кого-то или статистику собираешь?

21842937
27 мар 19, 15:35    [21845190]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59689
Понял, спасибо.

Posted via ActualForum NNTP Server 1.5

27 мар 19, 16:03    [21845225]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

с внешним файлом засада...

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

вот такой вот ACHTUNG...

Posted via ActualForum NNTP Server 1.5

28 мар 19, 17:52    [21846451]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59689
Мешанина получается?

Posted via ActualForum NNTP Server 1.5

28 мар 19, 19:15    [21846549]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

28.03.2019 19:15, Гаджимурадов Рустам пишет:
> Мешанина получается?

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

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


Posted via ActualForum NNTP Server 1.5

29 мар 19, 11:55    [21846928]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
hvlad
Member

Откуда:
Сообщений: 10245
Мимопроходящий,

external table - для импорта\экспорта, не для конкурентного доступа.
29 мар 19, 12:32    [21846969]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

имхо, просто туда никто не лазил ;)

Posted via ActualForum NNTP Server 1.5

29 мар 19, 13:26    [21847004]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
hvlad
Member

Откуда:
Сообщений: 10245
Мимопроходящий,

лазил.
29 мар 19, 13:45    [21847017]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

29.03.2019 13:45, hvlad пишет:
> лазил.

много возни?

Posted via ActualForum NNTP Server 1.5

29 мар 19, 13:57    [21847039]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
hvlad
Member

Откуда:
Сообщений: 10245
Мимопроходящий,

ещё раз - external table "оптимизированы" для монопольного доступа в режиме экпорт\импорт.
Никто не собирается приделывать туда синхронизацию и управление кешем для конкурентного доступа.
Это просто никому и низачем не нужно.
Для конкурентного доступа есть таблицы (внезапно! в СУБД есть таблицы - о как ?!)
29 мар 19, 14:17    [21847072]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

29.03.2019 14:17, hvlad пишет:
> ещё раз - external table "оптимизированы" для монопольного доступа в режиме экпорт\импорт.

нет там никакого монопольного доступа.

Posted via ActualForum NNTP Server 1.5

29 мар 19, 14:39    [21847110]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
hvlad
Member

Откуда:
Сообщений: 10245
Мимопроходящий,


"оптимизированы" для
29 мар 19, 15:06    [21847172]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29784

29.03.2019 15:06, hvlad пишет:
> *"оптимизированы" для *

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

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

Posted via ActualForum NNTP Server 1.5

29 мар 19, 15:13    [21847195]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3      [все]
Все форумы / Firebird, InterBase Ответить