Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: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.
Чтобы использовать сопоставитель, отличный от сопоставителя по умолчанию, необходимо скопировать сопоставитель на компьютер, на котором выполняется агент слияния, и зарегистрировать его (если используется обработчик бизнес-логики, он также должен быть зарегистрирован на издателе). Агент слияния запускается на:
Распространитель для push-подписки.
подписчике для подписки по запросу;
Сервер Microsoft Internet Information Services (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-библиотеку пользовательского сопоставителя на распространитель для принудительных подписок либо на подписчик для подписок по запросу.
Примечание.
Пользовательские сопоставители Майкрософт можно найти на <диске>:\Program Files\Microsoft SQL Server\nnn\COM.
Используйте regsvr32.exe, чтобы зарегистрировать пользовательский резольвер DLL в операционной системе. Например, выполнение следующей команды из командной строки регистрирует аддитивный разрешатель конфликтов SQL Server.
regsvr32 ssradd.dll
Если сопоставитель является обработчиком бизнес-логики, разверните сборку в папке, в которой находится исполняемый файл агента слияния (replmerg.exe), в папке с приложением, вызывающим агент слияния, или в папке, указанной в параметре @dotnet_assembly_name в шаге 3.
Примечание.
Расположение установки агента слияния по умолчанию — <диск>:\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