Поток операций репликации транзакций для издателей Oracle

Репликация транзакций для издателей Oracle основана на архитектуре публикации репликации транзакций Microsoft SQL Server, но процесс отслеживания изменений на издателе и их доставки распространителю существенно отличается от стандартной репликации транзакций. Несмотря на эти различия, транзакции, происходящие в базе данных Oracle, применяются на подписчике в виде согласованных транзакционных групп. Таблицы, ссылающиеся друг на друга с помощью внешних ключей, сохраняют при доставке изменений связи между данными (внешние ключи не копируются на подписчик).

ПримечаниеПримечание

Отслеживание изменений для больших объектов (LOB) происходит иначе, чем для других типов данных. Дополнительные сведения см. в подразделе «Вопросы использования больших объектов» раздела Рассмотрение структуры и ограничений издателей Oracle.

В описании следующего потока операций обращается внимание на основные этапы отслеживания и доставки изменений от издателя Oracle.

Отслеживание изменений

  1. Пользователь или приложение выполняет вставки, обновления или удаления в одной или нескольких таблицах Oracle, опубликованных для репликации.

  2. Триггер уровня строк, устанавливаемый репликацией на каждую опубликованную таблицу Oracle, срабатывает для каждой изменяемой строки и сохраняет сведения об изменении в таблице журнала статьи, связанной с данной таблицей.

  3. При срабатывании триггера уровня строк из последовательности HREPL_seq извлекается число и присваивается строке таблицы журнала, описывающей DML-операцию. Это гарантирует то, что команды изменений на подписчике будут применяться репликацией в правильном порядке.

  4. При обновлении первичного ключа срабатывает также установленный для таблицы триггер уровня инструкций, что позволяет связать друг с другом несколько обновлений первичного ключа, осуществляемых одной инструкцией. Идентификатор инструкции извлекается из последовательности HREPL_Stmt. Этот идентификатор служит для надлежащей обработки обновлений первичных ключей на подписчике.

  5. Для каждой строки, вставляемой в опубликованную таблицу Oracle или удаляемой из нее, вставляется одна строка в соответствующую таблицу журнала статьи. Для каждой строки, обновляемой в таблице Oracle, в таблицу журнала вставляется одна (после изображения) или две (до и после изображения) строки, в зависимости от того, требуются ли репликации сведения о предыдущем состоянии строки.

Доставка изменений на распространитель

  1. Агент чтения журнала определяет набор изменений, согласованных по транзакциям, из журналов статей, которые еще не связаны с интервалом опроса, и временно сохраняет идентификаторы строк записей таблицы журнала в таблицу HREPL_Poll. Идентификатор, извлекаемый из последовательности HREPL_Pollid, используется для маркировки каждой записи изменений как элемента набора, согласованного по транзакциям, и задает порядок обработки набора относительно других наборов.

  2. При обработке изменений опубликованной таблицы строки извлекаются из таблицы журнала; для определения строк, подлежащих обработке, используется текущий идентификатор опроса из HREPL_Pollid.

  3. Пакет изменений из таблицы журнала фиксируется как одна транзакция в базе данных распространителя и сохраняется в таблицах MSrepl_commands и MSrepl_transactions.

Затем изменения считываются из базы данных распространителя и доставляются подписчикам агентом распространителя так же, как в стандартной репликации транзакций.