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


Репликация слиянием

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

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

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

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

  • Для каждого подписчика требуется другая секция данных.

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

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

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

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

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

На следующей схеме показаны компоненты, используемые в репликации слиянием.

Компоненты слияния репликации и поток данных