マージ アーティクル用の COM ベース カスタム競合回避モジュールを実装する方法 (レプリケーションのプログラミング)
Microsoft.SqlServer.Replication.BusinessLogicSupport 名前空間により実装されるインターフェイスを利用して、マージ レプリケーション同期処理で発生するイベントを処理し、競合を回避するための複雑なビジネス ロジックを作成できます。詳細については、「マージ アーティクルのビジネス ロジック ハンドラを実装する方法 (レプリケーション プログラミング)」を参照してください。また、ネイティブ コード ベースのカスタム ビジネス ロジックを独自に作成して、競合を回避することもできます。Microsoft Visual C++ などの製品を使用して、このロジックを COM コンポーネントとしてビルドし、ダイナミック リンク ライブラリ (DLL) にコンパイルします。このような COM ベースのカスタム競合回避モジュールには、競合回避のために用意されている専用の ICustomResolver インターフェイスを実装する必要があります。
COM ベース カスタム競合回避モジュールを作成して登録するには
COM 互換のオーサリング環境で、カスタム競合回避モジュール ライブラリへの参照を追加します。
Visual C++ プロジェクトの場合は、#import ディレクティブを使用してこのライブラリをプロジェクトにインポートします。
ICustomResolver インターフェイスを実装するクラスを作成します。
メソッドとプロパティを実装します。
プロジェクトをビルドして、カスタム競合回避モジュール ライブラリ ファイルを作成します。
マージ エージェントの実行可能ファイルが置かれているディレクトリ (通常は \Microsoft SQL Server\100\COM) に、そのライブラリを配置します。
注 カスタム競合回避モジュールは、プル サブスクリプションの場合はサブスクライバに、プッシュ サブスクリプションの場合はディストリビュータに、Web 同期に使用する場合は Web サーバーに配置する必要があります。
次のように、配置先のディレクトリから regsvr32.exe を使用してカスタム競合回避モジュール ライブラリを登録します。
regsvr32.exe mycustomresolver.dll
パブリッシャで sp_enumcustomresolvers (Transact-SQL) を実行し、そのライブラリがカスタム競合回避モジュールとしてまだ登録されていないことを確認します。
ディストリビュータでライブラリをカスタム競合回避モジュールとして登録するには、sp_registercustomresolver (Transact-SQL) を実行します。COM オブジェクトの表示名を @article_resolver に指定し、ライブラリの ID (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 に指定します。