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


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

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

Замечание

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

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

  • Будь то отслеживание на уровне столбцов, уровне строк или уровне логической записи.

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

    • Обработчик бизнес-логики , написанный в управляемом коде.

    • Настраиваемый резолвер на основе COM.

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

    Если используется механизм разрешения по умолчанию, поведение определяется типом подписки, используемой клиентом или сервером.

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

Является ли изменение данных конфликтом или нет, зависит от типа отслеживания конфликтов, заданного для этой статьи.

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

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

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

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

Чтобы указать уровень отслеживания конфликтов и разрешения конфликтов для статьи, см. раздел "Указание уровня отслеживания конфликтов и разрешения конфликтов" для статей слияния.

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

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

Типы разрешателей

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

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

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

  • Разрешитель конфликтов по умолчанию на основе приоритета

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

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

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

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

  • Настраиваемый сопоставитель на основе COM

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

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

    Microsoft SQL Server включает ряд сопоставителей на основе COM. Дополнительные сведения см. в разделе "Решения Microsoft COM-Based".

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

Замечание

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

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

Интерактивный разрешатель

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

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

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

Замечание

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

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

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

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

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

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

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

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

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

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

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

См. также

Синхронизация данных