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


Подробнее о репликации слиянием — обнаружение и разрешение конфликтов

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

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

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

  • Если конфликт возникает между издателем и подписчиком, принимается изменение издателя, а изменение подписчика отклоняется.
  • Если конфликт происходит между двумя подписчиками, использующими клиентские подписки (тип подписок по запросу, используемых по умолчанию), принимается изменение первого подписчика для синхронизации с издателем, а изменение второго подписчика отклоняется. Сведения об указании подписок клиента и сервера см. в разделе "Указание типа подписки слиянием" и приоритета разрешения конфликтов (SQL Server Management Studio).
  • Если конфликт возникает между двумя подписчиками, использующими серверные подписки (тип принудительных подписок по умолчанию), принимается изменение подписчика с наибольшим значением приоритета, а изменение второго подписчика отклоняется. Если значения приоритетов равны, принимается изменение первого подписчика для синхронизации с издателем.

Примечание.

Хотя подписчик синхронизируется с издателем, конфликты обычно возникают между обновлениями, осуществляемыми на различных подписчиках, а не между обновлениями, осуществляемыми на подписчике и издателе.

Логика обнаружения и разрешения конфликтов зависит от следующих параметров, описание которых приводится в данном разделе:

  • указано ли отслеживание на уровне столбцов, строк или логических записей;

  • указан ли механизм разрешения конфликтов на основе приоритетов (по умолчанию) или указан сопоставитель статей. Сопоставитель статей может быть:

    • обработчиком бизнес-логики , разработанным в управляемом коде;
    • пользовательским сопоставителем конфликтовна основе COM;
    • Сопоставитель на основе COM, предоставленный корпорацией Майкрософт.

    При использовании механизма разрешения конфликтов по умолчанию логика работы определяется используемым типом подписки: клиентской или серверной.

Обнаружение конфликтов

Квалифицируется ли изменение данных как конфликт или зависит от типа отслеживания конфликтов, установленного для статьи:

  • Если выбрано отслеживание конфликтов на уровне столбцов, то изменение данных считается конфликтом, если оно сделано в одном и том же столбце в одной и той же строке в нескольких узлах репликации.
  • Если выбрано отслеживание на уровне строк, то изменение данных считается конфликтом, если оно выполнено для каких-либо столбцов в одной и той же строке в нескольких узлах репликации (изменяемые столбцы в соответствующих строках могут быть разными).
  • Если выбрано отслеживание на уровне логических записей, то изменение данных считается конфликтом, если оно выполнено в какой-либо строке в одной и той же логической записи в нескольких узлах репликации (изменяемые столбцы в соответствующих строках могут быть разными).

Дополнительные сведения см. в статье Распознавание и разрешение конфликтов в логических записях.

Чтобы указать уровень отслеживания и разрешения конфликтов для статьи, см. раздел Specify Merge Replication properties (Указание параметров репликации слиянием).

Разрешение конфликтов

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

Разрешение конфликтов репликации слиянием

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

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

Примечание.

Несмотря на то, что подписчик обычно синхронизируется с издателем, конфликты возникают между обновлениями, осуществляемыми у различных подписчиков, а не между обновлениями, осуществляемыми у подписчика и издателя.

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

  • Если конфликт возникает между издателем и подписчиком, принимается изменение издателя, а изменение подписчика отклоняется.

  • Если конфликт происходит между двумя подписчиками, использующими клиентские подписки (тип подписок по запросу, используемых по умолчанию), принимается изменение первого подписчика для синхронизации с издателем, а изменение второго подписчика отклоняется. Сведения об указании подписок клиента и сервера см. в разделе "Указание типа подписки слиянием" и приоритета разрешения конфликтов (SQL Server Management Studio).

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

Дополнительные сведения об обнаружении и разрешении конфликтов репликации слиянием см. в разделе Advanced Merge Replication Conflict Detection and Resolution.

Типы сопоставителя конфликтов

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

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

Для репликации слиянием предлагается четыре типа сопоставителя конфликтов:

  • Сопоставитель конфликтов на основе приоритетов (по умолчанию)

    Механизм разрешения конфликтов по умолчанию функционирует по-разному в зависимости от того, является подписка клиентской или серверной. Можно назначать приоритеты различным подписчикам, использующим серверные подписки; изменения, внесенные на узле с наибольшим приоритетом, побеждают во всех конфликтах. В случае клиентских подписок первое изменение, записанное на издателе, побеждает в конфликте.

    После того, как подписка создана, ее тип нельзя изменить.

  • Обработчик бизнес-логики

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

  • Пользовательский сопоставитель на основе COM

    Репликация слиянием предоставляет API для записи сопоставителей в виде COM-объектов на таких языках, как Microsoft Visual C++ или Microsoft Visual Basic. Дополнительные сведения см. в статье COM-Based Custom Resolvers.

  • Сопоставитель на основе COM, предоставленный корпорацией Майкрософт

    Microsoft SQL Server включает ряд сопоставителей на основе COM. Дополнительные сведения см. в статье Сопоставители на базе технологии Microsoft COM.

Сведения о выборе подходящего типа сопоставителя см. в статье Выбор сопоставителя.

Примечание.

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

Указание типа подписки на публикацию слиянием и приоритета устранения конфликтов см. в разделе

Интерактивный сопоставитель

Репликация предоставляет пользовательский интерфейс интерактивного сопоставителя, который может использоваться совместно либо с сопоставителем конфликтов на основе приоритетов (по умолчанию), либо с сопоставителем статей. При выполнении синхронизации по запросу через Диспетчер синхронизации Microsoft Windows интерактивный сопоставитель отображает конфликтные данные во время выполнения и позволяет выбрать способ устранения конфликтов. Дополнительные сведения о том, как включить интерактивное устранение конфликтов и запуск интерактивного сопоставителя, см. в разделе Interactive Conflict Resolution.

Просмотр конфликтов

Самый простой способ просмотра конфликтов — использовать средство просмотра конфликтов репликации, доступное в СРЕДЕ SQL Server Management Studio (SQL Server также предоставляет хранимые процедуры, позволяющие запрашивать таблицы конфликтов.). Средство просмотра конфликтов и интерактивный сопоставитель являются аналогичными инструментами, но интерактивный сопоставитель позволяет разрешать конфликты во время выполнения синхронизации, в то время как средство просмотра конфликтов предназначено для просмотра конфликтов после их разрешения. Если метаданные конфликта остаются доступными в системных таблицах (по умолчанию метаданные конфликтов сохраняются в течение 14 суток), то результаты устранения конфликтов можно изменить в средстве просмотра конфликтов, однако при необходимости частого прямого вмешательства стоит рассмотреть возможность использования интерактивного сопоставителя.

Примечание.

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

Средство просмотра конфликтов отображает информацию из трех системных таблиц:

  • Репликация создает таблицу конфликтов для каждой таблицы в статье слияния с именем в форме MSmerge_conflict_PublicationName_<ArticleName>>.<

    Таблицы конфликтов имеют структуру, аналогичную структуре таблиц, на которых они основаны. Строка в одной из этих таблиц состоит из проигравшей версии строки конфликта (победившая версия строки находится в существующей пользовательской таблице).

  • Таблица MSmerge_conflicts_info содержит сведения о каждом из конфликтов, включая его тип.

  • Таблица sysmergearticles определяет пользовательские таблицы, для которых существуют таблицы конфликтов, и предоставляет информацию об этих таблицах конфликтов.

По умолчанию сведения о конфликтах сохраняются:

  • На издателе и подписчике, если уровень совместимости публикации 90RTM или выше.

  • На издателе, если уровень совместимости публикации ниже, чем 80RTM.

  • На издателе, если подписчики работают под управлением SQL Server Compact. Конфликтные данные не могут храниться в подписчиках SQL Server Compact.

Просмотр конфликтов