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


Advanced Merge Replication Conflict Detection and Resolution

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

Примечание

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

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

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

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

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

    • пользовательским сопоставителем конфликтовна основе COM;

    • Основанный на технологии COM сопоставитель, поддерживаемый Microsoft.

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

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

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

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

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

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

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

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

Устранение конфликтов

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

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

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

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

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

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

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

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

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

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

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

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

  • Основанный на технологии COM сопоставитель, поддерживаемый Microsoft

    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 .

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

См. также:

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