Поделиться через


Слияние репликаций

Область применения:SQL Server

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

Как правило, репликация слиянием применяется в средах «сервер-клиент». Репликация слиянием подходит для любой из следующих ситуаций.

  • Несколько подписчиков могут обновлять одни и те же данные в разное время и передавать эти изменения на издатель и на другие подписчики.

  • Подписчикам нужно получить данные, внести изменения в режиме «вне сети» и позднее синхронизировать изменения с издателем и другими подписчиками.

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

  • Поскольку возможно возникновение конфликтов, необходимы средства по распознаванию и разрешению конфликтов.

  • Приложению требуется конечное изменение данных, а не доступ к промежуточным состояниям данных. Например, если строка меняется пять раз на подписчике до его синхронизации с издателем, на издателе строка изменится только один раз для отображения конечного изменения данных (то есть, пятого значения).

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

Репликация слиянием реализуется агент моментальных снимков SQL Server и агент слияния. Если публикация не отфильтрована или использует статические фильтры, агент слияния создает один моментальный снимок. Если публикация использует параметризованные фильтры, то агент слияния создает моментальный снимок для каждой секции данных. Агент слияния применяет все исходные моментальные снимки на подписчиках. Он также объединяет добавочные изменения данных, которые возникли на издателе или подписчиках после создания исходного моментального снимка, выявляет и разрешает любые конфликты в соответствии с заданными вами правилами.

Для отслеживания изменений репликация слиянием и репликация транзакций с подписками, обновляемыми посредством очередей, должны быть способны уникально идентифицировать каждую строку в каждой опубликованной таблице. Для реализации этого, репликация слиянием добавляет столбец rowguid в каждую таблицу, если в таблице уже нет столбца типа данных uniqueidentifier с установленным свойством ROWGUIDCOL (в этом случае используется существующий столбец). Если таблица удаляется из публикации, то столбец rowguid будет удалён; если для отслеживания использовался существующий столбец, он не удаляется. Фильтр не должен включать столбец rowguidcol , который используется в процессе репликации для идентификации строк. Функция newid() предоставляется в качестве значения по умолчанию для столбца rowguid, однако при необходимости клиенты могут предоставить GUID для каждой строки. Однако не укажите значение 00000000-0000-0000-0000-000000000000.

В диаграмме ниже показаны компоненты, используемые при репликации слиянием.

Схема компонентов репликации путём слияния и потока данных.

В этом разделе