マルチユーザー アクセスと同期

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)
同期方式によるデータ同期
非同期方式によるデータ同期
レプリケーション競合の検出と解決

ヘルプおよび情報

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