レプリケーション競合の検出と解決
2 回目以降の同期では、あるサブスクライバのデータの変更内容が、別のサブスクライバやパブリッシャの変更内容と競合することがあります。パブリケーションの作成時に、このような競合を処理する競合回避モジュールを割り当てます。
競合の検出
同期が発生すると、パブリッシャで実行されているマージ エージェントにより、データの競合が検出され、パブリケーションと関連付けられている競合回避モジュールに基づいて、どのデータを受け入れて、どのデータを他のサイトに反映できるのかが判断されます。
Microsoft SQL Server Compact 3.5 (SQL Server Compact 3.5) では、SQL Server 2005 パブリッシャ、および SQL Server 2008 パブリッシャとの同期において、行レベルの監視と列レベルの監視の両方がサポートされます。
注意
SQL Server 2000 との同期は SQL Server Compact 3.5 ではサポートされていません。
競合回避モジュールの使用
競合が検出されると、マージ エージェントにより、アーティクルに対して選択された競合回避モジュールが実行されます。実行される競合回避モジュールは、既定の競合回避モジュール、他のいずれかの組み込みの競合回避モジュール、またはカスタム競合回避モジュールです。受け入れる変更内容は、競合回避モジュールのルールによって判断されます。SQL Server Compact 3.5 サブスクライバの競合は必ず検出および解決され、パブリッシャに記録されます。
重要 : |
---|
マルチユーザー アクセスにより、同期中にデータが変更できるようになりました。このような同期中の変更により、クライアント側で競合が発生することがあります。クライアント側の競合は検出されますが、サブスクライバ側では解決されません。この競合は、次回の同期中にパブリッシャで再検出され、解決されます。詳細については、「マルチユーザー アクセスと同期」を参照してください。 |
競合回避モジュールでは、競合の解決にデータの変更元やサブスクライバの優先度値を使用できます。たとえば、既定の競合回避モジュールでは、常にパブリッシャの変更内容をサブスクライバの変更内容に優先させるというルールに従っています。常にサブスクライバの変更内容をパブリッシャの変更内容に優先させる別の競合回避モジュールを使用することもできます。
注意
SQL Server Compact 3.5 クライアントには、常に優先度値 0 が設定されています。したがって、優先度値に基づいた競合回避モジュールでは、SQL Server Mobile クライアントで行われた変更内容は優先されません。
競合の検出と解決の詳細については、SQL Server オンライン ブックの「マージ レプリケーションの競合検出および解決の詳細」を参照してください。
注意
SQL Server Compact 3.5 サブスクリプションでは、ストアド プロシージャ ベースのマージ競合回避モジュールはサポートされていません。
カスタム競合回避モジュールの使用
カスタム競合回避モジュールを使用すると、レプリケーションにビジネス ロジックを追加できます。カスタム競合回避モジュールは、マネージ コードまたはネイティブ コードでビルドされた DLL です。カスタム競合回避モジュールを使用するには、ストアド プロシージャ sp_registercustomeresolver を使用して、このモジュールをパブリッシャと IIS を実行しているサーバーに登録する必要があります。sp_registercustomeresolver ストアド プロシージャには、is_dotnet_assembly パラメータが含まれています。競合回避モジュールをマネージ コードでビルドした場合はこのパラメータを true に設定し、ネイティブ DLL の場合は false に設定します。
重要 : |
---|
カスタム競合回避モジュールは、SQL Server を実行しているコンピュータだけでなく、IIS を実行しているコンピュータにも登録する必要があります。 |