Определение арбитра для статей публикации слиянием
Область применения: SQL Server
В этом разделе описывается, как указать сопоставитель статьи слияния в SQL Server с помощью SQL Server Management Studio или Transact-SQL.
Рекомендации
Репликация слиянием допускает следующие типы сопоставителей статей:
Сопоставитель по умолчанию. Поведение сопоставителя по умолчанию зависит от того, является подписка клиентской или серверной. Дополнительные сведения об указании типа подписки см. в разделе "Указание типа подписки слиянием" и приоритета разрешения конфликтов (SQL Server Management Studio).
Пользовательский сопоставитель, который может быть обработчиком бизнес-логики (написанным на управляемом коде), или пользовательским, основанным на технологии COM. Дополнительные сведения см. в разделе Advanced Merge Replication Conflict Detection and Resolution. Если требуется применить пользовательскую логику, исполняемую для каждой реплицируемой строки, а не только для конфликтующих строк, см. раздел Реализация обработчика бизнес-логики для статьи публикации слиянием.
Стандартный сопоставитель на основе COM, который входит в состав Microsoft SQL Server.
Чтобы использовать сопоставитель, отличный от сопоставителя по умолчанию, необходимо скопировать сопоставитель на компьютер, на котором выполняется агент слияния, и зарегистрировать его (если используется обработчик бизнес-логики, он также должен быть зарегистрирован на издателе). Агент слияния выполняется на:
распространителе для принудительной подписки;
подписчике для подписки по запросу;
Сервер Microsoft IIS (IIS) для подписки на вытягивание, использующую веб-синхронизацию
Использование среды SQL Server Management Studio
После регистрации сопоставителя укажите, что статья должна использовать сопоставитель на вкладке "Свойства статьи" диалогового окна "Свойства статьи- статья>"<, которое доступно в мастере создания публикаций и в диалоговом окне "Свойства публикации " Публикация>". < Дополнительные сведения об использовании мастера и доступе к этому диалоговому окну см. в статьях Создание публикации и Просмотр и изменение свойств публикации.
Указание сопоставителя
На странице статей мастера создания публикации или диалогового окна "Свойства публикации — публикация>" <выберите таблицу.
Щелкните Свойства статьи, затем щелкните Указать свойства выделенной статьи таблицы.
На странице свойств статьи —>< статья щелкните вкладку "Сопоставитель".
Выберите Использовать пользовательский сопоставитель (зарегистрированный на распространителе):, затем щелкните в списке сопоставитель.
Если сопоставитель запрашивает входные данные (такие, как имя столбца), укажите их в текстовом поле Введите данные, необходимые сопоставителю .
Нажмите ОК.
Повторите этот процесс для каждой статьи, которая запрашивает сопоставитель.
Использование Transact-SQL
Регистрация пользовательского сопоставителя конфликтов
Если планируется зарегистрировать собственный пользовательский сопоставитель конфликтов, создайте один из следующих типов.
Сопоставитель на основе управляемого кода в качестве обработчика бизнес-логики. Дополнительные сведения см. в статье Реализация обработчика бизнес-логики для статьи публикации слиянием.
Арбитр на основе хранимых процедур и арбитр на основе COM. Дополнительные сведения см. в разделе Реализация пользовательского арбитра конфликтов для статьи публикации слиянием.
Чтобы определить, зарегистрирован ли нужный сопоставитель, выполните sp_enumcustomresolvers (Transact-SQL) на издателе в любой базе данных. Будет выведено описание пользовательского сопоставителя, а также идентификатор класса (CLSID) для каждого сопоставителя на основе COM, зарегистрированного на распространителе, или сведения об управляемой сборке для каждого обработчика бизнес-логики, зарегистрированного на распространителе.
Если нужный настраиваемый сопоставитель еще не зарегистрирован, выполните 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.
Если сопоставитель является сопоставителем на основе COM, сделайте следующее.
Скопируйте DLL-библиотеку пользовательского сопоставителя на распространитель для принудительных подписок либо на подписчик для подписок по запросу.
Примечание.
Пользовательские сопоставители Майкрософт можно найти в каталоге C:\Program Files\Microsoft SQL Server\nnn\COM.
Используйте файл regsvr32.exe, чтобы зарегистрировать DLL-библиотеку пользовательского сопоставителя в операционной системе. Например, при выполнении следующего из командной строки регистрируется аддитивный сопоставитель конфликтов SQL Server:
regsvr32 ssradd.dll
Если сопоставитель является обработчиком бизнес-логики, разверните сборку в папке, в которой находится исполняемый файл агента слияния (replmerg.exe), в папке с приложением, вызывающим агент слияния, или в папке, указанной в параметре @dotnet_assembly_name в шаге 3.
Примечание.
Расположение установки по умолчанию исполняемого файла агент слияния — C:\Program Files\Microsoft SQL Server\nnn\COM.
Указание пользовательского сопоставителя при определении статьи публикации слиянием
Если планируется использовать собственный пользовательский сопоставитель конфликтов, создайте и зарегистрируйте сопоставитель с помощью описанной выше процедуры.
На издателе выполните sp_enumcustomresolvers (Transact-SQL) и запишите имя требуемого пользовательского сопоставителя в поле значения результирующий набор.
На издателе в базе данных публикации выполните sp_addmergearticle (Transact-SQL). Укажите имя арбитра из шага 2 в параметре @article_resolver и любые нужные входные данные для пользовательского арбитра с помощью параметра @resolver_info . Для нестандартных сопоставителей, основанных на хранимых процедурах, в параметре @resolver_info указывается имя хранимой процедуры. Дополнительные сведения о необходимых входных данных для сопоставителей, предоставляемых корпорацией Майкрософт, см. в разделе "Разрешения на основе COM Майкрософт".
Указание или изменение пользовательского сопоставителя для существующей статьи публикации слиянием
Чтобы определить, определен ли пользовательский сопоставитель для статьи или получить имя сопоставителя, выполните sp_helpmergearticle (Transact-SQL). Если для статьи был определен пользовательский сопоставитель, его имя отобразится в поле article_resolver . Любые входные данные, переданные сопоставителю, будут отображены в поле resolver_info результирующего набора.
На издателе выполните sp_enumcustomresolvers (Transact-SQL) и запишите имя требуемого пользовательского сопоставителя в поле значения результирующий набор.
На издателе в базе данных публикации выполните sp_changemergearticle (Transact-SQL). Укажите значение для article_resolver, включая полный путь к обработчику бизнес-логики, в параметре @property, и имя нужного пользовательского сопоставителя из шага 2 в параметре @value.
Чтобы изменить все необходимые входные данные для пользовательского сопоставителя, повторите sp_changemergearticle (Transact-SQL). Укажите значение resolver_info в параметре @property и любые необходимые входные данные для пользовательского сопоставителя в параметре @value. Для нестандартных сопоставителей, основанных на хранимых процедурах, в параметре @resolver_info указывается имя хранимой процедуры. Дополнительные сведения о необходимых входных данных см. в статье о сопоставителях на базе технологии Microsoft COM.
Отмена регистрации пользовательского сопоставителя конфликтов
На издателе выполните sp_enumcustomresolvers (Transact-SQL) и запишите имя настраиваемого сопоставителя для удаления в поле значений результирующий набор.
Выполните 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