Как реализовать нестандартный арбитр конфликтов на основе модели COM для статьи публикации слиянием (Replication Programming)
Пространство имен Microsoft.SqlServer.Replication.BusinessLogicSupport реализует интерфейс, позволяющий писать сложную бизнес-логику для обработки событий и разрешения конфликтов, происходящих во время синхронизации репликации слиянием. Дополнительные сведения см. в разделе Как реализовать обработчик бизнес-логики для статьи публикации слиянием (программирование репликации). Для разрешения конфликтов можно реализовать в программном коде собственную бизнес-логику. Эта логика построена как COM-компонент и компилируется в динамические библиотеки (DLL) с помощью таких продуктов, как Microsoft Visual C++. Арбитр конфликтов на основе COM должен реализовывать интерфейс ICustomResolver, спроектированный специально для разрешения конфликтов.
Создание и регистрация пользовательского арбитра конфликтов на основе COM
В COM-совместимой среде разработчика добавьте ссылки на библиотеку пользовательского арбитра конфликтов.
В проекте Visual C++ используйте директиву #import для импорта этой библиотеки.
Создайте класс, реализующий интерфейс ICustomResolver.
Обеспечьте выполнение соответствующих методов и свойств.
Постройте проект, создающий файл библиотеки пользовательского арбитра конфликтов.
Разверните эту библиотеку в каталоге, содержащем исполняемый файл агента слияния (обычно «\Microsoft SQL Server\100\COM»).
Примечание Пользовательский арбитр конфликтов необходимо развернуть на подписчике для подписки по запросу, на распространителе для принудительной подписки или на веб-сервере, который используется для веб-синхронизации.
Зарегистрируйте библиотеку пользовательского арбитра конфликтов с помощью программы regsvr32.exe из каталога развертывания следующим образом.
regsvr32.exe mycustomresolver.dll
На издателе выполните хранимую процедуру sp_enumcustomresolvers (Transact-SQL), чтобы проверить, не зарегистрирована ли уже эта библиотека в качестве пользовательского арбитра конфликтов.
Чтобы зарегистрировать библиотеку в качестве пользовательского арбитра конфликтов, выполните хранимую процедуру sp_registercustomresolver (Transact-SQL) на распространителе. Укажите понятное имя COM-объекта в параметре @article_resolver, идентификатор библиотеки (CLSID) в параметре @resolver_clsid и значение false в параметре @is_dotnet_assembly.
Примечание Если пользовательский арбитр конфликтов больше не нужен, можно отменить его регистрацию с помощью хранимой процедуры sp_unregistercustomresolver (Transact-SQL).
В кластере повторите шаги 5-8, чтобы зарегистрировать пользовательский арбитр конфликтов на всех узлах кластера (необязательно). Это нужно для того, чтобы пользовательский арбитр конфликтов смог правильно загрузить посредник после перехода на другой ресурс.
Использование нестандартного арбитра конфликтов с новой статьей таблицы
Выполните процедуру sp_enumcustomresolvers (Transact-SQL) на издателе и запомните понятное имя требуемого арбитра.
Чтобы определить статью, на издателе в базе данных публикации выполните хранимую процедуру sp_addmergearticle (Transact-SQL). Укажите понятное имя арбитра статей из шага 1 в параметре @article_resolver. Дополнительные сведения см. в разделе Как определить статью (программирование репликации на языке Transact-SQL).
Использование нестандартного арбитра конфликтов с существующей статьей таблицы
Выполните процедуру sp_enumcustomresolvers (Transact-SQL) на издателе и запомните понятное имя требуемого арбитра.
Выполните хранимую процедуру sp_changemergearticle (Transact-SQL), указав параметры @publication, @article, значение article_resolver в параметре @property и понятное имя арбитра статей из шага 1 в параметре @value.