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

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

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

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

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

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

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


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

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

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

КАКИМ каком?

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

Откуда: Рязань
Сообщений: 9634
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

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

автономная тр-ция тоже будет 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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

в чем трабл?

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

спасибо DS!

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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


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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

Откуда: Рязань
Сообщений: 9634
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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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


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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

много возни?

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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


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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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