次の方法で共有


レプリケーション競合の検出と解決

2 回目以降の同期では、あるサブスクライバのデータの変更内容が、別のサブスクライバやパブリッシャの変更内容と競合することがあります。パブリケーションの作成時に、このような競合を処理する競合回避モジュールを割り当てます。

競合の検出

同期が発生すると、パブリッシャで実行されているマージ エージェントにより、データの競合が検出され、パブリケーションと関連付けられている競合回避モジュールに基づいて、どのデータを受け入れて、どのデータを他のサイトに反映できるのかが判断されます。

Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) では、SQL Server 2005 パブリッシャとの同期において、行レベルの監視と列レベルの監視の両方がサポートされます。SQL Server 2000 パブリッシャとの同期の場合は、SQL Server Compact Edition では行レベルの監視のみがサポートされます。

SQL Server Compact Edition での行レベルの監視

SQL Server 2000 パブリッシャとの同期では、SQL Server Compact Edition データベース エンジンによって行の挿入、更新、および削除が監視されます。行レベルで競合が検出された場合、その行の同じ列に変更が加えられたかどうかにかかわらず、対応する行の変更内容が競合していると見なされます。たとえば、パブリッシャである行の住所列に変更が加えられ、サブスクライバで対応する行の電話番号列に変更が加えられたとします。同じ行が変更されたので、行レベルの監視により競合が検出されます。

メモ :
SQL Server 2000 パブリッシャで列レベルの監視が構成されていて、その行のすべての列が変更されていなくても、SQL Server Compact Edition により、その行はすべての列が変更された場合と同様にマークされます。列レベルの監視は、SQL Server 2005 パブリッシャでのみサポートされています。

競合回避モジュールの使用

競合が検出されると、マージ エージェントにより、アーティクルに対して選択された競合回避モジュールが実行されます。実行される競合回避モジュールは、既定の競合回避モジュール、他のいずれかの組み込みの競合回避モジュール、またはカスタム競合回避モジュールです。受け入れる変更内容は、競合回避モジュールのルールによって判断されます。SQL Server Compact Edition サブスクライバの競合は必ず検出および解決され、パブリッシャに記録されます。

重要 :
マルチユーザー アクセスにより、同期中にデータが変更できるようになりました。このような同期中の変更により、クライアント側で競合が発生することがあります。クライアント側の競合は検出されますが、サブスクライバ側では解決されません。この競合は、次回の同期中にパブリッシャで再検出され、解決されます。詳細については、「マルチユーザー アクセスと同期」を参照してください。

競合回避モジュールでは、競合の解決にデータの変更元やサブスクライバの優先度値を使用できます。たとえば、既定の競合回避モジュールでは、常にパブリッシャの変更内容をサブスクライバの変更内容に優先させるというルールに従っています。常にサブスクライバの変更内容をパブリッシャの変更内容に優先させる別の競合回避モジュールを使用することもできます。

メモ :
SQL Server Compact Edition クライアントには、常に優先度値 0 が設定されています。したがって、優先度値に基づいた競合回避モジュールでは、SQL Server Mobile クライアントで行われた変更内容は優先されません。

競合の検出と解決の詳細については、SQL Server Books Online の「マージ レプリケーションの競合検出および解決の詳細」を参照してください。

メモ :
SQL Server Compact Edition サブスクリプションでは、ストアド プロシージャ ベースのマージ競合回避モジュールはサポートされていません。

カスタム競合回避モジュールの使用

カスタム競合回避モジュールを使用すると、レプリケーションにビジネス ロジックを追加できます。カスタム競合回避モジュールは、マネージ コードまたはネイティブ コードのいずれかでビルドされた DLL です。カスタム競合回避モジュールを使用するには、ストアド プロシージャ sp_registercustomeresolver を使用して、このモジュールをパブリッシャと IIS を実行しているサーバーに登録する必要があります。sp_registercustomeresolver ストアド プロシージャには、is_dotnet_assembly パラメータが含まれています。競合回避モジュールをマネージ コードでビルドした場合はこのパラメータを true に設定し、ネイティブ DLL の場合は false に設定します。

重要   カスタム競合回避モジュールは、SQL Server を実行しているコンピュータだけでなく、IIS を実行しているコンピュータにも登録する必要があります。

参照

ヘルプおよび情報

SQL Server Compact Edition のサポートについて