Share via


ピア ツー ピア トランザクション レプリケーションを構成する方法 (SQL Server Management Studio)

ここでは、3 ノード ピア ツー ピア トランザクション レプリケーション トポロジの作成、および既存のトポロジへのノードの追加について説明します。まず概要を説明し、その後、各手順について詳しく説明します。

  • 初期トポロジにはサーバー Aサーバー B、および サーバー C が含まれています。トポロジの作成では、どのピア データベースも利用中でないことが前提となります。トポロジを作成するには、次の操作を行います。
    1. サーバー Aサーバー B、および サーバー C でディストリビューションを構成します。
      ローカル ディストリビュータまたはリモート ディストリビュータが使用できます。リモート ディストリビュータを使用する場合は、すべてのノードに対して同一のリモート ディストリビュータを使用しないようにしてください。これは、単一地点での失敗につながるからです。ディストリビュータの詳細については、「ディストリビューションの構成」を参照してください。
    2. パブリケーションの新規作成ウィザードを使用して、サーバー A でパブリケーションを作成します。
    3. [パブリケーションのプロパティ - <Publication>] ダイアログ ボックスを使用して、ピア ツー ピア レプリケーションのパブリケーションを有効にします。
    4. サーバー A のデータベースをサーバー B およびサーバー C に復元するか、または手動で、サーバー B およびサーバー C のスキーマとデータを初期化します。すべてのノードのスキーマは同じである必要があります。
    5. ピア ツー ピア トポロジ構成ウィザードを使用して、サーバー B およびサーバー C をトポロジに追加します。サーバーを追加することにより、各サーバーでパブリケーションが作成され、トポロジ内の他のサーバー上にあるパブリケーションに対するサブスクリプションが作成されます。
      パブリッシュされたテーブルに ID 列がある場合、サーバー B およびサーバー C のテーブルの ID 範囲を再作成する必要があります。
  • トポロジが作成された後、サーバー D が追加されます。既存のトポロジにノードを追加する場合は、システムは利用中であるため、システムの不稼働期間を最小限にしなければならないことが前提となります。既存のトポロジにノードを追加するには、次の操作を行います。
    1. サーバー D でディストリビューションを構成します。
    2. サーバー A のデータベースをサーバー D に復元することによって、サーバー D のスキーマとデータを初期化します。
    3. ピア ツー ピア トポロジ構成ウィザードを使用して、サーバー D をトポロジに追加します。この時点で、サーバー D を追加することにより、サーバー D にパブリケーションが作成され、サーバー Aサーバー D 間にサブスクリプションが作成されます。
      パブリッシュされたテーブルに ID 列がある場合、サーバー D のテーブルの ID 範囲を再作成する必要があります。
      この時点で、サーバー D はすべてのサーバーとの間で変更を送受信できますが、すべての変更はサーバー B およびサーバー C に接続しているサーバー A を経由して送受信する必要があります。サーバー D と他のノード間にサブスクリプションを追加する場合は、手順 4. に進んでください。サブスクリプションの追加は必須ではありませんが、サーバー Aサーバー D 間に単一の接続しかない場合に比べてフォールト トレランスが向上します。
    4. トポロジを停止します。これにより、すべての変更を停止し、すべてのサーバーが同期されます。
    5. ピア ツー ピア トポロジ構成ウィザードを使用して、サーバー D と他のノード間にサブスクリプションを追加します。

ピア ツー ピア レプリケーション トポロジの作成

以下の一連の手順は、3 つのノードのピア ツー ピア トポロジを作成する方法を示しています。

ms152536.note(ja-jp,SQL.90).gifメモ :
各ノードで Microsoft SQL Server エージェントが動作中であり、トポロジが構成された後、ログ リーダー エージェントとディストリビューション エージェントが動作中であることを確認してください。SQL Server エージェントの詳細については、「SQL Server エージェントの起動」を参照してください。エージェントの開始および停止については、「レプリケーション エージェントの起動および停止方法 (SQL Server Management Studio)」を参照してください。

各ノードのディストリビューションを構成するには

  1. Microsoft SQL Server Management Studio で、サーバー A に接続します (この構成処理をサーバー B およびサーバー C で繰り返す必要があります)。

  2. サーバー ノードを展開し、[レプリケーション] フォルダを右クリックして、[ディストリビューションの構成] をクリックします。

  3. ディストリビューションの構成ウィザードの [ディストリビュータ] ページで、ディストリビュータを選択します。

    ローカル ディストリビュータを使用するには、['<ServerName>' を独自のディストリビュータとする (SQL Server はディストリビューション データベースとログを作成します)] を選択します。リモート ディストリビュータを使用するには、[以下のサーバーをディストリビュータとして使用する] を選択し、サーバーを選択します。このサーバーは既にディストリビュータとして構成されている必要があり、パブリッシャではこのディストリビュータを使用できるようになっている必要があります。詳細については、「ディストリビュータでリモート パブリッシャを有効にする方法 (SQL Server Management Studio)」を参照してください。

    リモート ディストリビュータを選択した場合、サーバー A からディストリビュータへの接続に対して、[管理パスワード] ページでパスワードを入力する必要があります。このパスワードは、リモート ディストリビュータでサーバー A をパブリッシャとして有効にしたときに指定したパスワードと一致する必要があります。

  4. [スナップショット フォルダ] ページで、スナップショット フォルダを指定します。

    スナップショット フォルダは、共有として設定されている単なるディレクトリです。このフォルダに対して読み取りや書き込みを行うエージェントには、フォルダにアクセスするための十分な権限が必要です。このディレクトリには最初のノードでのレプリケーションに必要なオブジェクトが格納されます。他のノードでのピア ツー ピア レプリケーションでは使用されませんが、ディストリビュータの構成には必要です。フォルダの適切なセキュリティ保護の詳細については、「スナップショット フォルダのセキュリティ」を参照してください。

  5. [ディストリビューション データベース] ページで、ディストリビューション データベースの名前を指定します。

    ディストリビューション データベースには、トランザクション、メタデータ、および履歴データが格納されます。

  6. [パブリッシャ] ページで、必要に応じて、他のパブリッシャがサーバー A をリモート ディストリビュータとして使用できるように指定します。

    その他のパブリッシャがサーバー A をリモート ディストリビュータとして使用できるようになっている場合、パブリッシャからディストリビュータへの接続に使用するパスワードを、[ディストリビュータ パスワード] ページで入力する必要があります。

  7. [ウィザードのアクション] ページで、必要に応じて構成設定のスクリプトを作成できます。詳細については、「レプリケーションのスクリプト作成」を参照してください。

最初のノードでパブリケーションを作成するには

  1. SQL Server Management Studio でサーバー A に接続して、サーバー ノードを展開します。

  2. [レプリケーション] フォルダを展開し、[ローカル パブリケーション] フォルダを右クリックします。

  3. [新しいパブリケーション] をクリックします。

  4. パブリケーションの新規作成ウィザードの [パブリケーション データベース] ページで、パブリッシュするデータベースを選択します。

  5. [パブリケーションの種類] ページで、[トランザクション パブリケーション] を選択します。

  6. [アーティクル] ページで、パブリッシュするデータベース オブジェクトを選択します。

    アーティクルのプロパティを表示および変更するには、[アーティクルのプロパティ] をクリックします。次のプロパティは変更しないでください。

    • [対象オブジェクト名]。
    • [対象オブジェクトの所有者]。
    • [<ACTION> 配信形式] オプション (ACTION は、INSERT、UPDATE、または DELETE のいずれか) は、[<ACTION> ステートメント] または [列リストのない <ACTION> ステートメント] には設定できません。
  7. [テーブル行のフィルタ選択] ページでフィルタを定義することはできません。ピア ツー ピア パブリケーションでは、フィルタ選択はサポートされていません。

  8. [スナップショット エージェント] ページで、[スナップショットをすぐに作成する] チェック ボックスをオフにします。

  9. [エージェント セキュリティ] ページで、スナップショット エージェントおよびログ リーダー エージェントの資格情報を指定します。

    各エージェントで必要な権限の詳細については、「レプリケーション エージェントのセキュリティ モデル」および「レプリケーション セキュリティの推奨事項」を参照してください。

  10. [ウィザードのアクション] ページで、必要に応じてパブリケーションのスクリプトを作成できます。詳細については、「レプリケーションのスクリプト作成」を参照してください。

  11. [ウィザードの完了] ページで、パブリケーションの名前を指定します。パブリケーション名はトポロジ全体にわたって同じでなければならないため、ピア ツー ピア トポロジ構成ウィザードは各ノードでパブリケーションを作成するときにこの名前を使用します。

ピア ツー ピア レプリケーションのパブリケーションを有効化するには

  1. サーバー A の**[レプリケーション]** フォルダを展開し、[ローカル パブリケーション] フォルダを展開します。

  2. 作成したパブリケーションを右クリックして、[プロパティ] をクリックします。

  3. [パブリケーションのプロパティ - <Publication>] ダイアログ ボックスの [サブスクリプション オプション] ページで、プロパティ [ピア ツー ピア サブスクリプションを許可] に対して [True] の値を選択します。

  4. [OK] をクリックします。 

各ノードでスキーマおよびデータを初期化するには

  • ピアは以下のいずれかの方法で初期化できます。

    • 手動で初期化。Integration Services (SSIS)、スクリプト、またはその他の方法で、サーバー A からサーバー B およびサーバー C にスキーマとデータをコピーします。サーバー B およびサーバー C をピアとして構成する前に、これらのサーバーのスキーマとデータがサーバー A のものと同じであることを確認してください。
    • サーバー A のパブリケーション データベースのバックアップをサーバー B およびサーバー C に復元することにより初期化。データベースのバックアップと復元の詳細については、「SQL Server でのデータベースのバックアップおよび復元」を参照してください。
      ms152536.note(ja-jp,SQL.90).gif重要 :
      データベースを復元する場合、KEEP_REPLICATION オプション (Transact-SQL) または [レプリケーションの設定を保存する] オプション (SQL Server Management Studio) は指定しないでください。ピア ツー ピア トポロジ構成ウィザードを実行すると、レプリケーションによってデータベースが適切に構成されます。
      バックアップにはデータベース全体が含まれるため、各ピアのデータベースを初期化すると、パブリケーション データベースの完全なコピーが含まれます。バックアップには、行フィルタまたは列フィルタがテーブルで指定されている場合でも、パブリケーションおよびすべてのデータでアーティクルとして指定されていないテーブルが含まれます。 バックアップを復元した後に不要なオブジェクトやデータを削除するのは、管理者またはアプリケーションの責任です。以後の同期では、データの変更はアーティクルとして指定されたテーブルに適用される場合のみレプリケートされます。

初期構成時にトポロジにノードを追加するには

  1. サーバー A で作成したパブリケーションを右クリックして、[ピア ツー ピア トポロジの構成] をクリックします。[ピア ツー ピア トポロジの構成] オプションを表示するには、パブリケーション ノードを最新の情報に更新する必要がある場合もあります。

  2. ピア ツー ピア トポロジの構成ウィザードの [パブリケーション] ページで、サーバー A で作成したパブリケーションを選択します。

  3. [ピア] ページで、サーバー B を追加し、サーバー C でもこの処理を繰り返します。

    1. [SQL Server の追加] をクリックします。
    2. [サーバーへの接続] ダイアログ ボックスでサーバー B に接続します。これで、サーバー B[ピア サーバー インスタンス] 列に表示されます。
    3. [ピア データベース] メニューからサーバー B のデータベースを選択します。
    ms152536.note(ja-jp,SQL.90).gifメモ :
    サーバー A も表示されますが、既に構成済みであるため、サーバー A のチェック ボックスはオンにしないでください。
  4. [ログ リーダー エージェントのセキュリティ] ページで、各ノードのログ リーダー エージェントの資格情報を指定します。

    ログ リーダー エージェントで必要な権限の詳細については、「レプリケーション エージェントのセキュリティ モデル」および「レプリケーション セキュリティの推奨事項」を参照してください。

  5. [ディストリビューション エージェント セキュリティ] ページで、各ノードのサブスクリプションにサービスを提供するディストリビューション エージェントの資格情報を指定します。

    ピア ツー ピア トポロジ構成ウィザードによって、サブスクリプションごとに独立したエージェントのプッシュ サブスクリプションが作成されます (ディストリビューション エージェントはディストリビュータ側で実行されます)。3 ノード トポロジでは、各ノードは他の 2 つのノードのサブスクリプションを持つため、各ディストリビュータで 2 つのディストリビューション エージェントが実行されます。

    ディストリビューション エージェントで必要な権限の詳細については、「レプリケーション エージェントのセキュリティ モデル」および「レプリケーション セキュリティの推奨事項」を参照してください。

  6. [新しいピアの初期化] ページで、[ピア データベースを手動で作成したか、バックアップの実行後、変更されなかった元のパブリケーション データベースのバックアップを復元した] を選択します。

  7. ウィザードを完了します。[ピア ツー ピア トポロジを構築しています] ページで、サーバー A に対して既に存在しているログ リーダーについて警告が生成されます。これは情報メッセージであり、操作は必要ありません。

  8. パブリッシュされたテーブルに ID 列がある場合、復元後、サーバー A のテーブルに割り当てた ID 範囲がサーバー B およびサーバー C のテーブルでも使用されます。DBCC CHECKIDENT を使用してサーバー B およびサーバー C のテーブルを再作成し、それぞれ異なる範囲が使用されるようにする必要があります。

    ID 範囲の管理の詳細については、「ID 列のレプリケート」の「手動で ID 範囲を管理する場合の範囲の割り当て」を参照してください。

既存のトポロジへのノードの追加

以下の操作手順では、既存のトポロジに新規ノードを追加する方法を段階ごとに示します。

  • 第 1 段階 (3 つの操作手順の 1 番目) では、サーバー Aサーバー D 間にサブスクリプションを作成することによって、サーバー D を部分的にトポロジに接続します。これにより、変更はサーバー Aサーバー Bサーバー C で発生し続けます。サーバー D での変更は、サーバー Aサーバー D 間にサブスクリプションが作成されるとすぐに開始されます。
  • 第 2 段階 (操作手順の残りの 2 つ) では、サーバー Bサーバー D、およびサーバー Cサーバー D 間にサブスクリプションを作成することによって、サーバー D をトポロジに完全に接続します。この段階では、システムを停止する必要があります。
    第 2 段階は必須ではありませんが、サーバー Aサーバー D 間に単一の接続しかない場合に比べてフォールト トレランスが向上します。
ms152536.note(ja-jp,SQL.90).gifメモ :
各ノードで SQL Server エージェントが実行中であり、トポロジが構成された後、ログ リーダー エージェントとディストリビューション エージェントが実行中であることを確認してください。SQL Server エージェントの開始の詳細については、「SQL Server エージェントの起動」を参照してください。レプリケーション エージェントの開始の詳細については、「レプリケーション エージェントの起動および停止方法 (SQL Server Management Studio)」を参照してください。

新規ノードのディストリビューションを構成するには

  • 前のセクションの手順を参照してください。

新規ノードを初期化するには

  • サーバー Dサーバー A からのパブリケーション データベースの最新のバックアップを復元します。サーバー B またはサーバー C からのバックアップも使用できますが、サーバー D を追加するときに、ピア ツー ピア トポロジ構成ウィザードの [パブリケーション] ページでサーバーとデータベースを選択する必要があります。

トポロジに新規ノードを追加するには (サーバー A とサーバー D 間にサブスクリプションを作成)

  1. サーバー A で作成したパブリケーションを右クリックして、[ピア ツー ピア トポロジの構成] をクリックします。

  2. ピア ツー ピア トポロジ構成ウィザードの [パブリケーション] ページで、サーバー A で作成したパブリケーションを選択します。

  3. [ピア] ページで、サーバー D を追加します。

    1. [SQL Server の追加] をクリックします。
    2. [サーバーへの接続] ダイアログ ボックスでサーバー D に接続します。これで、サーバー D[ピア サーバー インスタンス] 列に表示されます。
    3. [ピア データベース] メニューからサーバー D のデータベースを選択します。
    ms152536.note(ja-jp,SQL.90).gifメモ :
    サーバー A も表示されますが、既に構成済みであるため、サーバー A のチェック ボックスはオンにしないでください。
  4. [ログ リーダー エージェントのセキュリティ] ページで、サーバー D のログ リーダー エージェントの資格情報を指定します。

  5. [ディストリビューション エージェント セキュリティ] ページで、サーバー A およびサーバー D のディストリビューション エージェントの資格情報を指定します。

  6. [新しいピアの初期化] ページで、[元のパブリケーション データベースのバックアップを復元し、バックアップ後にパブリケーション データベースを変更した] を選択します。

    このオプションを選択した場合、サーバー A からのバックアップに含まれていない変更は、サーバー D で復元されたデータベースに配信されます。ピア ツー ピア レプリケーションのパブリケーションを有効にしたとき、allow_initialize_from_backup パブリケーション プロパティは True に設定されています。レプリケーションによりサーバー A のパブリケーション データベースの変更の追跡がすぐに開始されるため、他のピアは復元後、最新の状態になります。

  7. [参照] ボタンをクリックすると使用されたバックアップに移動し、レプリケーションにより、バックアップからのログ シーケンス番号 (LSN) が読み取られます。サーバー A のパブリケーション データベースの方が LSN が大きく、すべての変更がサーバー D に配信されます。

  8. ウィザードを完了します。

  9. ID 範囲を含むパブリッシュされたテーブルの場合、サーバー A の各テーブルに割り当てた ID 範囲がサーバー D でも使用されます。システムを停止せず、すべてのノードを完全には接続しない場合は、次の手順によってサーバー D の各テーブルに対し、適切な範囲を割り当ててください。すべてのノードを完全に接続する場合は、停止が完了した後で範囲を割り当てることができます。

    1. サーバー Dsp_requestpeerresponse (Transact-SQL) を実行して、出力パラメータ @request_id を取得します。
    2. 既定では、ディストリビューション エージェントが連続して実行されるように設定されているため、すべてのノードに対してトークンが自動的に送信されます。ディストリビューション エージェントが連続モードで実行されていない場合は、エージェントを実行します。詳細については、「レプリケーション エージェント実行可能ファイルのプログラミング」または「レプリケーション エージェントの起動および停止方法 (SQL Server Management Studio)」を参照してください。
    3. 手順 b. で取得した値を @request_id に指定して sp_helppeerresponses (Transact-SQL) を実行します。ピア要求の受信がすべてのノードで完了するまで待機します。
    4. DBCC CHECKIDENT を使用してサーバー D の各テーブルを再作成し、適切な範囲が使用されていることを確認します。

トポロジを停止するには

  1. ピア ツー ピア トポロジ内のすべてのパブリッシュされたテーブルでの処理をすべて停止します。

  2. サーバー Aサーバー Bサーバー C、およびサーバー D のデータベースで sp_requestpeerresponse (Transact-SQL) を実行し、出力パラメータ @request_id を取得します。

  3. 既定では、ディストリビューション エージェントが連続して実行されるように設定されているため、すべてのノードに対してトークンが自動的に送信されます。ディストリビューション エージェントが連続モードで実行されていない場合は、エージェントを実行します。詳細については、「レプリケーション エージェント実行可能ファイルのプログラミング」または「レプリケーション エージェントの起動および停止方法 (SQL Server Management Studio)」を参照してください。

  4. 手順 2. で取得した値を @request_id に指定して、sp_helppeerresponses (Transact-SQL) を実行します。ピア要求の受信がすべてのノードで完了するまで待機します。

  5. 必要に応じて新しい ID 範囲を割り当てます。残りのサブスクリプションを追加することによって完全にトポロジに接続することができます。

新規ノードの追加のサブスクリプションを作成するには

  1. サーバー A で作成したパブリケーションを右クリックして、[ピア ツー ピア トポロジの構成] をクリックします。

  2. ピア ツー ピア トポロジ構成ウィザードの [パブリケーション] ページで、サーバー A で作成したパブリケーションを選択します。

  3. [ピア] ページで、サーバー B を追加し、サーバー C およびサーバー D でもこの処理を繰り返します。

    1. [SQL Server の追加] をクリックします。
    2. [サーバーへの接続] ダイアログ ボックスでサーバー B に接続します。これで、サーバー B[ピア サーバー インスタンス] 列に表示されます。
    3. [ピア データベース] メニューからサーバー B のデータベースを選択します。
    ms152536.note(ja-jp,SQL.90).gifメモ :
    サーバー A も表示されますが、既に構成済みであるため、サーバー A のチェック ボックスはオンにしないでください。
  4. [ログ リーダー エージェントのセキュリティ] ページで、サーバー Bサーバー C、およびサーバー D のログ リーダー エージェントの資格情報を指定します。

  5. [ディストリビューション エージェント セキュリティ] ページで、サーバー Aサーバー Bサーバー C、およびサーバー D のディストリビューション エージェントの資格情報を指定します。

  6. [新しいピアの初期化] ページで、[ピア データベースを手動で作成したか、バックアップの実行後、変更されなかった元のパブリケーション データベースのバックアップを復元した] を選択します。すべてのノードにデータがある状態で、このオプションを指定すると、各ノード間に適切なサブスクリプション リレーションシップが確立されます。

  7. ウィザードを完了します。

参照

概念

ピア ツー ピア トランザクション レプリケーション
レプリケーション エージェントの概要

ヘルプおよび情報

SQL Server 2005 の参考資料の入手