powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Логирование изменений записи
86 сообщений из 86, показаны все 4 страниц
Логирование изменений записи
    #39562120
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Firebird 3.
Давно на просторах интернета встречал примеры, как можно довольно просто (но только с версии 2.1 или 2.5) логировать изменения полей конкретной записи централизовано. Т.е. сохранять в лог старое и новое значение.

Да, можно записывать в таблицу изменения, обозначая каждое поле, но это неудобно + рутина, т.к. таблиц много, полей много, к тому же если нужно изменить/добавить/удалить поле...

Просто хочется, не заботясь о названии таблицы и полей, скопипастить одинаковый код для триггеров нужных таблиц.
Как получать название таблицы в триггере уже есть пример 6980844

Я помню, что данные записывались в текстовом виде в BLOB типа:
Код: plaintext
1.
2.
3.
название поля = старое значение = новое значение
название поля = старое значение = новое значение
название поля = старое значение = новое значение
название поля = старое значение = новое значение

Может у кого есть примеры, идеи?

Может у FB 3 уже есть возможность создать один единый триггер, который будет реагировать на все таблицы? Иначе если менять что-то по всем триггерам, то рутина много времени отнимает. А если нужно будет создать скрипты для обновления другой базы...
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562124
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
30.11.2017 17:38, X11 пишет:
> Я помню, что данные записывались в текстовом виде в BLOB типа:

уху еть!
дайте два! (С)

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

напиши PSQL пакет утилит для автоматического формирования скрипта создания INSERT, UPDATE, DELETE триггеров и всё. И потом тупо пользуйся им
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562176
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Как получать название таблицы в триггере уже есть пример 6980844
1. создать один триггер на таблицы данных нельзя, никак. Для изменений DDL можно, но это другая тема.
2. с таким триггером как в "примере", вставка и обновление будет тормозить.
3. имя поля таким же способом получить будет можно, но бессмысленно, т.к. никак не привязать к new и old, даже через ES (там не будет этого контекста).
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562197
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv2. с таким триггером как в "примере", вставка и обновление будет тормозить.

Особенно, если ещё и в параллельную БД записывать?
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562210
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvникак не привязать к new и old
В принципе, это и не надо. Старые данные будут видны в предыдущей записи. Т.е. пишет только текущие.
Таким образом, можно в хранимой процедуре, если передать в неё имя таблицы, сделать как бы цикл по полям?
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562219
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,
'Таблиц много, полей много"... получаем сверхмедленную (на изменения) базу, в основном загруженную логами... тут очень важно логировать изменение логов, чтобы никто не подчистил...
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562221
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел ввиду, что не в одной транзакции много таблиц при добавлении.
Много таблиц - это значит, что справочники разные, др. служебные таблицы. Но добавление происходит в одну таблицу, а не сразу в 10.

Много таблиц + много полей - это много рутины при попытке подправить структуру, триггеры, процедуры. А было бы централизовано, было бы замечательно.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562222
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

в конце-концов, в IBE есть шаблоны таких триггеров. И есть тулза LogManager. Ну и, есть IBReplicator.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562225
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11> Но добавление происходит в одну таблицу, а не сразу в 10.

Блажен, кто верует. Триггеры и ХП вполне себе несколько таблиц меняют.

> Много таблиц + много полей - это много рутины при
> попытке подправить структуру, триггеры, процедуры.
> А было бы централизовано, было бы замечательно.

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

Некоторые просят протоколировать не только изменения, но и чтения. :)
...
Самое прикольное, что тот, кто выкатил требование "все должно протоколироваться", при эксплуатации обычно оказывается вообще не при делах.
Да и что потом с этими логами делать - непонятно.

А если продукт "коробочный", то протокол уровня "кто поменял данные в табличке" смысла не имеет.
Клиента обычно фик убедишь насчет необходимости хотя бы минимального администрирования, а тут - логи анализировать, "кто удалил накладную". Тут и в структуре базы разбираться нужно, и в бизнес-процессах.
Вот протоколирование уровня "документ" - другое дело, даже порой полезно, но это уже совсем другой уровень технической реализации...
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562234
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД, согласен. Можно добавить галочку в настройках для включения/отключения протоколирования.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562235
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам, да, оно само - так и должно быть. Что плохого в автоматизации? Ради этого всё и делается.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562236
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11чччД, согласен. Можно добавить галочку в настройках для включения/отключения протоколирования.

Объясни заказчику, что реализовать можешь.
Но полноценная реализация (система фиксации изменений, система анализа логов, обучение персонала, объясни насчет разницы между физической и логической структурами...) потребует отдельного времени на реализацию, затем затруднит реализацию основной бизнес-логики, в разы увеличит потребность в дорогой быстрой (SSD же ж) дисковой памяти и гарантированно сделает систему медленной при работе под нагрузкой.
Пусть принимает решение, что ему в первую очередь нужно - реализовать тотальную слежку или возможность формировать отчеты.

Бронированный "Черный ящик" весом в 5 тонн vs всепогодный гарантированный лазерный уничтожитель человеков для МиГ-66.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562237
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это всё отмазки.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562239
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Это всё отмазки.

Да. Бессмысленную работу следует игнорировать, из-за всех сил.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562240
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ладно. Может, будут идеи?
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562242
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Ну ладно. Может, будут идеи?
Напиши программку, генерирующую необходимую обвязку в базе и тексты триггеров для каждой таблички.
Посмотри, как в IBExpert сделано:
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562243
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562244
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД> Некоторые просят протоколировать не только изменения, но и чтения. :)

Подтверждаю. Буквально пару дней назад мне звонили, спрашивали -
"а можно узнать, кто ДД.ММ.ГГ распечатал такой-то документ?"
При том что, фактически, распечатать можно и мимо ПО вообще.

> Самое прикольное, что тот, кто выкатил требование
> "все должно протоколироваться", при эксплуатации
> обычно оказывается вообще не при делах.

Протоколирование тут ничем не выделяется, так почти со всеми
требованиями, ибо их выкатывают чаще всего не те, кому придётся
со всем этим работать, а их начальство (и это ещё хорошо, если
непосредственное, а не через-через). А внизу люди, как правило,
куда более адекватные - те хоть свою работу (рутину) ежедневную
более-менее знают, звёздных планов не строят.

> Да и что потом с этими логами делать - непонятно.

Ты уж совсем-то не перегинай. Логи нужны, чтобы когда наступит
"час Ха" найти виновного. И если логов не будет, виновного могут
не искать, а "назначить" (может, даже не одного). В т.ч. могут выбрать
кого-нибудь из ИТ. Правда, назначить могут даже при наличии логов,
было бы желание. :)

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

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

кстати, я еще IMHO добавлю, что логи надо из базы выгружать. Но так, чтобы можно было потом "найти негодяя". Просто с течением времени таблица логов станет охрененного размера, а бэкапить/ресторить все это добро все дольше и дольше.

p.s. Типа, как КЛАДР в 1С. Грузится в базу, опционально, по мере добавления клиента из какого-то региона. Но клиент что-то купит один раз, а этот кусок КЛАДРа будет торчать в базе вечно. И там же запись не об одном адресе, а целиком по региону. Понятно что это не лог, но тоже полу-бесполезная в базе информация.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562275
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv> кстати, я еще IMHO добавлю, что логи надо из базы выгружать.

От размеров зависит и от того, что ты называешь "выгружать".
Я не припомню случаев, когда нужно было более чем два года
назад (2 календарных - текущий неоконченный и предыдущий).
Соответственно, 01.01 - можно тупо очищать старые логи, они
итак в старых бэкапах сохраняются.

Касательно КЛАДР и пр. внешних источников - подгружать
по ходу можно только если ПО - *клиентское* - работает с
ними напрямую. Если нет - получаются всякие кривости.
Да и не самая это большая проблема, тот же КЛАДР в БД не
самый большой кусок. Ну если жмёт - ну можно вынести в
отдельный kladr.fdb и обращаться через on external, но это
сомнительная экономия, ИМХО.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562293
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамчччД> Некоторые просят протоколировать не только изменения, но и чтения. :)

Подтверждаю. Буквально пару дней назад мне звонили, спрашивали -
"а можно узнать, кто ДД.ММ.ГГ распечатал такой-то документ?"
При том что, фактически, распечатать можно и мимо ПО вообще.


А у меня сделано протоколирование распечатки документов. Оказалось очень удобно.
Запись в лог производится в момент отправки на печать из FastReport.
В лог пишется:

- дата-время
- user
- ip
- id печатной формы
- id документа

Причем это оказалось настолько удобно что коичество распечаток по документу выводится прямо в журнале документов, а зайя в свойства документа видно и все остальные поля лога.
К примеру если попытаться распечатать второй раз документ в виде "заказа на отгрузку" (для склада) - то выводится предупреждение что его уже печатали. Так же по бух. документам - видно печатали его или еще нет.

Места занимает немного, торможений тоже не вызывает.
Даже не стал делать опциональное отколючение логирования, логируется всегда.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562294
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvГаджимурадов Рустам,
кстати, я еще IMHO добавлю, что логи надо из базы выгружать. Но так, чтобы можно было потом "найти негодяя". Просто с течением времени таблица логов станет охрененного размера, а бэкапить/ресторить все это добро все дольше и дольше.


У меня так и сделано :)

Логи пишутся в рабочую базу, но есть механизм периодической выгрузки логов в специальную базу логов.
В рабочей оставляю записи примерно за последний год, остальное выгружаю в архивную.
В интерфейсе поиска по логам смотим по рабочей, при желании прямо оттуда же можно посмотреть и по архивной базе - программа сама коннектится к архивной.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562295
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень полезным иногда был бы лог изменений в строках документов, и я даже его делал но потом отключил т.к. раздувает базу очень быстро, и лог получается больше самих данных, а в размере базы 90% составляют эти данные.
Т.е. база раздуется в разы.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562296
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Триггеры я пишу вручную.
Делаю один триггер на все операции.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
CREATE OR ALTER TRIGGER SAUTOR_AIUD_LOGS FOR SAUTOR
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
as
declare variable vtname  varchar(31);
declare variable va      char(1);
declare variable vid_src integer;
begin
  --
  -- Логирование изменений
  --
  if (gen_id(GEN_SW_LOGS_SAUTOR, 0) = 0) then exit;
  --
  vtname = 'SAUTOR';
  --
  if (inserting) then begin va = 'I'; vid_src = new.id; end else
  if (updating ) then begin va = 'U'; vid_src = old.id; end else
  if (deleting ) then begin va = 'D'; vid_src = old.id; end
                 else begin va = '?'; vid_src = NULL;   end
  --
  -- обработка полей
  --
  if ((updating and new.id           is distinct from old.id          ) or inserting or deleting)
    then insert into logs(tname, fname, a, id_src, val) values(:vtname, 'ID'            , :va, :vid_src, new.id          );
  --
  if ((updating and new.name         is distinct from old.name        ) or inserting or deleting)
    then insert into logs(tname, fname, a, id_src, val) values(:vtname, 'NAME'          , :va, :vid_src, new.name        );
  --
end
^




Сам лог расчитан на логирование данных где первичный ключ таблицы имеет смысл в физическом мире и виден в интерфейсе.
В первую очередь это справочники.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
CREATE GENERATOR GEN_LOGS_ID;

CREATE TABLE LOGS (
    ID      INTEGER NOT NULL,
    TNAME   VARCHAR(31),
    FNAME   VARCHAR(31),
    ID_SRC  INTEGER,
    A       CHAR(1),
    VAL     VARCHAR(1000),
    A_DT    TIMESTAMP default current_timestamp,
    A_USER  VARCHAR(32) default current_user,
    A_IP    VARCHAR(253),
    A_EXE   VARCHAR(253) -- не используется
);

/******************************************************************************/

ALTER TABLE LOGS ADD CONSTRAINT LOGS_PK PRIMARY KEY (ID);

CREATE INDEX LOGS_A_DT   ON LOGS (A_DT);
CREATE INDEX LOGS_FNAME ON LOGS (FNAME);
CREATE INDEX LOGS_ID_SRC ON LOGS (ID_SRC);
CREATE INDEX LOGS_TNAME ON LOGS (TNAME);

/******************************************************************************/

SET TERM ^ ;

CREATE OR ALTER TRIGGER LOGS_BI_ID FOR LOGS
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gen_logs_id,1);
end
^


CREATE OR ALTER TRIGGER LOGS_BI_IP FOR LOGS
ACTIVE BEFORE INSERT POSITION 0
as
begin
  --
  -- Вставка IP вносившего изменение
  --
  select rdb$get_context('SYSTEM', 'CLIENT_ADDRESS')
    from rdb$database
    into NEW.a_ip;

/*
  -- этот вариант говорят что под нагрузкой плохо работает
  -- жрет много ресурсов формируя каждый раз ВСЕ MON$-таблицы
  select
    MON$REMOTE_ADDRESS,
    MON$REMOTE_PROCESS
  from MON$ATTACHMENTS
  where (MON$ATTACHMENTS.MON$ATTACHMENT_ID = current_connection)
  into NEW.a_ip, NEW.a_exe;
*/
end
^

SET TERM ; ^


/******************************************************************************/

COMMENT ON TABLE LOGS IS 
'Лог справочников.
Для фиксирования изменений в таблицах где есть primary key(id)';

**************************************************************************/

COMMENT ON COLUMN LOGS.TNAME IS 
'Имя таблицы - источника';

COMMENT ON COLUMN LOGS.FNAME IS 
'Имя поля в таблице-источнике';

COMMENT ON COLUMN LOGS.ID_SRC IS 
'Первичный ключ записи в таблице-источнике';

COMMENT ON COLUMN LOGS.A IS 
'Action (I/U/D)';

COMMENT ON COLUMN LOGS.VAL IS 
'Новое значение в логируемом поле';

COMMENT ON COLUMN LOGS.A_DT IS 
'Дата-время изменения';

COMMENT ON COLUMN LOGS.A_USER IS 
'Кто изменил';

COMMENT ON COLUMN LOGS.A_IP IS 
'С какого IP было изменение
Данные поля MON@ATTACHMENTS.MON$REMOTE_ADDRESS';

COMMENT ON COLUMN LOGS.A_EXE IS 
'Из какой программы были изменения.
Данные поля MON@ATTACHMENTS.MON$REMOTE_PROCESS';



Для некоторых случаев где нет доступного первичного ключа или он составной или он не имеет отношения к идентификации физического объекта - сделаны другие, специализированные таблицы и триггера логов.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562304
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks,
у тебя первичный ключ может меняться?

Код: sql
1.
 and new.id           is distinct from old.id 
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562329
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, поэтому спасибо разработчикам за гетерогенные запросы - можно логи хранить в соседней базе.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562335
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДfraks,
у тебя первичный ключ может меняться?

Код: sql
1.
 and new.id           is distinct from old.id 



Нет, не может.
Но в жизни разное бывает, и не дело триггера логирования упрощать ситуацию.
Его дело - записать в лог любое изменившееся поле, и ПК для него - просто частный случай поля.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562336
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11kdv, поэтому спасибо разработчикам за гетерогенные запросы - можно логи хранить в соседней базе.

Я не пользуюсь возможностью через одну базу делать коннекты в другую. Просто из приложения коннекчусь куда надо отдельным коннектом.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562370
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksif (inserting) then begin va = 'I'; vid_src = new.id; end else
if (updating ) then begin va = 'U'; vid_src = old.id; end else
if (deleting ) then begin va = 'D'; vid_src = old.id; end
else begin va = '?'; vid_src = NULL; end
--

может красивей использовать when then?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
      --АУДИТ
      SELECT TABLE_NAME FROM GET_TABLE_NAME_FOR_TRIGGER INTO :STABLE;
      INSERT INTO JOURNAL (TABLE_NAME, ACT, ID_OBJ)
        VALUES (:STABLE,
                CASE
                  WHEN INSERTING THEN 'INSERTING'
                  WHEN UPDATING THEN 'UPDATING'
                  WHEN DELETING THEN 'DELETING'
                END,
                CASE
                  WHEN INSERTING THEN NEW.ID
                  WHEN UPDATING THEN OLD.ID
                  WHEN DELETING THEN OLD.ID
                END
                );
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562462
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11,
Логирование - все просто!
Лог ведут триггеры after insert or update od delete на каждой таблице, которой нужно протоколирование

текст триггеров генерится процедурой, которая обсасывает системные таблицы RDB$RELATION_FIELDS, RDB$FIELDS примерно в таком виде

Код: plsql
1.
2.
3.
4.
5.
'create or alter trigger LOG$'||:TABLENAME||' for '||:TABLENAME||
    'ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 256'||
    'as'||
    'begin'
    ...



Еще существует процедурка (допустим DBA$INIT_LOG(RELATION_NAME varcar(13) character set UNICODE_FSS), которая вызывает предыдущую получает у нее текст триггера и в execute statement компилирует его. Она де грантит этому триггеру все необходимые права.

При необходимости внести изменения в структуру таблицы делаем
Код: plsql
1.
2.
3.
4.
5.
drop trigger LOG$TABLENAME;

DDL операторы...

execute  procedure DBA$INIT_LOG('TABLENAME');



все.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562490
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sonkz, т.е. на каждый insert/update генерируется каждый раз и пересоздается триггер?
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562502
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11sonkz, т.е. на каждый insert/update генерируется каждый раз и пересоздается триггер?

Да, на каждую таблицу, которой нужно протоколирование создается(или пересоздается) один триггер.

Создание (или изменение) триггера происходит при вызове процедуры DBA$INIT_LOG
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562542
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о нет, думаю, это существенно заменит добавление/изменение записи
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562550
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11о нет, думаю, это существенно заменит добавление/изменение записи
По сравнению с чем?
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562561
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11о нет, думаю, это существенно заменит добавление/изменение записи

Замедлит? О какой записи идет речь?
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562566
мастер_ёда
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Много лет пользуюсь протоколированием от IBExpert, слегка доработал под свою задачу (доп. ключевые поля+индексы).
Зачем лисапед изобретаете?
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562567
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД, по сравнению с тем, когда не нужно перекомпилировать/пересоздавать триггер каждый раз.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562568
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sonkz, как о какой?

О записи информации в базу. Триггер срабатывает когда в базу записывается информация.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562570
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мастер_ёда, за тем, что я не для себя хочу реализовать, а для простого юзверя, который, может, с вилами на ПК кидается.
Ему под капот не нужно лезть, а достаточно выбрать условия и нажать "Отобразить аудит действий пользователей".
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562571
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
01.12.2017 14:36, X11 пишет:
> Ему под капот не нужно лезть,
> а достаточно выбрать условия и нажать
> "Отобразить аудит действий пользователей".

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

А "каждый раз" это когда?
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562584
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7m, когда добавляется/меняется запись в таблице.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562585
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11m7m, когда добавляется/меняется запись в таблице.Пациент путает педали.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562587
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11m7m, когда добавляется/меняется запись в таблице.
Или никто такое не утверждал, или я невнимательно читал
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562595
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логирование физических таблиц - это аудит низкого уровня, в котором не каждый ИТ-специалист разберётся, кроме того, что "вот этот тогда-то похоже что-то сделал".
Потому что время, когда 1 таблица - "шапки", и ещё 1-2 - "Товары", "Платежи" для одного документа, уже давно прошли.
Сейчас заполнишь одно поле в документе - и это вызывает изменения в 10-ке разных таблиц, часто неочевидных.

Для отслеживания "когда, кто", по-моему, следует стремиться к прикладным объектам, и отслеживание это зачастую не на уровне СУБД, хотя часть (или всё) можно туда навесить.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562615
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11m7m, когда добавляется/меняется запись в таблице.

Триггер, изменяется ТОЛЬКО когда изменяется таблица (метаданные), а все остальное время он молча пишет все изменения в ДАННЫХ в таблицы логов.

Можно, заставить его заглядывать в настроечные таблицы, чтоб посмотреть поставил ли там юверь галочку - протоколировать, или не поставил для конкретного события( insert, update, delete или update каких полей он хочет протоколировать)
Только тогда нужно еще протоколировать настройки протоколирования.
А потом настройки протоколирования настроек протоколирования, и т.д.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562619
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда нужен триггер/событие, который будет определять, что структура целевой таблицы изменилась, например, добавилось поле или удалено поле. Чтобы сочинить новое тело триггера для логирования.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562622
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мастер_ёдаМного лет пользуюсь протоколированием от IBExpert, слегка доработал под свою задачу (доп. ключевые поля+индексы).
Зачем лисапед изобретаете?

У меня все это работало еще до того, как IBExpert научился. Во какой я старый! http://www.sql.ru/forum/images/cry.gif
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562624
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11Тогда нужен триггер/событие, который будет определять, что структура целевой таблицы изменилась, например, добавилось поле или удалено поле. Чтобы сочинить новое тело триггера для логирования.

Есть такой триггер - называется разработчик БД!
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562627
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Тогда нужен триггер/событие, который будет определять, что структура целевой таблицы изменилась, например, добавилось поле или удалено поле. Чтобы сочинить новое тело триггера для логирования.

DDL триггеры в 3.0
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562629
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, да, надо покурить эту тему.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562634
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11да, надо покурить эту тему.

В трезвом состоянии - не советую, это очень неприятная трава.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562635
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Тогда нужен триггер/событие, который будет определять, что структура целевой таблицы изменилась, например, добавилось поле или удалено поле. Чтобы сочинить новое тело триггера для логирования.
Это уже дичайший гон.
У тебя что, сами собой структуры таблиц меняются?
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562645
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,
ты, конечно же, знаешь о том, что объекты в БД могут быть зависимыми. К примеру, ты не сможешь удалить поле в табличке, если это поле явно используется в процедуре или в триггере. Не даст тебе СУБД.
Т.е, "просто так" менять структуру табличек не получится.
Только предварительно "загасив" все зависимости.

Сие часто делается с помощью специально сгенерированного специальными инструментами специального скрипта. Во время генерации которого вполне можешь заодно и синхронизировать твои триггеры.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562646
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, тогда нужно так, как я хотел изначально. Просто в цикле по полям записывать всё в BLOB
поле=значение
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562647
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД, если программа применяет скрипт обновления структуры базы.
Не обязательно программа/база в единственном экземпляре. Есть же и коробочное ПО.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562648
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД, про зависимости знаю.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562653
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,
вот именно насчёт коробочного. Неужели у тебя пользователи самовольно, минуя твои инструменты, имеют право корежить структуру базы? Если все же "да", то пусть у них голова о логировать и болит, раз такие ушлые.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562661
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Симонов Денис, да, надо покурить эту тему.
Если ты хочешь на лету менять из одного триггера другие - лучше не рассказывай здесь об этом.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562667
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

нет конечно. Но оповестить систему что нужный нам триггер требует пересборки/перекомпиляции можно.
Я делал PSQL пакет который автоматически генерирует скрипты для логирующих триггеров (но не выполняет их). Он использует таблицу в которой хранится какие таблицы надо логировать. Так вот DDL триггер может сделать пометку в этой таблице, что триггер надо пересоздать.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562669
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДНеужели у тебя пользователи самовольно, минуя твои инструменты, имеют право корежить структуру базы?

нет, но если устанавливается обновление...
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562672
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис прав. Создание / изменениетермометров тренерами, это без бутылки тяжело...
На какое событие писать триммеры? А если оно не наступит? Например, не дропнешь и не изменишь поле если оно используется в триггерах
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562673
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините, с телефона пишу
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562680
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос касается производительности.
Есть 3 основных типа события: добавление, удаление, изменение.
Как лучше их хранить в базе? В виде текстового поля или целого числа?
С тем учетом, что на клиенте тоже нужно выводить пользователю на экран/экспорт/печать в понятном виде, а не в виде числа или слова "INS/UPD/DEL"?
Может так и хранить: "Добавление/Изменение/Удаление"? Зато на клиенте не придётся ничего "конвертировать".
С др. стороны вместо числа можно легко подставить значок из ImageList.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562685
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11,

Сначала надо курить хранение и отображение данных. Потом что-нибудь Про реляционные базы. Потом задавать вопросы.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562700
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Просто в цикле по полям записывать всё в BLOB поле=значениеЭто похоже не лечится... пациент упорно целится себе в ногу. Представь блоб на пару десятков гиг с такими парами значений. Ты ж утонешь на его анализе. Блин, имея под рукой СУБД пихать все в блоб как минимум глупо. Блоб это некая неделимая сущность, ну картинка или видеоролик.

Автору читать букварь про нормализацию и самый первый шаг, распределение сущностей по полям таблиц.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562710
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky Представь блоб на пару десятков гиг с такими парами значений. Ты ж утонешь на его анализе.

Да ладно... Все еще до анализа умрет, на добавлении очередных записей протокола в блоб :)
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562714
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то вроде такого (это грубо в blob)
тело процедуры
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
BEGIN
  S = '';// blob
  CRLF = ASCII_CHAR(10);

  FOR SELECT F.RDB$FIELD_NAME FROM RDB$RELATION_FIELDS F WHERE UPPER(F.RDB$RELATION_NAME) = UPPER(:TABLENAME) AND F.RDB$FIELD_NAME IS NOT NULL INTO :FNAME
  DO
  BEGIN

    IF (S = '') THEN
      S = S || :FNAME || ' = ';
    ELSE
      S = S || :CRLF || FNAME || ' = ';

  END

  INSERT INTO JOURNAL (JOURNAL.ID_OBJ, JOURNAL.DATA) VALUES(:ID_OBJ, :S);
END



Примерно такое я где-то давно видел, как писал ранее.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562719
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyТы ж утонешь на его анализе

анализ заключается в том, чтобы найти найти в логе по ID нужный объект и посмотреть значения полей
Код: plaintext
1.
2.
date= ...
price = ...
remark = ...

вот я и пытаюсь сделать какой-нибудь приемлемый формат.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562722
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11вот я и пытаюсь сделать какой-нибудь приемлемый формат.

А просто посмотреть, как в том же эксперте это сделано, и допилить под себя - не судьба?
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562725
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
01.12.2017 17:07, IBExpert пишет:
> А просто посмотреть, как в том же эксперте это сделано, и допилить под себя - не судьба?

не взлетит.
тут программист нужен (С)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562738
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий, бе-бе-бе
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562742
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,

Я еще в начале страницы это сказал.Для БД разработчик нужен.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562743
_NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11Ivan_PisarevskyТы ж утонешь на его анализе

анализ заключается в том, чтобы найти найти в логе по ID нужный объект и посмотреть значения полей
Код: plaintext
1.
2.
date= ...
price = ...
remark = ...

вот я и пытаюсь сделать какой-нибудь приемлемый формат.
Можно так:
Код: sql
1.
2.
3.
FieldId=NonStrValue
FieldId="StrValue"
FieldId=


#13 в качестве перевода строки. Если в StrValue есть двойные кавычки, то задвоить их. Если значение пустое, то это null.
При апдейте писать старые значения вроде не нужно, т.к. они есть в предыдущих записях лога.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562754
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_NickDeeПри апдейте писать старые значения вроде не нужно, т.к. они есть в предыдущих записях лога.

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

не пытайся съесть утюг. Хранение записи в виде блобов это обрыв
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562760
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertX11вот я и пытаюсь сделать какой-нибудь приемлемый формат.

А просто посмотреть, как в том же эксперте это сделано, и допилить под себя - не судьба?

Вижу, что есть заголовок и тело, а где подсмотреть, как записываются туда данные?

...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562770
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

так он сам туда пишет.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562782
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Вижу, что есть заголовок и тело, а где подсмотреть, как записываются туда данные?


Не туда смотришь. Менеджер протоколов данных живет в меню Инструменты. Данные записываются триггерами.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39562796
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks> А у меня сделано протоколирование распечатки документов.
fraks> Запись в лог производится в момент отправки на печать из FastReport.

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

Так и должно быть?

...
Рейтинг: 0 / 0
Логирование изменений записи
    #39564795
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамfraks> А у меня сделано протоколирование распечатки документов.
fraks> Запись в лог производится в момент отправки на печать из FastReport.

Можно-то можно, можно даже очень удобно. Но ведь эти
"документы" вполне можно и мимо отчетника распечатать,
особенно если форма простая (реестры всякие итп).


Это ничего не меняет.
Подделать можно все, если оно того стОит.
Можно подделать и подпись и печать.
Но у нас 100% распечаток делается только через предусмотренный для этого софт.

Кроме того, даже не при 100% достоверности, эта информация полезна в реальной практике.
Не забыл ли менеджер распечатать счет-фактуру, сколько экземпляров.
С какого компа и кто ее печатал.
КОГДА.
Так же интересен факт отсутствия распечатки. Если заказ на отгрузку не распечатывался - то склад по любому этот отбор не начинал собирать.
Если распечатывался - то печатать второй раз один и тот же документ - чревато повторным сбором одного и того же документа.
Если печатались наклейки - то когда, и как это соотносится с другими распечатками.
Если бухгалтера не могут найти бумажный документ - смотрим когда он распечатывался. Если никогда - то и искать нечего :)
и.т.п.
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39565336
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks> Кроме того, даже не при 100% достоверности,
fraks> эта информация полезна в реальной практике.

C этим я нисколько не спорю.
Всему/многому можно найти полезное применение.
Просто это не панацея и не универсальное решение,
особенно для всяких орг.выводов и наказаний.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Логирование изменений записи
    #39565496
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамfraks> Кроме того, даже не при 100% достоверности,
fraks> эта информация полезна в реальной практике.

C этим я нисколько не спорю.
Всему/многому можно найти полезное применение.
Просто это не панацея и не универсальное решение,
особенно для всяких орг.выводов и наказаний.


До меня не доходит идея аргументов.
"Не панацея и не универсальное" - и поэтому что? не иметь таких логов?

А что панацея для орг.выводов?

IMHO как раз этот лог и есть основание для орг. выводов.

Почему поздно собрали отбор?
Склад: - поздно принесли документ.
Менеджер: - я отдал еще утром.
Начальник: - смотрим лог, документ распечатан после обеда, значит:
- про распечатку еще утром - враньё
- склад не виноват.
...
Рейтинг: 0 / 0
86 сообщений из 86, показаны все 4 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Логирование изменений записи
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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