Поток операций репликации транзакций для издателей Oracle
Репликация транзакций для издателей Oracle основана на архитектуре публикации репликации транзакций Microsoft SQL Server, но процесс отслеживания изменений на издателе и их доставки распространителю существенно отличается от стандартной репликации транзакций. Несмотря на эти различия, транзакции, происходящие в базе данных Oracle, применяются на подписчике в виде согласованных транзакционных групп. Таблицы, ссылающиеся друг на друга с помощью внешних ключей, сохраняют при доставке изменений связи между данными (внешние ключи не копируются на подписчик).
Примечание |
---|
Отслеживание изменений для больших объектов (LOB) происходит иначе, чем для других типов данных. Дополнительные сведения см. в подразделе «Вопросы использования больших объектов» раздела Рассмотрение структуры и ограничений издателей Oracle. |
В описании следующего потока операций обращается внимание на основные этапы отслеживания и доставки изменений от издателя Oracle.
Отслеживание изменений
Пользователь или приложение выполняет вставки, обновления или удаления в одной или нескольких таблицах Oracle, опубликованных для репликации.
Триггер уровня строк, устанавливаемый репликацией на каждую опубликованную таблицу Oracle, срабатывает для каждой изменяемой строки и сохраняет сведения об изменении в таблице журнала статьи, связанной с данной таблицей.
При срабатывании триггера уровня строк из последовательности HREPL_seq извлекается число и присваивается строке таблицы журнала, описывающей DML-операцию. Это гарантирует то, что команды изменений на подписчике будут применяться репликацией в правильном порядке.
При обновлении первичного ключа срабатывает также установленный для таблицы триггер уровня инструкций, что позволяет связать друг с другом несколько обновлений первичного ключа, осуществляемых одной инструкцией. Идентификатор инструкции извлекается из последовательности HREPL_Stmt. Этот идентификатор служит для надлежащей обработки обновлений первичных ключей на подписчике.
Для каждой строки, вставляемой в опубликованную таблицу Oracle или удаляемой из нее, вставляется одна строка в соответствующую таблицу журнала статьи. Для каждой строки, обновляемой в таблице Oracle, в таблицу журнала вставляется одна (после изображения) или две (до и после изображения) строки, в зависимости от того, требуются ли репликации сведения о предыдущем состоянии строки.
Доставка изменений на распространитель
Агент чтения журнала определяет набор изменений, согласованных по транзакциям, из журналов статей, которые еще не связаны с интервалом опроса, и временно сохраняет идентификаторы строк записей таблицы журнала в таблицу HREPL_Poll. Идентификатор, извлекаемый из последовательности HREPL_Pollid, используется для маркировки каждой записи изменений как элемента набора, согласованного по транзакциям, и задает порядок обработки набора относительно других наборов.
При обработке изменений опубликованной таблицы строки извлекаются из таблицы журнала; для определения строк, подлежащих обработке, используется текущий идентификатор опроса из HREPL_Pollid.
Пакет изменений из таблицы журнала фиксируется как одна транзакция в базе данных распространителя и сохраняется в таблицах MSrepl_commands и MSrepl_transactions.
Затем изменения считываются из базы данных распространителя и доставляются подписчикам агентом распространителя так же, как в стандартной репликации транзакций.
См. также