適切なレプリケーションの種類の選択

Microsoft SQL Server では、3 種類のレプリケーションが利用できます。それぞれの種類のレプリケーションは、異なるアプリケーション要件に適しています。アプリケーションの要件に応じて、1 つのトポロジ内で次の中から 1 種類以上のレプリケーションを使用できます。

  • スナップショット レプリケーション

  • トランザクション レプリケーション

  • マージ レプリケーション

適切な種類のレプリケーションを選択するのに役立つように、このトピックでは以下の内容について説明します。

  • レプリケーションのシナリオ

    ここでは、レプリケーションの一般的な利用ケースのいくつかを簡単に説明し、より詳細な説明へのリンクも記載します。

  • レプリケーションの種類

    ここでは、それぞれの種類のレプリケーションが適しているアプリケーション要件について説明します。

  • サブスクライバでのデータ更新

    ここでは、サブスクライバでデータを更新する必要があるアプリケーションで利用可能なオプションについて説明します。

まずシナリオに目を通し、アプリケーションの要件に最も近いシナリオを見つけてから、リンク先の詳細な説明を参照することをお勧めします。ビジネスの要件に近いものが見つからない場合や、レプリケーションの種類の詳細が知りたい場合は、「レプリケーションの種類」を参照してください。アプリケーションが 1 つ以上のサブスクライバで更新を行う必要がある場合は、「サブスクライバでのデータ更新」を参照して、使用する適切なテクノロジを決定してください。

レプリケーションのシナリオ

レプリケーションのシナリオは、サーバー間環境でのデータのレプリケーションと、サーバー対クライアント環境でのデータのレプリケーションの、大きな 2 つのカテゴリに分類できます。サーバー間環境のシナリオは、トランザクション レプリケーション (場合によってはスナップショット レプリケーション) を使用して実装されます。サーバー対クライアント環境のシナリオは、マージ レプリケーションを使用して実装されます。

サーバー間環境のシナリオ

一般に、サーバー間でのデータのレプリケーションは、以下のアプリケーションおよび要件をサポートするために行われます。

シナリオ

説明

スケーラビリティと可用性の向上

継続的に更新されるデータのコピーを保持しておくことで、読み取り操作を複数のサーバーに拡張することができます。同じデータのコピーを複数持つことによって得られる冗長性は、予定されたシステム メンテナンスや予定外のシステム メンテナンスの際にきわめて重要です。詳細については、「スケーラビリティと可用性の向上」を参照してください。

データ ウェアハウジングとレポート

データ ウェアハウスとレポート サーバーでは、オンライン トランザクション処理 (OLTP) サーバーからのデータを使用することがよくあります。レプリケーションを使用して、OLTP サーバーと、レポート作成システムや意思決定支援システム間でデータを移動します。詳細については、「データ ウェアハウジングとレポート」を参照してください。

複数サイトからのデータの統合

支社からデータを収集して本社で統合することがよくあります。同様に、支社にデータをレプリケートすることもあります。詳細については、「複数サイトからのデータの統合 (サーバー)」を参照してください。

異種データの統合

Microsoft SQL Server 以外のデータベースとやり取りするデータに依存するアプリケーションもあります。レプリケーションを使用して、SQL Server 以外のデータベースからのデータを統合します。詳細については、「異種データの統合」を参照してください。

バッチ処理のオフロード

OLTP サーバーでバッチ処理を実行すると、リソースを消費しすぎることがあります。レプリケーションを使用して、専用のバッチ処理サーバーに処理をオフロードします。詳細については、「バッチ処理のオフロード」を参照してください。

サーバー対クライアント環境のシナリオ

一般に、サーバーとクライアント (ワークステーション、ラップトップ、Tablet PC、デバイスなど) の間でデータのレプリケーションを行うのは、以下のアプリケーションをサポートする場合です。

シナリオ

説明

モバイル ユーザーとのデータ交換

多くのアプリケーションでは、営業担当者、配送ドライバなどを含むリモート ユーザーがデータを利用できることが必要です。これらのアプリケーションには、顧客間関係管理 (CRM)、セールス フォース オートメーション (SFA)、およびフィールド フォース オートメーション (FFA) などがあります。詳細については、「モバイル ユーザーとのデータ交換」を参照してください。

店舗販売時点管理 (POS) アプリケーション

精算端末や ATM などの POS アプリケーションでは、リモート サイトから中央サイトにデータをレプリケートする必要があります。詳細については、「店舗販売時点管理 (POS) アプリケーション」を参照してください。

複数サイトからのデータの統合

アプリケーションでは、複数のサイトからのデータを統合することがよくあります。たとえば、支社を支援するアプリケーションでは、支社と本社間でデータを片方向または双方向でやり取りする必要があります。詳細については、「複数サイトからのデータの統合 (クライアント)」を参照してください。

レプリケーションの種類

スナップショット レプリケーション

スナップショット処理は、一般にトランザクション パブリケーションとマージ パブリケーションで使用する初期データセットやデータベース オブジェクトを提供するために使用されますが、スナップショット レプリケーション自体を利用することもできます。次の条件に 1 つ以上当てはまる場合は、スナップショット レプリケーションを単独で使用する方法が最適です。

  • データの変更頻度が低い。

  • パブリッシャで期限切れになったデータのコピーが一定の期間存在していても問題がない。

  • レプリケートするデータの量が少ない。

  • 短時間に大量の変更が発生する。

データの変更が大量であるが頻度が低い場合は、スナップショット レプリケーションが最適です。たとえば、販売組織が製品価格の一覧を保持しており、全価格が一年に一度か二度まとめて更新される場合、データ変更後に全体のスナップショットをレプリケートすることをお勧めします。

トランザクション レプリケーション

トランザクション レプリケーションは一般にサーバー間の環境で使用され、次のような場合に適しています。

  • 増分変更をその都度サブスクライバに反映する場合。

  • アプリケーションで、パブリッシャでの変更をサブスクライバに反映するまでの待機時間を短くする必要がある場合。

  • アプリケーションで中間状態のデータにアクセスする必要がある場合。たとえば行が 5 回変更された場合、トランザクション レプリケーションでは、その行の最終的な変更結果だけでなく、それぞれの変更にアプリケーションで応答すること (トリガを起動するなど) ができます。

  • パブリッシャで大量の挿入、更新、および削除が行われる場合。

  • パブリッシャまたはサブスクライバが SQL Server 以外のデータベース (Oracle など) である場合。

既定では、変更はパブリッシャには反映されないため、トランザクション パブリケーションに対するサブスクライバは読み取り専用として処理されます。ただし、サブスクライバでの更新を許可するオプションも用意されています。詳細については、このトピックの「サブスクライバでのデータ更新」を参照してください。

マージ レプリケーション

マージ レプリケーションは、一般にサーバー対クライアント環境で使用されます。マージ レプリケーションは、以下の状況に適しています。

  • 複数のサブスクライバで別々の時刻に同じデータを更新し、それらの変更をパブリッシャや他のサブスクライバに反映する場合がある。

  • サブスクライバで、データを受信し、オフラインで変更を行い、後でパブリッシャおよび他のサブスクライバと変更を同期する必要がある。

  • 各サブスクライバが、データの別々の部分を必要とする。

  • 競合が発生する可能性があり、発生した場合にはそれを検出して解決できる必要がある。

  • アプリケーションで、中間状態のデータにアクセスするのではなく、最終的な変更結果が必要である。たとえば、サブスクライバでパブリッシャと同期する前に行が 5 回変更された場合、最終的な変更結果 (つまり、5 回目の値) を反映させるために、パブリッシャで 1 回だけ行が変更されます。

マージ レプリケーションでは、さまざまなサイトが自律的に動作し、更新内容が後で 1 つにマージされます。更新は複数のノードで発生するため、パブリッシャおよび複数のサブスクライバで同じデータが更新されている場合があります。したがって、更新をマージする際に競合が発生する可能性があるため、マージ レプリケーションには競合を処理するいくつかの方法が用意されています。

サブスクライバでのデータ更新

以下の種類のレプリケーションおよびレプリケーション オプションでは、サブスクライバで変更を行い、その変更をパブリッシャに送ることができます。

レプリケーションの種類

使用する状況

マージ レプリケーション

  • サブスクライバの数が多い場合。

  • データをモバイル ユーザーにレプリケートする場合。

  • レプリケートされたデータが、サブスクライバで頻繁に更新される場合。

  • 各サブスクライバがパーティションの異なるデータを受け取るように、データのフィルタ選択が必要な場合。

詳細については、「マージ レプリケーションの概要」および「マージ レプリケーションの動作方法」を参照してください。

ピア ツー ピア トランザクション レプリケーション

  • スケーラビリティと可用性を向上させるためにレプリケーションを使用する場合。

  • 待機時間を最小限に抑える必要がある場合。

  • データがサブスクライバ間でパーティション分割されない場合。

  • 競合が発生することは普通ありませんが、発生した場合は検出する必要があります。

詳細については、「ピア ツー ピア トランザクション レプリケーション」を参照してください。

更新サブスクリプションを使用するトランザクション レプリケーション

  • サブスクライバの数が少ない場合。

  • レプリケートされるデータがサブスクライバではほとんど読み取り専用である場合。

  • サブスクライバ、ディストリビュータ、パブリッシャがほとんどの時間接続されている場合 (即時更新サブスクリプションの場合)。

詳細については、「トランザクション レプリケーションの更新可能なサブスクリプション」を参照してください。