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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Дополнительные сведения об уровне отслеживания см. в подразделе «Уровень отслеживания» в разделах Способы обнаружения и разрешения конфликтов, используемые при репликации слиянием и Распознавание и разрешение конфликтов в логических записях.

Указание уровня отслеживания и разрешения конфликта для статьи

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

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

Типы арбитров конфликтов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Интерактивный арбитр конфликтов

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

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

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

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

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

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

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

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

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

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

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

  • На издателе и подписчике, если уровень совместимости публикации — 90RTM или выше. Дополнительные сведения об уровне совместимости см. в подразделе «Уровень совместимости для публикаций слиянием» раздела Использование нескольких версий SQL Server в топологии репликации.

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

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

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

См. также

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