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

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

ms151768.note(ru-ru,SQL.90).gifПримечание.
Отслеживание изменений для больших объектов (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.

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

См. также

Основные понятия

Глоссарий терминов издателя Oracle
Как работает публикация Oracle
Объекты, создаваемые на издателе Oracle

Справка и поддержка

Получение помощи по SQL Server 2005