Триггеры
Журналирование изменений выполняется с помощью триггеров, привязанных при подготовке БД к репликации к выбранным для репликации таблицам.
Репликатор использует и другие триггеры; типы триггеров описаны ниже в этой статье.
Определение понятия
Триггер – это хранимая процедура, которая запускается сервером БД автоматически при попытке изменения данных в таблице, с которой триггер связан. Все производимые им модификации данных рассматриваются как выполняемые в транзакции, в которой выполнено действие, вызвавшее срабатывание триггера.
По моменту запуска триггеры разделяются на: BEFORE (B) – триггер запускается до выполнения связанного с ним события (например, до добавления записи) – и AFTER (A) – после события.
Триггер может запускаться следующими изменениями: INSERT (I, добавление); DELETE (D, удаление); UPDATE (U, модификация).
Всего возможно 6 сочетаний момента запуска и типа события: BI, BD, BU, AI, AD, AU.
Триггеры журналирования изменений
Для таблиц, предназначенных для репликации, при подготовке БД создаются триггеры AI, AD, AU журналирования изменений. Эти триггеры заполняют журнал изменений REPL$CHANGELOG.
Триггеры присвоения ключа
В реплицируемых таблицах при подготовке БД к репликации создаются триггеры BI, которые заполняют поля суррогатного ключа репликации при создании записи.
Триггеры блокировки изменений
Также могут быть созданы триггеры BI, BD, BU, которые запрещают внесение изменений в таблицы. Это необходимо для блокировки возможности изменять определенные таблицы в данном филиале (например, редактировать справочники в филиальной БД, или приемы в ЦБД).
Пользовательские триггеры
Важно помнить, что в БД МИС "Инфоклиника" существует множество триггеров, определенных вне механизма репликации ("пользовательские" триггеры). При выполнении репликации, как правило, такие триггеры не должны выполняться, чтобы изменения, вносимые репликатором, не порождали "снежного кома" новых изменений.
Для этого в пользовательские триггеры должна быть включена проверка роли текущего пользователя БД. Такая проверка не добавляется автоматически при подготовке БД к репликации.