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

適用対象:SQL ServerAzure SQL Database

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

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

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

Note

Azure SQL Managed Instance は、スナップショットおよびトランザクション レプリケーションのパブリッシャー、ディストリビューター、およびサブスクライバーの可能性があります。 Azure SQL Database のデータベースは、スナップショットとトランザクション レプリケーションのプッシュ サブスクライバーの可能性しかありません。 詳細については、Azure SQL Database および Azure SQL Managed Instance を使用したトランザクションのレプリケーションに関するページを参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Note

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

    パブリッシャー データベースが可用性グループの一部である場合、ディストリビューション データベースでのバックアップとの同期オプションの設定には互換性がありません。 これにより、フェールオーバー後にログ リーダー エージェントが実行されると、次のエラーが発生する可能性があります。

    プロセスが 'machinename\instance' で 'sp_repldone/sp_replcounters' を実行できませんでした。 (ソース: MSSQL_REPL、エラー番号: MSSQL_REPL20011) ヘルプ: http://help/MSSQL_REPL20011 ディストリビューション データベースの一貫性のない状態の可能性: dist_backup_lsn {nnnnnnnn:nnnnnn:nnnn}、dist_last_lsn {nnnnnnnn:nnnnnn:nnnn}。 "sp_repldone NULL, NULL, 0, 0, 1" を実行した後、sp_replflush を実行してください。 パブリケーションのすべてのサブスクリプションを再初期化してください。 (ソース: MSSQLServer、エラー番号: 18846)

"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)」を参照してください。

      サブスクライバーにデータが格納済みであることを指定する方法の詳細については、「 Initialize a Subscription Manually」を参照してください。

  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)」を参照してください。

      サブスクライバーにデータが格納済みであることを指定する方法の詳細については、「 Initialize a Subscription Manually」を参照してください。

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

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

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

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

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

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

    Note

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

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

    重要

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

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

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

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

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

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

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

      サブスクライバーにデータが格納済みであることを指定する方法の詳細については、「 Initialize a Subscription Manually」を参照してください。

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

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

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

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

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

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

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

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

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

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

  7. データベース B でパブリケーションを再作成し、データベース A とデータベース B の間でサブスクリプションを再作成します。(データベース C を含むサブスクリプションは後の段階で処理されます)。

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

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

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

  8. ディストリビューション エージェントを実行して、データベース AB のサブスクリプションを同期します。パブリッシュされたテーブルに 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 (9.x) を実行しているノードがトポロジに含まれている場合は、手順 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. データベース B で、データベース C でのパブリケーションに対するサブスクリプションを再作成します。そのとき、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)」を参照してください。

      サブスクライバーにデータが格納済みであることを指定する方法の詳細については、「 Initialize a Subscription Manually」を参照してください。

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

      検証の詳細については、「 Validate Replicated Data」を参照してください。 再初期化の詳細については、「サブスクリプションの再初期化」を参照してください。

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

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

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

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

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

    サブスクライバーにデータが格納済みであることを指定する方法の詳細については、「 Initialize a Subscription Manually」を参照してください。

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

    検証の詳細については、「 Validate Replicated Data」を参照してください。 再初期化の詳細については、「サブスクリプションの再初期化」を参照してください。

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

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

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

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

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

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

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

    サブスクリプションを再初期化する方法の詳細については、「 Reinitialize a Subscription」を参照してください。

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

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

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

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

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

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

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

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

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

    サブスクライバーにデータが格納済みであることを指定する方法の詳細については、「 Initialize a Subscription Manually」を参照してください。

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

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

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

参照

SQL Server データベースのバックアップと復元
レプリケートされたデータベースのバックアップと復元
[ディストリビューションの構成]
データとデータベース オブジェクトのパブリッシュ
Subscribe to Publications
サブスクリプションを初期化する
データの同期