Перейти к основному содержимому

Таблицы журналов

Журнал изменений REPL$CHANGELOG​

Журнал изменений – таблица REPL$CHANGELOG – заполняется с помощью триггеров. При изменении (добавлении, модификации, удалении) записи в реплицируемой таблице выполняется триггер, который вносит в журнал изменений запись со следующими полями:

IDКлюч таблицы – уникальный в данной БД идентификатор события изменения записи в одной из реплицируемых таблиц
TABLENAMEИмя таблицы, в которой произошло изменение
REPLIDСуррогатный ключ измененной записи
REPLGRPID
OPТип изменения: добавление, модификация или удаление записи
MODIFYDATEМомент (дата и время) изменения.
OWNGRPIDИдентификатор БД-«автора», или «владельца», изменения.
FROMGRPIDЕсли данное изменение произошло не в текущей БД, а получено при репликации из другой БД, здесь зафиксирован идентификатор этой БД-источника. Значение поля изначально (в базе-«владельце» и ее ЦБД) совпадает с идентификатором «владельца» и меняется в БД-дистрибьюторе при каскадной репликации (когда уровней в структуре баз данных больше двух).
TOGRPIDИзменение может быть адресовано только одной филиальной БД, тогда это поле содержит идентификатор базы-адресата. ЦБД при репликации не направит данное изменение в филиалы, отличные от адресата. Для заполнения поля нужны нестандартные пользовательские триггеры.

Детальный журнал репликации REPL$CHANGELOGDET​

В детальном журнале учитывается, в какие базы данных каждое изменение уже было успешно передано. Детальный журнал заполняется сервером репликации на основе анализа журнала REPL$CHANGELOG и успешности передачи изменения в другие БД.

Для минимизации объема передаваемых между БД сообщений об изменениях, репликатор передает только те изменения, которые влияют на конечное (актуальное) состояние измененной записи. Изменения, перечисленные в REPL$CHANGELOG, либо действительно отправляются в другие базы, либо просто помечаются как обработанные (поле DTYPE детального журнала):

IDИдентификатор записи (из журнала изменений) об операции изменения.
REPLGRPIDИдентификатор БД, в которую изменение было успешно отправлено.
DTYPEКаким образом обработана запись об операции изменения: 0 – отправлено репликатором получателю; 1 – обработано при анализе журнала изменений, но не должно быть отправлено; получателю отправлена информация о более позднем изменении соответствующей записи.
RECEIPIDНе используется.

Архивы журналов​

Для ускорения обработки журнала изменений REPL$CHANGELOG и детального журнала REPL$CHANGELOGDET целесообразно исключать из них записи о успешно реплицированных изменениях. Такая очистка журналов может выполняться специальной задачей репликации.

Удаление записей из журналов REPL$CHANGELOG и REPL$CHANGELOGDET обрабатывается триггерами AD, которые переносят удаляемые записи в таблицы-архивы REPL$CHANGELOG_OLD и REPL$CHANGELOGDET_OLD соответсвенно. Автоматическая очистка таблиц-архивов не предусмотрена.

Триггеры AD, которые переносят удаляемые из журналов успешно реплицированные записи в архивы, можно изменить так, чтобы архивы велись в отдельной специальной БД.

Ведение дополнительных журналов​

Переопределив для отдельных таблиц триггеры, помещающие запись об операции изменения в журнал, журнал изменения таких таблиц можно вести отдельно от основного журнала REPL$CHANGELOG. Такая возможность используется, например, для журнализации операций обновления БД: эти операции записываются в логи REPL$UPGCHANGELOG и REPL$UPGCHANGELOGDET.

Настроить ведение дополнительных журналов можно с помощью менеджера репликации, указав нестандартные имена для журналов.

Была ли статья полезна?