SQLRU.net - RDF-канал
type: channel
description: Разработка приложений баз данных
items: логгирование работы
items: Re: логгирование работы

логгирование работы
type: item
description: Комрады, поделитесь, плз, практическими советами и хитростями по логированию работы БД. Интересуют детали, типа: структура таблицы логов, примеры триггеров и проч.проч.
creator: Док
date: 2022-09-05T08:53:28-00:00

Re: логгирование работы
type: item
description: проще всего подсмотреть у Хвастунова. у него такая система уже внедрена в IBExpert.
creator: МП
date: 2022-09-05T08:58:08-00:00

Re: логгирование работы
type: item
description: ОК, тогда такой вопрос: как из системных таблиц "достать" имя текущей в триггере?
creator: Док
date: 2022-09-05T14:59:50-00:00

Re: логгирование работы
type: item
description: Док ОК, тогда такой вопрос: как из системных таблиц "достать" имя текущей в триггере? руками.
creator: МП
date: 2022-09-05T15:13:50-00:00

Re: логгирование работы
type: item
description: Имя текущей чего?
creator: sim_84
date: 2022-09-05T15:24:14-00:00

Re: логгирование работы
type: item
description: sim_84 писал(а) Mon, 05 September 2022 18:24 Имя текущей чего? И текущей куда? Док, если просто посмотреть на структуры системных таблиц, масса вопросов отпадёт сама собой. В данном случае - вторая строчка в структуре таблицы rdb$triggers
creator: Старый Плюшев
date: 2022-09-05T15:30:07-00:00

Re: логгирование работы
type: item
description: Док писал(а) Mon, 05 September 2022 17:59 ОК, тогда такой вопрос: как из системных таблиц "достать" имя текущей в триггере? Из никакой. Ты пишешь триггер и не знаешь - для какой он таблицы ?
creator: hvlad
date: 2022-09-05T15:45:28-00:00

Re: логгирование работы
type: item
description: hvlad Ты пишешь триггер и не знаешь - для какой он таблицы ? я так полагаю, что это "универсальный триггер". (шаблон) зы: мопед не мой, если чо
creator: МП
date: 2022-09-05T15:50:11-00:00

Re: логгирование работы
type: item
description: МП писал(а) Mon, 05 September 2022 18:50 hvlad Ты пишешь триггер и не знаешь - для какой он таблицы ? я так полагаю, что это "универсальный триггер". (шаблон) зы: мопед не мой, если чо ты оракулом не пробовал подрабатывать? Который раз угадываешь мои хотелки
creator: Док
date: 2022-09-05T16:33:19-00:00

Re: логгирование работы
type: item
description: hvlad писал(а) Mon, 05 September 2022 18:45 Док писал(а) Mon, 05 September 2022 17:59 ОК, тогда такой вопрос: как из системных таблиц "достать" имя текущей в триггере? Из никакой. Ты пишешь триггер и не знаешь - для какой он таблицы ? тупо в каждой табл в триггере прописывать название евоной таблицы - не по-программистски. Но, если так разрешено, то сделаю так о_О. зы. думал, щас научат гуманитария старшие товарищи, как тру кодеры код пишут. Заодно узнаю кучу новых терминов. А фиг
creator: Док
date: 2022-09-05T16:36:31-00:00

Re: логгирование работы
type: item
description: Старый Плюшев писал(а) Mon, 05 September 2022 18:30 Док, если просто посмотреть на структуры системных таблиц, масса вопросов отпадёт сама собой. В данном случае - вторая строчка в структуре таблицы rdb$triggers Спасибо, Алексан Владимыч, от нынешней братии такой душевной подсказки не дождесси - все норовят разраженно подколоть. Хотел слентяйничать - теперь уж опять туда полезу, пока не выучу все поля наизусть
creator: Док
date: 2022-09-05T16:40:43-00:00

Re: логгирование работы
type: item
description: Этот вопрос появляется каждый раз, когда в очередной раз начинают изобретать этот велосипед. Ответ не меняется годами. ЗЫ масло - масляное
creator: hvlad
date: 2022-09-05T16:57:06-00:00

Re: логгирование работы
type: item
description: МП писал(а) Mon, 05 September 2022 18:50 hvlad Ты пишешь триггер и не знаешь - для какой он таблицы ? я так полагаю, что это "универсальный триггер". (шаблон) Это и не подлежало сомнению. Штука в том, что "универсальный" он только до момента применения (инстанциирования) шаблона. И почему-то авторам не приходит в голову что, хотя имя таблицы в заголовке триггера уже является пар-ром шаблона, они почему-то считают "некомильфо" использовать этот же пар-р в теле триггера. Я никогда не мог этого понять... ЗЫ я не ругаюсь, если что
creator: hvlad
date: 2022-09-05T17:01:18-00:00

Re: логгирование работы
type: item
description: Док, а, кстати, сакраментальный вопрос контрразведчика - с какой целью интересуетесь? В смысле что хочешь с лога поиметь?
creator: Старый Плюшев
date: 2022-09-05T18:01:54-00:00

Re: логгирование работы
type: item
description: У меня есть несколько систем логирования, наиболее общая и понятная - это логирование таблиц справочников, у которых первичный ключ - ID и он идентифицирует объект. Т.е. когда нам интересна история изменения объекта - то идентификатор этого объекта - ID. Сам лог сделан вот так. 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), VAL_OLD 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; 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.VAL_OLD IS 'Старое значение в логируемом поле'; COMMENT ON COLUMN LOGS.A_DT IS 'Дата-время изменения'; COMMENT ON COLUMN LOGS.A_USER IS 'Кто изменил'; COMMENT ON COLUMN LOGS.A_IP IS 'С какого IP было изменение'; COMMENT ON COLUMN LOGS.A_EXE IS 'Из какой программы были изменения.'; А на таблицах которые нужно логировать делается такого плана триггеры. Тест триг…
creator: fraks
date: 2022-09-06T02:13:48-00:00

Re: логгирование работы
type: item
description: Вот так выглядит лог свойств документа в этой таблице. +----+-----------------------+-----------+--------------+---------+-----------+---+---------------+-----------------+--------------------------+ | DB | Дата время | IP-адрес | Пользователь | Таблица | ID | A | Поле | Старое значение | Новое значение | +----+-----------------------+-----------+--------------+---------+-----------+---+---------------+-----------------+--------------------------+ | W | 2022-09-05 - 08:52:23 | 10.0.0.9 | USER12 | BDOK | 1 544 265 | I | ID | <null> | 1544265 | | W | 2022-09-05 - 08:52:23 | 10.0.0.9 | USER12 | BDOK | 1 544 265 | I | NDOK | <null> | 1827602 | | W | 2022-09-05 - 08:52:23 | 10.0.0.9 | USER12 | BDOK | 1 544 265 | I | IO | <null> | F | | W | 2022-09-05 - 08:52:23 | 10.0.0.9 | USER12 | BDOK | 1 544 265 | I | OPER | <null> | 0 | | W | 2022-09-05 - 08:52:23 | 10.0.0.9 | USER12 | BDOK | 1 544 265 | I | TYPE_ | <null> | 1 | | W | 2022-09-05 - 08:52:23 | 10.0.0.9 | USER12 | BDOK | 1 544 265 | I | IDPOST | <null> | 13420 | | W | 2022-09-05 - 08:52:23 | 10.0.0.9 | USER12 | BDOK | 1 544 265 | I | IDHEAD | <null> | 85 | | W | 2022-09-05 - 08:52:23 | 10.0.0.9 | USER12 | BDOK | 1 544 265 | I | IDHEAD_G | <null> | 85 | | W | 2022-09-05 - 08:52:23 | 10.0.0.9 | USER12 | BDOK | 1 544 265 | I | IDHEAD2 | <null> | 5011 | | W | 2022-09-05 - 08:52:23 | 10.0.0.9 | USER12 | BDOK | 1 544 265 | I | IDHEAD2_G | <null> | 5011 | | W | 2022-09-05 - 08:52:23 | 10.0.0.9 | USER12 | BDOK | 1 544 265 | I | IDACCAGR | <null> | 22120 | | W | 2022-09-05 - 08:52:23 | 10.0.0.9 | USER12 | BDOK | 1 544 265 | I | SUMM_MODE | <null> | 1 | | W | 2022-09-05 - 08:52:23 | 10.0.0.9 | USER12 | BDOK | 1 544 265 | I | DATA | <null> | 2022-09-05 00:00:00.0000 | | W | 2022-09-05 - 08:52:23 | 10.0.0.9 | USER12 | BDOK | 1 544 265 | I | DATA_PAY | <null> | 2022-09-05 00:00:00.0000 | | W | 2022-09-05 - 08:52:23 | 10.0.0.9 | USER12 | BDOK | 1 544 265 | I | DATA_DEB | <null> | 2022-09-05 00:00:00.0000 | | W | 2022-09-05 - 08:52:2…
creator: fraks
date: 2022-09-06T02:22:35-00:00

Re: логгирование работы
type: item
description: Еще ведутся логи коннектов, лог печати документов, лог экспорта в бухгалтерию, лог изменения остатков, лог запросов от информационных киосков и т.п. Это уже все разной конструкции логи.
creator: fraks
date: 2022-09-06T02:27:34-00:00

Re: логгирование работы
type: item
description: @fraks Володя, спасибо. Как всегда, основательно Есть, над чем подумать @Старый Плюшев С целью кто и что удалил из данных, если что Вообще-то, в этот раз я спланировал архитектуру так, что записи физически не удаляются, а помечаются "удаленными" (физически удалить их может только DBA). А логи только помогут найти виновных. Просто есть пару заказов от мелких клиник, там потеря данных критична @hvlad У меня как раз есть желание избежать велосипедостроительства. И твои дельные советы оказали бы мне более существенную помощь, чем сарказм
creator: Док
date: 2022-09-06T11:35:14-00:00

Re: логгирование работы
type: item
description: Док писал(а) Tue, 06 September 2022 13:35 в этот раз я спланировал архитектуру так, что записи физически не удаляются, а помечаются "удаленными" А ты уже спланировал архитектуру так, чтобы каждый пользователь ходил под собственным логином и никто не мог работать под соседским?..
creator: SD
date: 2022-09-06T11:43:24-00:00

Re: логгирование работы
type: item
description: Док Вообще-то, в этот раз я спланировал архитектуру так, что записи физически не удаляются, а помечаются "удаленными" (физически удалить их может только DBA). А логи только помогут найти виновных. Просто есть пару заказов от мелких клиник, там потеря данных критична там где помечаешь запись "удалённой", там же и помечай КТО и КОГДА. я же показывал как. полное логгирование всего и вся в большинстве случаев нафиг не нужно.
creator: МП
date: 2022-09-06T12:13:59-00:00