Определение сопоставителя статей публикации слиянием

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

В этом разделе

Перед началом

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

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

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

    • распространителе для принудительной подписки;

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

    • IIS-сервер Microsoft для подписки по запросу, которая использует веб-синхронизацию

Использование среды 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-библиотеку пользовательского сопоставителя на распространитель для принудительных подписок либо на подписчик для подписок по запросу.

      Примечание

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

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

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

    Примечание

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

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

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

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

  3. На издателе в базе данных публикации выполните sp_addmergearticle (Transact-SQL). Укажите имя сопоставителя из шага 2 для @article_resolver и все необходимые входные данные пользовательского сопоставителя с помощью параметра @resolver_info . Для пользовательских сопоставителей на основе хранимых процедур @resolver_info — это имя хранимой процедуры. Дополнительные сведения о необходимых входных данных для сопоставителей, предоставляемых Microsoft, см. в статье о сопоставителях на базе технологии Microsoft 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 при возникновении конфликта должен использоваться для вычисления среднего значения в столбце 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

См. также:

Advanced Merge Replication Conflict Detection and Resolution
Реализация обработчика бизнес-логики для статьи публикации слиянием