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


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

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

В этом разделе описывается, как указать решатель статьи слияния в SQL Server с помощью SQL Server Management Studio или Transact-SQL.

Рекомендации

  • Репликация слиянием допускает следующие типы сопоставителей статей:

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

    • Распространитель для push-подписки.

    • подписчике для подписки по запросу;

    • Сервер Microsoft Internet Information Services (IIS) для подписки с вытягиванием, использующей веб-синхронизацию

Использование среды SQL Server Management Studio

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

Чтобы указать резолвер

  1. На странице статей мастера создания публикации или >" выберите таблицу.

  2. Щелкните Свойства статьи, затем щелкните Установить свойства выделенной статьи таблицы.

  3. На странице свойств статьи — <Статья> щелкните вкладку Резолвер.

  4. Выберите Использовать пользовательский резолвер (зарегистрированный на распространителе), затем в списке щелкните на резолвер.

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

  6. Нажмите ОК.

  7. Повторите этот процесс для каждой статьи, которой требуется резольвер.

Использование Transact-SQL

Для регистрации пользовательского разрешителя конфликтов

  1. Если вы планируете зарегистрировать собственный пользовательский разрешитель конфликтов, создайте один из указанных видов.

  2. Чтобы определить, зарегистрирован ли нужный сопоставитель, выполните sp_enumcustomresolvers (Transact-SQL) в любой базе данных на сервере издателя. Будет выведено описание пользовательского сопоставителя, а также идентификатор класса (CLSID) для каждого сопоставителя на основе COM, зарегистрированного на распространителе, или сведения об управляемой сборке для каждого обработчика бизнес-логики, зарегистрированного на распространителе.

  3. Если нужный настраиваемый сопоставитель еще не зарегистрирован, выполните sp_registercustomresolver (Transact-SQL) на Дистрибьюторе. Укажите имя для сопоставителя в параметре @article_resolver; для обработчика бизнес-логики это будет понятное имя сборки. Для сопоставителей на основе COM укажите CLSID библиотеки DLL для @resolver_clsid, а для обработчика бизнес-логики укажите значение true для @is_dotnet_assembly, имя сборки для @dotnet_assembly_name и полное имя класса, переопределяющего BusinessLogicModule для @dotnet_class_name.

    Примечание.

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

  4. Если резолвер является резолвером на основе COM, выполните следующие шаги.

    • Скопируйте DLL-библиотеку пользовательского сопоставителя на распространитель для принудительных подписок либо на подписчик для подписок по запросу.

      Примечание.

      Пользовательские сопоставители Майкрософт можно найти на <диске>:\Program Files\Microsoft SQL Server\nnn\COM.

    • Используйте regsvr32.exe, чтобы зарегистрировать пользовательский резольвер DLL в операционной системе. Например, выполнение следующей команды из командной строки регистрирует аддитивный разрешатель конфликтов SQL Server.

      regsvr32 ssradd.dll  
      
  5. Если сопоставитель является обработчиком бизнес-логики, разверните сборку в папке, в которой находится исполняемый файл агента слияния (replmerg.exe), в папке с приложением, вызывающим агент слияния, или в папке, указанной в параметре @dotnet_assembly_name в шаге 3.

    Примечание.

    Расположение установки агента слияния по умолчанию — <диск>:\Program Files\Microsoft SQL Server\nnn\COM.

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

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

  2. На издателе выполните sp_enumcustomresolvers (Transact-SQL) и запомните имя требуемого пользовательского сопоставителя в поле значения результирующем наборе.

  3. На издателе в базе данных публикации выполните sp_addmergearticle (Transact-SQL). Укажите имя арбитра из шага 2 в параметре @article_resolver и любые нужные входные данные для пользовательского арбитра с помощью параметра @resolver_info . Для нестандартных сопоставителей, основанных на хранимых процедурах, в параметре @resolver_info указывается имя хранимой процедуры. Дополнительные сведения о необходимых входных данных для сопоставителей, предоставляемых корпорацией Майкрософт, см. в разделе "Разрешения на основе COM Майкрософт".

Указать или изменить пользовательский резолвер для существующей статьи слияния

  1. Чтобы определить, определен ли пользовательский сопоставитель для статьи или получить имя сопоставителя, выполните sp_helpmergearticle (Transact-SQL). Если для статьи был определен пользовательский сопоставитель, его имя отобразится в поле article_resolver . Любые входные данные, переданные сопоставителю, будут отображены в поле resolver_info результирующего набора.

  2. На издателе выполните sp_enumcustomresolvers (Transact-SQL) и запишите имя требуемого пользовательского сопоставителя в поле значения в результирующем наборе.

  3. На сервере издателя в базе данных публикации выполните sp_changemergearticle (Transact-SQL). Укажите значение для article_resolver, включая полный путь к обработчикам бизнес-логики, в параметре @property, и укажите название желаемого пользовательского резольвера из шага 2 в параметре @value.

  4. Чтобы изменить любой необходимый входной элемент для пользовательского сопоставителя, выполните команду sp_changemergearticle (Transact-SQL) снова. Укажите значение resolver_info в параметре @property и любые необходимые входные данные для пользовательского сопоставителя в параметре @value. Для нестандартных сопоставителей, основанных на хранимых процедурах, в параметре @resolver_info указывается имя хранимой процедуры. Дополнительные сведения о необходимых входных данных см. в статье о сопоставителях на базе технологии Microsoft COM.

Отмена регистрации пользовательского сопоставителя конфликтов

  1. На издателе выполните sp_enumcustomresolvers (Transact-SQL) и запишите имя настраиваемого сопоставителя, которое нужно удалить, в поле значение в результирующем наборе.

  2. Выполните sp_unregistercustomresolver (Transact-SQL) на распространителе. Укажите полное имя пользовательского сопоставителя из шага 1 в параметре @article_resolver.

Примеры (Transact-SQL)

В этом примере создается новая статья и указывается, что sql Server Averaging Conflict Resolver используется для вычисления среднего значения столбца UnitPrice при возникновении конфликтов.

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = 'AdvWorksSalesOrdersMerge';
SET @article = 'Products';

EXEC sp_addmergearticle 
    @publication = @publication, 
    @article = @article, 
    @source_object = @article, 
    @article_resolver = 'Microsoft SQL Server Averaging Conflict Resolver', 
    @resolver_info = 'UnitPrice';
GO

В этом примере изменяется запись, чтобы указать использование аддитивного разрешения конфликтов SQL Server для вычисления суммы по столбцу UnitsOnOrder при возникновении конфликтов.

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = 'AdvWorksSalesOrdersMerge';
SET @article = 'Products';

EXEC sp_changemergearticle 
    @publication = @publication, 
    @article = @article, 
    @property='article_resolver', 
    @value='Microsoft SQL Server Additive Conflict Resolver';

EXEC sp_changemergearticle 
    @publication = @publication, 
    @article = @article, 
    @property='resolver_info', 
    @value='UnitsOnOrder';
GO