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

Откуда:
Сообщений: 3
fb 2.5.8

в триггере before update добавляю следующую конструкцию.

---------------------------------------------------------
insert into rkc_area_logs (
LODGINGS_ID,
start_period_old,
start_period_new,
Living_area_old,
Living_area_new,
total_area_old,
total_area_new,
DATE_upd,
ip_address,
process)
Select new.lodgings_id,
old.start_period,
new.start_period,
old.living_area,
new.living_area,
old.total_area,
new.total_area,
current_date,
a.MON$REMOTE_ADDRESS,
a.MON$REMOTE_PROCESS
from MON$TRANSACTIONS t
join MON$ATTACHMENTS a on t.MON$ATTACHMENT_ID=a.MON$ATTACHMENT_ID
where t.MON$TRANSACTION_ID= current_transaction;

---------------------------------------------------------

Тестируюсь в IBExperte, при апдейте целевой таблицы запись в таблицу логов идет, и MON$REMOTE_ADDRESS такой как надо 192.168.0.25,
а при апдейте целевой таблицы из сторонней программы, в MON$REMOTE_ADDRESS пишется 127.0.0.1. Хотя, сторонняя программа запускается с моей же машины и адрес должен быть 192.168.0.25.
12 апр 18, 12:29    [21332832]     Ответить | Цитировать Сообщить модератору
 Re: Помогите настроить логирование в триггере  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 27654
serg_warlock
current_date,
a.MON$REMOTE_ADDRESS,


не надо так делать. Обращение к mon$ ресурсоемко, при увеличении количества пользователей время обращения будет только увеличиваться, а если в эту таблицу часто вставляются записи, то с производительностью будет вообще крандец.
Для примера, в зависимости от системы, на сотне и больше пользователей время получения снимка MON$ сервером может длиться от нескольких секунд до нескольких минут.
А снимок будет делаться каждый раз, когда такой триггер сработает в новой транзакции.
serg_warlock
Хотя, сторонняя программа запускается с моей же машины и адрес должен быть 192.168.0.25.

не должен. как раз должен быть 127.0.0.1, что означает коннект с этой же машины, где и сервер.
12 апр 18, 12:59    [21332956]     Ответить | Цитировать Сообщить модератору
 Re: Помогите настроить логирование в триггере  [new]
serg_warlock
Member

Откуда:
Сообщений: 3
kdv,
Спасибо. попробовал на на базе с другой машины все получилось :)
12 апр 18, 13:28    [21333101]     Ответить | Цитировать Сообщить модератору
 Re: Помогите настроить логирование в триггере  [new]
Василий 2
Member

Откуда:
Сообщений: 306
kdv
serg_warlock
current_date,
a.MON$REMOTE_ADDRESS,


не надо так делать. Обращение к mon$ ресурсоемко, при увеличении количества пользователей время обращения будет только увеличиваться, а если в эту таблицу часто вставляются записи, то с производительностью будет вообще крандец.
Для примера, в зависимости от системы, на сотне и больше пользователей время получения снимка MON$ сервером может длиться от нескольких секунд до нескольких минут.
А снимок будет делаться каждый раз, когда такой триггер сработает в новой транзакции.

Можно сделать отдельную таблицу юзеров и писать в лог только ИД, либо в on connect сохранить нужные реквизиты в Set_Context и потом уже брать их оттуда
12 апр 18, 19:35    [21334685]     Ответить | Цитировать Сообщить модератору
 Re: Помогите настроить логирование в триггере  [new]
serg_warlock
Member

Откуда:
Сообщений: 3
Василий 2, в данном конкретном случае логировал справочную таблицу, которую правят редко. Да и пользователей у которых есть возможность это сделать всего 15. Так что задача пока решена. Логировать большие таблицы, с которыми работают все пока не нужно. :) Вариант с контекстными переменными мне понравился. Если наклонят логировать большие таблицы попробую его реализовать
13 апр 18, 09:16    [21335510]     Ответить | Цитировать Сообщить модератору
 Re: Помогите настроить логирование в триггере  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1394
kdv
serg_warlock
current_date,
a.MON$REMOTE_ADDRESS,


не надо так делать. Обращение к mon$ ресурсоемко, при увеличении количества пользователей время обращения будет только увеличиваться, а если в эту таблицу часто вставляются записи, то с производительностью будет вообще крандец.


В справке для 2.5.4 есть такая штука как:

RDB$GET_CONTEXT ('SYSTEM', 'CLIENT_ADDRESS');

CLIENT_ADDRESS:

- Для TCPv 4 – IP адрес,
- для XNET – локальный ID процесса.
- Для остальных случаев NULL.
16 апр 18, 03:53    [21341393]     Ответить | Цитировать Сообщить модератору
 Re: Помогите настроить логирование в триггере  [new]
Arioch
Member

Откуда:
Сообщений: 10176
fraks,

насколько понимаю, эти переменные заполняет клиентская либа "руками" ???

Т.е. если вдруг программа соединяется через fbclient.dll 1.x ( или аналогично старые jaybird/NetProvider ), то эти переменные останутся пустыми?
16 апр 18, 14:21    [21342490]     Ответить | Цитировать Сообщить модератору
 Re: Помогите настроить логирование в триггере  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 6783
Arioch,

MON$REMOTE_ADDRESS (он же RDB$GET_CONTEXT('SYSTEM', 'CLIENT_ADDRESS')) "заполняется" сервером и никак не зависит от версии клиента. Как и MON$REMOTE_PROTOCOL. А вот REMOTE_PID, REMOTE PROCESS "заполняются" клиентом.
16 апр 18, 15:07    [21342632]     Ответить | Цитировать Сообщить модератору
 Re: Помогите настроить логирование в триггере  [new]
Arioch
Member

Откуда:
Сообщений: 10176
dimitr
MON$REMOTE_ADDRESS (он же RDB$GET_CONTEXT('SYSTEM', 'CLIENT_ADDRESS')) "заполняется" сервером


Любопытно. А "RDB$GET_CONTEXT('SYSTEM', 'CLIENT_ADDRESS')" в каком смысле "он же" ?
Паузы сравнимой со временем фиксации MON-таблицы не будет ?
16 апр 18, 15:46    [21342794]     Ответить | Цитировать Сообщить модератору
 Re: Помогите настроить логирование в триггере  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 6783
Arioch
Любопытно. А "RDB$GET_CONTEXT('SYSTEM', 'CLIENT_ADDRESS')" в каком смысле "он же" ?

это разные механизмы получения одной и той же информации

Arioch
Паузы сравнимой со временем фиксации MON-таблицы не будет ?

не будет
16 апр 18, 16:18    [21342873]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить