Таблицы журналов
Журнал изменений 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.
Настроить ведение дополнительных журналов можно с помощью менеджера репликации, указав нестандартные имена для журналов.