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


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

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

ПримечаниеПримечание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ПримечаниеПримечание

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

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

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

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

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

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

ПримечаниеПримечание

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

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

  • При репликации создается таблица конфликтов для каждой таблицы в статье слияния с именем, имеющим следующий вид: MSmerge_conflict_<ИмяПубликации>_<ИмяСтатьи>.

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

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

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

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

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

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

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

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

См. также

Основные понятия

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