スナップショット レプリケーションおよびトランザクション レプリケーションのバックアップと復元の方式

スナップショット レプリケーションおよびトランザクション レプリケーションのバックアップと復元の方式を計画する場合には、以下の 3 点を考慮する必要があります。

  • バックアップ対象のデータベース

  • トランザクション レプリケーションのバックアップ設定

  • データベースを復元するために必要な手順。この手順は、レプリケーションの種類と選択したオプションによって異なります。

このトピックでは、これらの各項目について、以下の 3 つのセクションで説明します。Oracle パブリッシングのバックアップと復元の詳細については、「Oracle パブリッシャのバックアップと復元」を参照してください。

データベースのバックアップ

スナップショット レプリケーションおよびトランザクション レプリケーションの場合は、以下のデータベースを定期的にバックアップする必要があります。

  • パブリッシャにあるパブリケーション データベース

  • ディストリビュータにあるディストリビューション データベース

  • サブスクライバにあるサブスクリプション データベース

  • パブリッシャ、ディストリビュータ、およびすべてのサブスクライバにある master および msdb システム データベース。これらのデータベースは、相互に関連するレプリケーション データベースとして、同時にバックアップする必要があります。たとえば、パブリッシャでパブリケーション データベースをバックアップするときに、master および msdb データベースも同時にバックアップします。パブリケーション データベースが復元されるときに、master および msdb データベースのレプリケーションの構成と設定が、パブリケーション データベースと一致していることを確認します。

定期的なログ バックアップを実行する場合は、レプリケーション関連の変更をログ バックアップでキャプチャする必要があります。ログ バックアップを実行しない場合は、レプリケーションに関連する設定を変更するたびに、バックアップを実行する必要があります。詳細については、「一般にバックアップの更新が必要になるアクション」を参照してください。

トランザクション レプリケーションのバックアップ設定

トランザクション レプリケーションには "sync with backup" オプションが用意されており、ディストリビューション データベースおよびパブリケーション データベースで設定できます。

  • ディストリビューション データベースでは、常にこのオプションを設定することをお勧めします。

    ディストリビューション データベースでこのオプションを設定すると、パブリケーション データベースのログに記録されたトランザクションは、ディストリビューション データベース内のバックアップが終了するまで切り捨てられることはありません。ディストリビューション データベースは前回のバックアップに復元できます。失われたトランザクションは、パブリケーション データベースからディストリビューション データベースに配信されます。レプリケーションは影響を受けることなく継続されます。

    ディストリビューション データベースでこのオプションを設定しても、レプリケーションの待機時間には影響しません。ただし、ディストリビューション データベース内の対応するトランザクションがバックアップされるまで、パブリケーション データベースでのログの切り捨てが遅延されます (この結果、パブリケーション データベースのトランザクション ログのサイズが増加する可能性があります)。

  • アプリケーションがレプリケーションの待機時間の延長を許容できる場合は、パブリケーション データベースでこのオプションを設定することをお勧めします。

    パブリケーション データベースでこのオプションを設定すると、パブリケーション データベースでのバックアップが終了するまで、トランザクションがディストリビューション データベースに配信されることはなくなります。その後、パブリッシャでパブリケーション データベースを前回のバックアップに復元できます。復元されたパブリケーション データベースにないトランザクションが、ディストリビューション データベースに存在する可能性は一切ありません。

    パブリッシャでのバックアップが終了するまでの間、トランザクションがディストリビューション データベースに配信されなくなるため、レプリケーションの待機時間とスループットが影響を受けます。たとえば、トランザクション ログが 5 分ごとにバックアップされる場合、パブリッシャでトランザクションがコミットされてから、パブリッシャからディストリビューション データベース、その後サブスクライバにトランザクションが配信されるまでの間に、さらに 5 分間の待機時間が発生します。

    注意注意

    "sync with backup" オプションを設定すると、パブリケーション データベースとディストリビューション データベースの一貫性が確保されますが、データの損失が発生しなくなるわけではありません。たとえば、トランザクション ログが見つからない場合、トランザクション ログの前回のバックアップ以降にコミットされたトランザクションを、パブリケーション データベースまたはディストリビューション データベースで利用することはできません。これは、レプリケートされていないデータベースと同様の動作です。

"sync with backup" オプションを設定するには

レプリケーションに関連するデータベースの復元

最新のバックアップが利用可能で適切な手順が実行された場合、レプリケーション トポロジ内のすべてのデータベースを復元できます。パブリケーション データベースの復元手順は、使用するレプリケーションの種類とオプションによって異なります。ただし、パブリケーション データベース以外のデータベースの復元手順は、レプリケーションの種類とオプションに依存しません。

レプリケーションでは、レプリケートされたデータベースをバックアップ作成元のサーバーおよびデータベースに復元する操作がサポートされます。レプリケートされたデータベースのバックアップを別のサーバーまたはデータベースに復元する場合は、レプリケーションの設定は保存できません。この場合、バックアップの復元後にすべてのパブリケーションおよびサブスクリプションを再作成する必要があります。

パブリッシャ

以下の種類のレプリケーションについては、復元手順が用意されています。

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

  • 読み取り専用トランザクション レプリケーション

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

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

msdb データベースおよび master データベースの復元方法についてもこのセクションで説明しますが、上記の 4 種類のレプリケーションについてはすべて同じ方法です。

パブリケーション データベース : スナップショット レプリケーション

  1. パブリケーション データベースの最新バックアップを復元します。手順 2. に進みます。

  2. すべてのパブリケーションおよびサブスクリプションに対する最新の構成がパブリケーション データベースのバックアップに含まれていますか。答えが「はい」の場合、復元は完了です。「いいえ」の場合は、手順 3. に進みます。

  3. パブリッシャ、ディストリビュータ、およびサブスクライバで、レプリケーション構成を削除した後、再作成を行います。復元が完了します。

    レプリケーションを削除する方法の詳細については、「レプリケーションの削除」および「sp_removedbreplication (Transact-SQL)」を参照してください。

パブリケーション データベース : 読み取り専用トランザクション レプリケーション

  1. パブリケーション データベースの最新バックアップを復元します。手順 2. に進みます。

  2. 障害の発生前に、パブリケーション データベースで "sync with backup" 設定が有効になっていましたか。答えが「はい」の場合は、手順 3. に進みます。「いいえ」の場合は、手順 5. に進みます。

    設定が有効の場合、SELECT DATABASEPROPERTYEX('<PublicationDatabaseName>', 'IsSyncWithBackup') クエリが "1" を返します。

  3. 復元されたバックアップは完全かつ最新ですか。すべてのパブリケーションおよびサブスクリプションに対する最新の構成がこのバックアップに含まれていますか。答えが「はい」の場合、復元は完了です。「いいえ」の場合は、手順 4. に進みます。

  4. 復元されたパブリケーション データベースの構成情報が最新ではありません。このため、サブスクライバで未実行のコマンドがすべてディストリビューション データベースに存在することを確認し、レプリケーション構成の削除と再作成を行う必要があります。

    1. すべてのサブスクライバがディストリビューション データベース内の未実行のコマンドと同期するまで、ディストリビューション エージェントを実行します。レプリケーション モニタの [未配布のコマンド] タブを使用するか、またはディストリビューション データベース内の MSdistribution_status ビューでクエリを実行して、すべてのコマンドがサブスクライバに配信されたことを確認します。手順 b. に進みます。

      ディストリビューション エージェントを実行する方法の詳細については、「レプリケーション エージェントの起動および停止方法 (SQL Server Management Studio)」および「レプリケーション エージェント実行可能ファイルの概念」を参照してください。

      コマンドを確認する方法の詳細については、「レプリケートされたコマンドなどディストリビューション データベースに格納されている情報を表示する方法 (レプリケーション Transact-SQL プログラミング)」および「サブスクリプションに関連付けられているエージェントの情報を表示し、タスクを実行する方法 (レプリケーション モニタ)」を参照してください。

    2. パブリッシャ、ディストリビュータ、およびサブスクライバで、レプリケーション構成を削除した後、再作成を行います。サブスクリプションを再作成するときには、サブスクライバにデータが格納済みであることを指定します。復元が完了します。

      レプリケーションを削除する方法の詳細については、「レプリケーションの削除」および「sp_removedbreplication (Transact-SQL)」を参照してください。

      サブスクライバにデータが格納済みであることを指定する方法の詳細については、「サブスクリプションを手動で初期化する方法 (SQL Server Management Studio)」および「サブスクリプションを手動で初期化する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

  5. パブリケーション データベースで "sync with backup" オプションが設定されていませんでした。このため、復元されたバックアップに含まれていないトランザクションが、ディストリビュータまたはサブスクライバに配信された可能性があります。サブスクライバで未実行のコマンドがすべてディストリビューション データベースに存在することを確認し、復元されたバックアップに含まれないすべてのトランザクションをパブリケーション データベースに手動で適用する必要があります。

    重要な注意事項重要

    この処理を実行することによって、復元対象のパブリッシュされたテーブルを、バックアップから復元されたパブリッシュされていないテーブルよりも新しい状態にすることができます。

    1. すべてのサブスクライバがディストリビューション データベース内の未実行のコマンドと同期するまで、ディストリビューション エージェントを実行します。レプリケーション モニタの [未配布のコマンド] タブを使用するか、またはディストリビューション データベース内の MSdistribution_status ビューでクエリを実行して、すべてのコマンドがサブスクライバに配信されたことを確認します。手順 b. に進みます。

      ディストリビューション エージェントを実行する方法の詳細については、「レプリケーション エージェントの起動および停止方法 (SQL Server Management Studio)」および「レプリケーション エージェント実行可能ファイルの概念」を参照してください。

      コマンドを確認する方法の詳細については、「レプリケートされたコマンドなどディストリビューション データベースに格納されている情報を表示する方法 (レプリケーション Transact-SQL プログラミング)」および「サブスクリプションに関連付けられているエージェントの情報を表示し、タスクを実行する方法 (レプリケーション モニタ)」を参照してください。

    2. tablediff ユーティリティまたはその他のツールを使用して、パブリッシャとサブスクライバを手動で同期します。これにより、パブリケーション データベースのバックアップに含まれていなかったサブスクリプション データベースのデータを復旧できます。手順 c. に進みます。

      tablediff ユーティリティの詳細については、「レプリケートされたテーブルを比較して相違があるかどうかを確認する方法 (レプリケーション プログラミング)」を参照してください。

    3. 復元されたバックアップは完全かつ最新ですか。すべてのパブリケーションおよびサブスクリプションに対する最新の構成がこのバックアップに含まれていますか。答えが「はい」の場合は、sp_replrestart ストアド プロシージャを実行して、パブリッシャのメタデータをディストリビュータのメタデータと再同期します。復元が完了します。答えが「いいえ」の場合は、手順 d. に進みます。

    4. パブリッシャ、ディストリビュータ、およびサブスクライバで、レプリケーション構成を削除した後、再作成を行います。サブスクリプションを再作成するときには、サブスクライバにデータが格納済みであることを指定します。復元が完了します。

      レプリケーションを削除する方法の詳細については、「レプリケーションの削除」および「sp_removedbreplication (Transact-SQL)」を参照してください。

      サブスクライバにデータが格納済みであることを指定する方法の詳細については、「サブスクリプションを手動で初期化する方法 (SQL Server Management Studio)」および「サブスクリプションを手動で初期化する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

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

  1. パブリケーション データベースの最新バックアップを復元します。手順 2. に進みます。

  2. すべてのサブスクライバがディストリビューション データベース内の未実行のコマンドと同期するまで、ディストリビューション エージェントを実行します。レプリケーション モニタの [未配布のコマンド] タブを使用するか、またはディストリビューション データベース内の MSdistribution_status ビューでクエリを実行して、すべてのコマンドがサブスクライバに配信されたことを確認します。手順 3. に進みます。

    ディストリビューション エージェントを実行する方法の詳細については、「レプリケーション エージェントの起動および停止方法 (SQL Server Management Studio)」および「レプリケーション エージェント実行可能ファイルの概念」を参照してください。

    コマンドを確認する方法の詳細については、「レプリケートされたコマンドなどディストリビューション データベースに格納されている情報を表示する方法 (レプリケーション Transact-SQL プログラミング)」および「サブスクリプションに関連付けられているエージェントの情報を表示し、タスクを実行する方法 (レプリケーション モニタ)」を参照してください。

  3. キュー更新サブスクリプションを使用している場合は、各サブスクライバに接続して、サブスクリプション データベースの MSreplication_queue (Transact-SQL) テーブルからすべての行を削除します。手順 4. に進みます。

    注意注意

    キュー更新サブスクリプションおよび ID 列を含むテーブルを使用している場合は、復元後に正しい ID 範囲が割り当てられていることを確認する必要があります。詳細については、「ID 列のレプリケート」を参照してください。

  4. サブスクライバで未実行のコマンドがすべてディストリビューション データベースに存在することを確認し、復元されたバックアップに含まれないすべてのトランザクションをパブリケーション データベースに手動で適用する必要があります。

    重要な注意事項重要

    この処理を実行することによって、復元対象のパブリッシュされたテーブルを、バックアップから復元されたパブリッシュされていないテーブルよりも新しい状態にすることができます。

    1. すべてのサブスクライバがディストリビューション データベース内の未実行のコマンドと同期するまで、ディストリビューション エージェントを実行します。レプリケーション モニタを使用するか、またはディストリビューション データベース内の MSdistribution_status ビューでクエリを実行して、すべてのコマンドがサブスクライバに配信されたことを確認します。手順 b. に進みます。

    2. tablediff ユーティリティまたはその他のツールを使用して、パブリッシャとサブスクライバを手動で同期します。これにより、パブリケーション データベースのバックアップに含まれていなかったサブスクリプション データベースのデータを復旧できます。手順 c. に進みます。

      tablediff ユーティリティの詳細については、「レプリケートされたテーブルを比較して相違があるかどうかを確認する方法 (レプリケーション プログラミング)」を参照してください。

    3. 復元されたバックアップは完全かつ最新ですか。すべてのパブリケーションおよびサブスクリプションに対する最新の構成がこのバックアップに含まれていますか。答えが「はい」の場合は、sp_replrestart ストアド プロシージャを実行して、パブリッシャのメタデータをディストリビュータのメタデータと再同期します。復元が完了します。答えが「いいえ」の場合は、手順 d. に進みます。

    4. パブリッシャ、ディストリビュータ、およびサブスクライバで、レプリケーション構成を削除した後、再作成を行います。サブスクリプションを再作成するときには、サブスクライバにデータが格納済みであることを指定します。復元が完了します。

      レプリケーションを削除する方法の詳細については、「レプリケーションの削除」および「sp_removedbreplication (Transact-SQL)」を参照してください。

      サブスクライバにデータが格納済みであることを指定する方法の詳細については、「サブスクリプションを手動で初期化する方法 (SQL Server Management Studio)」および「サブスクリプションを手動で初期化する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

パブリケーション データベース : ピア ツー ピア トランザクション レプリケーション

以下の手順では、パブリケーション データベース AB、および C は、ピア ツー ピア トランザクション レプリケーション トポロジ内にあります。データベース A およびデータベース C はオンラインで正常に動作しています。データベース B は復元対象のデータベースです。ここで説明する処理、特に手順 7、10、および 11 は、ピア ツー ピア トポロジにノードを追加するために必要な処理とよく似ています。これらの手順を最も簡単に実行する方法は、ピア ツー ピア トポロジ構成ウィザードを使用することです。詳細については、「ピア ツー ピア トランザクション レプリケーションを構成する方法 (SQL Server Management Studio)」を参照してください。ストアド プロシージャを使用することもできます。詳細については、「ピア ツー ピア トランザクション レプリケーションを構成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

  1. ディストリビューション エージェントを実行して、データベース A およびデータベース C のサブスクリプションを同期します。手順 2. に進みます。

    ディストリビューション エージェントを実行する方法の詳細については、「レプリケーション エージェントの起動および停止方法 (SQL Server Management Studio)」および「レプリケーション エージェント実行可能ファイルの概念」を参照してください。

  2. B が使用するディストリビューション データベースがまだ利用可能な場合は、ディストリビューション エージェントを実行して、データベース A とデータベース B の間のサブスクリプション、およびデータベース B とデータベース C の間のサブスクリプションを同期します。手順 3. に進みます。

  3. B が使用するディストリビューション データベースで sp_removedistpublisherdbreplication を実行することで、ディストリビューション データベースからメタデータを削除します。手順 4. に進みます。

  4. データベース A およびデータベース C で、データベース B のパブリケーションに対するサブスクリプションを削除します。手順 5. に進みます。

    サブスクリプションを削除する方法の詳細については、「パブリケーションのサブスクライブ」を参照してください。

  5. データベース A のログ バックアップまたは完全バックアップを実行します。手順 6. に進みます。

  6. データベース A のバックアップをデータベース B で復元します。データベース B にはデータベース A のデータが格納されますが、レプリケーション構成は含まれません。バックアップを別のサーバーに復元すると、レプリケーションは削除されます。データベース B からレプリケーションが削除されたのはそのためです。手順 7. に進みます。

  7. データベース B でパブリケーションを再作成し、その後にデータベース A とデータベース B の間のサブスクリプションを再作成します (データベース C 関連のサブスクリプションについては後の段階で処理します)。

    1. データベース B でパブリケーションを再作成します。手順 b. に進みます。

    2. データベース A のパブリケーションに対するサブスクリプションをデータベース B で再作成します。その際に、バックアップを使用してサブスクリプションを初期化するように指定します (sp_addsubscription@sync_type パラメータの値を "initialize with backup" に指定します)。手順 c. に進みます。

    3. データベース B のパブリケーションに対するサブスクリプションをデータベース A で再作成します。その際に、サブスクライバにデータが格納済みであることを指定します (sp_addsubscription@sync_type パラメータの値を "replication support only" に指定します)。手順 8. に進みます。

  8. ディストリビューション エージェントを実行して、データベース A およびデータベース B のサブスクリプションを同期します。パブリッシュされたテーブルに ID 列がある場合は、手順 9. に進みます。ない場合は手順 10. に進みます。

  9. 復元後、データベース A の各テーブルに割り当てた ID 範囲は、データベース B でも使用されます。データベース B の障害発生後、データベース A およびデータベース C に反映されたすべての変更を復元されたデータベース B に適用し、その後各テーブルの ID 範囲を再作成します。

    1. データベース Bsp_requestpeerresponse を実行し、出力パラメータ @request_id を取得します。手順 b. に進みます。

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

    3. 手順 b. で取得した @request_id 値を指定して sp_helppeerresponses を実行します。すべてのノードがピア要求を受信するまで待機します。手順 d. に進みます。

    4. DBCC CHECKIDENT を使用してデータベース B の各テーブルを再作成し、適切な範囲が使用されていることを確認します。手順 10. に進みます。

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

  10. この時点では、データベース B とデータベース C は直接接続されていません。両者はデータベース A を介して変更を受信します。SQL Server 2005 を実行しているノードがトポロジに含まれている場合は手順 11. に進み、それ以外の場合は手順 12. に進みます。

  11. システムを停止し、データベース B とデータベース C の間のサブスクリプションを再作成します。システムを停止するときには、パブリッシュされたテーブルの利用をすべてのノードで停止し、各ノードが他のすべてのノードの変更を受け取っていることを確認します。

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

    2. データベース Bsp_requestpeerresponse を実行し、出力パラメータ @request_id を取得します。手順 c. に進みます。

    3. 既定では、ディストリビューション エージェントが連続的に実行されるように設定されているため、すべてのノードに自動的にトークンが送信されます。ディストリビューション エージェントが連続モードで実行されていない場合は、エージェントを実行します。手順 d. に進みます。

    4. 手順 b. で取得した @request_id 値を指定して sp_helppeerresponses を実行します。すべてのノードがピア要求を受信するまで待機します。手順 e. に進みます。

    5. データベース C のパブリケーションに対するサブスクリプションをデータベース B で再作成します。その際に、サブスクライバにデータが格納済みであることを指定します。手順 b. に進みます。

    6. データベース B のパブリケーションに対するサブスクリプションをデータベース C で再作成します。その際に、サブスクライバにデータが格納済みであることを指定します。手順 13. に進みます。

  12. データベース B とデータベース C の間のサブスクリプションを再作成します。

    1. データベース BMSpeer_lsns テーブルにクエリを実行して、データベース B がデータベース C から受信した最新のトランザクションのログ シーケンス番号 (LSN) を取得します。

    2. データベース C のパブリケーションに対するサブスクリプションをデータベース B で再作成します。その際に、LSN に基づいてサブスクリプションを初期化するように指定します (sp_addsubscription@sync_type パラメータの値を "initialize from lsn" に指定します)。手順 b. に進みます。

    3. データベース B のパブリケーションに対するサブスクリプションをデータベース C で再作成します。その際に、サブスクライバにデータが格納済みであることを指定します。手順 13. に進みます。

  13. ディストリビューション エージェントを実行して、データベース B およびデータベース C のサブスクリプションを同期します。復元が完了します。

msdb データベース (パブリッシャ)

  1. msdb データベースの最新バックアップを復元します。

  2. 復元されたバックアップは完全かつ最新ですか。すべてのパブリケーションおよびサブスクリプションに対する最新の構成がこのバックアップに含まれていますか。答えが「はい」の場合、復元は完了です。「いいえ」の場合は、手順 3. に進みます。

  3. レプリケーション スクリプトを使用して、サブスクリプションのクリーンアップ ジョブを再作成します。復元が完了します。

master データベース (パブリッシャ)

  1. master データベースの最新バックアップを復元します。

  2. データベースのレプリケーション構成および設定が、パブリケーション データベースと一致していることを確認します。

ディストリビュータにあるデータベース

ディストリビューション データベース

  1. ディストリビューション データベースの最新バックアップを復元します。

  2. 障害の発生前に、ディストリビューション データベースで "sync with backup" 設定が有効になっていましたか。答えが「はい」の場合は、手順 3. に進みます。「いいえ」の場合は、手順 4. に進みます。

    設定が有効の場合、SELECT DATABASEPROPERTYEX('<DistributionDatabaseName>', 'IsSyncWithBackup') クエリが "1" を返します。

  3. 復元されたバックアップは完全かつ最新ですか。すべてのパブリケーションおよびサブスクリプションに対する最新の構成がこのバックアップに含まれていますか。答えが「はい」の場合、復元は完了です。「いいえ」の場合は、手順 4. に進みます。

  4. 復元されたディストリビューション データベースの構成情報が最新でないか、またはディストリビューション データベースで "sync with backup" オプションが設定されていませんでした (復元後に、パブリッシャでコミットされた後にサブスクライバに配信されていないトランザクションは、ディストリビューション データベースで見つからない可能性があります)。レプリケーションの削除および再作成を行ってから検証を実行します。

    1. パブリッシャ、ディストリビュータ、およびサブスクライバで、レプリケーション構成を削除した後、再作成を行います。サブスクリプションを再作成するときには、サブスクライバにデータが格納済みであることを指定します。手順 b. に進みます。

      レプリケーションを削除する方法の詳細については、「レプリケーションの削除」および「sp_removedbreplication (Transact-SQL)」を参照してください。

      サブスクライバにデータが格納済みであることを指定する方法の詳細については、「サブスクリプションを手動で初期化する方法 (SQL Server Management Studio)」および「サブスクリプションを手動で初期化する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

    2. 検証を行うすべてのパブリケーションにマークを付けます。検証に失敗したサブスクリプションを再初期化します。復元が完了します。

      検証の詳細については、「レプリケートされたデータの検証」を参照してください。再初期化の詳細については、「サブスクリプションの再初期化」を参照してください。

msdb データベース (ディストリビュータ)

  1. msdb データベースの最新バックアップを復元します。

  2. 復元されたバックアップは完全かつ最新ですか。すべてのパブリケーションおよびサブスクリプションに対する最新の構成がこのバックアップに含まれていますか。答えが「はい」の場合、復元は完了です。「いいえ」の場合は、手順 3. に進みます。

  3. パブリッシャ、ディストリビュータ、およびサブスクライバで、レプリケーション構成を削除した後、再作成を行います。サブスクリプションを再作成するときには、サブスクライバにデータが格納済みであることを指定します。手順 4. に進みます。

    レプリケーションを削除する方法の詳細については、「レプリケーションの削除」および「sp_removedbreplication (Transact-SQL)」を参照してください。

    サブスクライバにデータが格納済みであることを指定する方法の詳細については、「サブスクリプションを手動で初期化する方法 (SQL Server Management Studio)」および「サブスクリプションを手動で初期化する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

  4. 検証を行うすべてのパブリケーションにマークを付けます。検証に失敗したサブスクリプションを再初期化します。復元が完了します。

    検証の詳細については、「レプリケートされたデータの検証」を参照してください。再初期化の詳細については、「サブスクリプションの再初期化」を参照してください。

master データベース (ディストリビュータ)

  1. master データベースの最新バックアップを復元します。

  2. データベースのレプリケーション構成および設定が、パブリケーション データベースと一致していることを確認します。

サブスクライバにあるデータベース

サブスクリプション データベース

  1. サブスクリプション データベースの最新バックアップは、ディストリビューション データベースにおけるディストリビューションの最大保有期間の設定よりも新しいですか (これにより、サブスクライバを最新状態にするために必要なすべてのコマンドがディストリビュータに存在しているかどうかを判断できます)。答えが「はい」の場合は、手順 2. に進みます。「いいえ」の場合は、サブスクリプションを再初期化します。復元が完了します。

    ディストリビューションの最大保有期間を確認するには、sp_helpdistributiondb を実行し、max_distretention 列から値 (時間単位) を取得します。

    サブスクリプションを再初期化する方法の詳細については、「サブスクリプションを再初期化する方法 (SQL Server Management Studio)」および「サブスクリプションを再初期化する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

  2. サブスクリプション データベースの最新バックアップを復元します。手順 3. に進みます。

  3. サブスクリプション データベースにプッシュ サブスクリプションのみが含まれている場合は、手順 4. に進みます。サブスクリプション データベースにプル サブスクリプションが含まれている場合は、次の質問に答えてください。サブスクリプション情報は最新ですか。障害発生時に設定されていたすべてのテーブルおよびオプションがデータベースに含まれていますか。答えが「はい」の場合は、手順 4. に進みます。「いいえ」の場合は、サブスクリプションを再初期化します。復元が完了します。

  4. サブスクライバを同期するには、ディストリビューション エージェントを実行します。復元が完了します。

    ディストリビューション エージェントを実行する方法の詳細については、「レプリケーション エージェントの起動および停止方法 (SQL Server Management Studio)」および「レプリケーション エージェント実行可能ファイルの概念」を参照してください。

msdb データベース (サブスクライバ)

  1. msdb データベースの最新バックアップを復元します。このサブスクライバでプル サブスクリプションが使用されていますか。答えが「いいえ」の場合、復元は完了です。答えが「はい」の場合は、手順 2. に進みます。

  2. 復元されたバックアップは完全かつ最新ですか。すべてのプル サブスクリプションに対する最新の構成がこのバックアップに含まれていますか。答えが「はい」の場合、復元は完了です。「いいえ」の場合は、手順 3. に進みます。

  3. プル サブスクリプションの削除および再作成を行います。サブスクリプションを再作成するときには、サブスクライバにデータが格納済みであることを指定します。復元が完了します。

    サブスクリプションを削除する方法の詳細については、「パブリケーションのサブスクライブ」を参照してください。

    サブスクライバにデータが格納済みであることを指定する方法の詳細については、「サブスクリプションを手動で初期化する方法 (SQL Server Management Studio)」および「サブスクリプションを手動で初期化する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

master データベース (サブスクライバ)

  1. master データベースの最新バックアップを復元します。

  2. データベースのレプリケーション構成および設定が、パブリケーション データベースと一致していることを確認します。