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

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

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

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

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

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

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

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

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

      Примечание.

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

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

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

    Примечание.

    Расположение установки по умолчанию исполняемого файла агент слияния — C:\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