マルチユーザー アクセスと同期
Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) ではマルチユーザー アクセスがサポートされるので、データベースのレプリケート中でもユーザーはデータベースを使用できます。これにより、パブリッシャで行われた変更との競合が発生することがあります。この競合はローカル データの競合と呼ばれ、SQL Server Compact Edition を使用するアプリケーションを開発する際に考慮する必要があります。
マルチユーザー アクセスの影響
SQL Server Compact Edition を使用するアプリケーションを設計する際は、マルチユーザー アクセスがデータベースに及ぼす影響について考慮する必要があります。次の表では、SQL Server Compact Edition に組み込まれているいくつかの一般的な機能と、各機能に関連する問題点を示します。
機能 | 問題点 |
---|---|
ロック |
同期中、パブリッシャで行われた変更は、データ ロックによりサブスクライバ データベースに適用されません。サブスクライバでデータ変更が行われ、データが長時間ロックされている場合は、同期が失敗します。 この問題を完全に回避するには、ユーザーが同期中にデータを変更できないようにするロジックをアプリケーションに追加します。 |
検証 |
検証を使用している場合、SQL Server Compact Edition データベースの行数が同期中に変更されると、検証が失敗します。 この問題を完全に回避するには、検証を伴う同期中にユーザーがデータを変更できないようにするロジックをアプリケーションに追加します。 |
再初期化 |
サブスクリプションの再初期化中、レプリケーション層では、レプリケートされたすべてのユーザーとシステム テーブルが削除され、再作成されます。SQL Server サブスクリプションの場合と同様に、同期の開始後に行われたすべての変更は、再初期化すると失われます。 このデータの損失を回避するには、再初期化中にユーザーがデータを変更できないようにするロジックをアプリケーションに追加します。 |
スキーマ変更 |
すべての DDL 操作 (スキーマ変更) で、テーブルに排他アクセスできる必要があります。テーブルが他のプロセスで使用されている場合は、スキーマを変更できません。 |
同期中の変更 |
同期中にデータを変更した場合、その変更が次の同期中に送信されます。同期セッションによってローカル競合が発生した場合、行は、アーティクルが列レベルで追跡される場合でも、行レベルとして解決されます。 |
競合の検出と解決
マルチユーザー環境で作業しているとき、同期中の変更によって競合が発生することがあります。SQL Server Compact Edition でクライアント側の競合は検出されますが、解決されません。この場合、次の同期中に競合を解決するために、競合情報がパブリッシャに渡されます。
大部分の競合は、次の同期中にパブリッシャで解決されます。ただし、参照整合性 (R/I) 競合が発生した場合は、パブリッシャから、デバイスでの自動再同期が要求されます。この現象が発生した場合、再同期は 2 回しか行われません。
競合の検出と解決の詳細については、「レプリケーション競合の検出と解決」を参照してください。
SubscriberConflicts プロパティの使用
同期中にローカル データベースに対して行われた変更により、ローカル競合が発生します。パブリッシャからの行をサブスクライバ側で適用できない場合、サブスクライバで競合が発生したと見なされ、SubscriberConflicts プロパティが設定されます。SQL Server サブスクライバの場合、競合はサブスクライバ側で解決されます。ただし、SQL Server Compact Edition には調整エージェントがないため、すべての競合をパブリッシャで解決する必要があります。アプリケーションを開発する際は、同期のたびに SubscriberConflicts プロパティを確認するようアプリケーションを設計することができます。このプロパティが 0 以外の値に設定されている場合は、パブリッシャで競合が解決されるように、データを再同期化する必要があります。
参照
概念
データの同期 (SQL Server Compact Edition)
同期方式によるデータ同期
非同期方式によるデータ同期
レプリケーション競合の検出と解決