30.1. Публикация#

30.1. Публикация

30.1. Публикация

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

Публикации отличаются от схем и не влияют на способ доступа к таблице. Каждую таблицу можно добавить в несколько публикаций при необходимости. В настоящее время публикации могут содержать только таблицы и все таблицы в схеме. Объекты должны быть явно добавлены, за исключением случая, когда создается публикация для ALL TABLES.

Публикации могут выбрать ограничить изменения, которые они производят, до любой комбинации INSERT, UPDATE, DELETE и TRUNCATE, аналогично тому, как триггеры срабатывают по определенным типам событий. По умолчанию реплицируются все типы операций. Эти спецификации публикации применяются только для операций DML; они не влияют на начальную копию синхронизации данных. (Фильтры строк не имеют эффекта для TRUNCATE. См. Раздел 30.3).

Чтобы опубликованная таблица могла тиражировать операции UPDATE и DELETE, необходимо настроить идентификатор реплики, чтобы на стороне подписчика можно было идентифицировать соответствующие строки для обновления или удаления. По умолчанию это является первичным ключом, если он есть. Другой уникальный индекс (с определенными дополнительными требованиями) также может быть установлен в качестве идентификатора реплики. Если у таблицы нет подходящего ключа, то ее можно установить в качестве идентификатора реплики full, что означает, что весь ряд становится ключом. Однако это очень неэффективно и следует использовать только в качестве запасного варианта, если другое решение невозможно. Если на стороне издателя установлен идентификатор реплики, отличный от full, то на стороне подписчика также должен быть установлен идентификатор реплики, состоящий из тех же или меньшего количества столбцов. См. REPLICA IDENTITY для получения подробной информации о том, как установить идентификатор реплики. Если таблица без идентификатора реплики добавляется в публикацию, которая реплицирует операции UPDATE или DELETE, то последующие операции UPDATE или DELETE вызовут ошибку на стороне издателя. Операции INSERT могут выполняться независимо от наличия идентификатора реплики.

Каждая публикация может иметь несколько подписчиков.

Публикация создается с использованием команды CREATE PUBLICATION и может быть изменена или удалена позже с помощью соответствующих команд.

Индивидуальные таблицы могут быть добавлены и удалены динамически с помощью ALTER PUBLICATION. Оба операции ADD TABLE и DROP TABLE являются транзакционными; поэтому таблица начнет или прекратит репликацию с правильным снимком после коммита транзакции.