powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Логирование изменений записи
25 сообщений из 86, страница 1 из 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
25 сообщений из 86, страница 1 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Логирование изменений записи
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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