レプリケーションの動作
Microsoft SQL Server Compact 3.5 のマージ レプリケーションは、次の手順で行われます。
データが SQL Server にパブリッシュされる。
パブリケーションへのサブスクリプションが作成される。
データが同期される。
次の表では、このセクションで使用される用語のいくつかを説明します。
用語 |
定義 |
---|---|
アーティクル |
レプリケーションが有効になっているデータベース テーブル |
パブリケーション |
アーティクルのコレクション |
パーティション |
パブリケーション内の行と列の特定のセット |
パブリッシャ |
レプリケーションによってパブリケーションを使用できるようにするデータベース |
サブスクライバ |
レプリケートされたデータを受け取り、データ変更をパブリッシャに戻すことができるデータベース |
サブスクリプション |
サブスクライバに配信されるパブリケーションのコピーの要求 |
サブスクリプション データベース |
パブリッシャによりパブリッシュされるアーティクルを受け取るデータベース |
データのパブリッシュ
パブリケーションでは、どのデータをパブリッシュするかを指定します。パブリケーションは通常、さまざまなユーザーやユーザー グループに合わせてカスタマイズされます。すべてのユーザーが同一のデータを必要とする場合があります。たとえば、すべての従業員が会社従業員名簿のコピーを必要とする場合があります。異なるユーザー グループが異なる区分のデータを必要とする場合もあります。たとえば、販売代理店が必要とするデータセットと、製品サポート技術者が必要とするデータセットは異なります。また、各ユーザーが個人用に特別にフィルタ選択を行ったデータを必要とする場合があります。たとえば、販売代理店は担当する顧客アカウントのデータのみを必要とします。
パブリケーションを作成する際は、そこに含めるアーティクルを指定します。SQL Server パブリケーションには、ストアド プロシージャ、ビュー、ユーザー定義関数など他のデータベース オブジェクトが含まれることがありますが、SQL Server Compact 3.5 のレプリケーションではこれらのオブジェクトが無視され、SQL Server Compact 3.5 サブスクリプションのテーブルのみがレプリケートされます。フィルタ選択を行い、アーティクルに含める行と列を指定できます。詳細については、SQL Server オンライン ブックの「レプリケーション」を参照してください。
パブリケーションのサブスクライブ
パブリケーションを定義したら、アプリケーションをサブスクライブします。これには、デバイス上でプログラムにより SQL Server Compact 3.5 の Replication オブジェクトまたは SqlCeReplication クラスを使用してメソッドを呼び出すか、SQL Server Management Studio でサブスクリプションの新規作成ウィザードを使用します。サブスクリプションが作成されると、ディストリビュータからサブスクライバのサブスクリプション データベースに初期スナップショットが適用されます。
サブスクライバのデータ更新
アプリケーションにより、サブスクリプション データベースが更新される可能性があります。マージ レプリケーションでは、各サブスクリプション データベースを自発的に更新できます。デバイスがネットワークに接続されているかどうかにかかわらず更新が行われます。各 SQL Server Compact 3.5 データベースでは、変更の監視によって、SQL Server Compact 3.5 サブスクライバで実行された INSERT、UPDATE、および DELETE の各ステートメントが追跡されます。行レベルと列レベルの両方の監視を使用できます。
データの同期
通常、ユーザーは断続的にデバイスをネットワークに接続します。この接続により、アプリケーションで、サブスクライバに加えられた変更とパブリッシャに加えられた変更の同期を取ることができます。アプリケーションでは、Replication オブジェクトまたは SqlCeReplication クラスの同期メソッドを呼び出すことにより同期が開始されます。同期の処理は 4 段階で構成されます。
変更を取り出し、入力メッセージ ファイルを作成する。
SQL Server Compact 3.5 クライアント エージェントが、SQL Server Compact 3.5 サブスクライバのサブスクリプション データベースから挿入、更新、および削除されたすべてのレコードを取り出し、HTTP 経由で SQL Server Compact 3.5 サーバー エージェントに転送します。SQL Server Compact 3.5 サーバー エージェントは新しい入力メッセージ ファイルを作成し、SQL Server Compact 3.5 クライアント エージェントから送信された挿入、更新、および削除の変更をそのファイルに書き込みます。
SQL Server 調整エージェントのプロセスを実行し、変更をパブリケーション データベースに適用する。
すべての要求が入力メッセージ ファイルに書き込まれたら、SQL Server Compact 3.5 サーバー エージェントは SQL Server 調整エージェントを起動します。SQL Server 調整エージェントは SQL Server Compact 3.5 レプリケーション プロバイダを読み込みます。レプリケーション プロバイダは、入力メッセージ ファイルを読み取って、SQL Server Compact 3.5 サブスクリプション データベースに加えられた変更 (パブリッシャのパブリケーション データベースに適用する必要がある変更) を SQL Server 調整エージェントに通知する役割を果たします。処理中、SQL Server 調整エージェントは競合を検出し、それを解決します。競合は、複数のサブスクライバまたはパブリッシャで同一レコードが更新された場合に発生します。
注意
SQL Server 調整エージェントは、競合回避モジュールを使用して競合を解決します。SQL Server に備わっている競合回避モジュールを使用すると、SQL Server Compact 3.5 レプリケーション アプリケーション向けの簡単な競合回避モジュールを実装したり、カスタム競合回避モジュールを記述してより高度なソリューションを実装できます。詳細については、「レプリケーション競合の検出と解決」を参照してください。
出力メッセージ ファイルを作成する。
SQL Server 調整エージェントが、パブリッシャに加えられた変更 (デバイスのサブスクリプション データベースに適用する必要がある変更) を SQL Server Compact 3.5 レプリケーション プロバイダに通知します。SQL Server Compact 3.5 レプリケーション プロバイダは、IIS が実行されているサーバーの出力メッセージ ファイルにこれらの変更を書き込みます。
出力メッセージ ファイルを読み取り、変更を SQL Server Compact 3.5 サブスクリプション データベースに適用する。
SQL Server 調整エージェントの処理が完了したら、SQL Server Compact 3.5 サーバー エージェントは SQL Server Compact 3.5 レプリケーション プロバイダにより作成された出力メッセージ ファイルを検索します。このファイルには、パブリッシャで発生した、デバイスのサブスクリプション データベースに適用する必要がある変更が含まれています。SQL Server Compact 3.5 サーバー エージェントは出力メッセージ ファイルを読み取り、デバイス上の SQL Server Compact 3.5 クライアント エージェントに転送します。SQL Server Compact 3.5 クライアント エージェントは、出力メッセージ ファイルから SQL Server Compact 3.5 サブスクリプション データベースに変更を適用します。
注意
SQL Server Compact 3.5 クライアント エージェントは、デバイス上のサブスクリプション データベースから読み取りを行ったりデータベースに変更を適用したりするときに、入力メッセージ ファイルと出力メッセージ ファイルの両方を論理ブロックで処理します。この方法で各メッセージ ファイルを処理すると、メッセージ ファイル全体がデバイスに書き込まれることがないので、デバイス上の記憶領域を節約できます。
SQL Server Compact 3.5 クライアント エージェントがすべての変更をデバイス上のサブスクリプション データベースに反映し競合を解決した後は、パブリケーション データベースとサブスクリプション データベースが同期され、データがまとめられます。ただし、更新は連続的に発生するため、パブリッシャとサブスクライバではデータ値が異なる可能性があります。
重要
同一データベースで、2 つのマージ レプリケーション処理を同時に開始することはできません。