スナップショット レプリケーションおよびトランザクション レプリケーションのバックアップと復元の方式
スナップショット レプリケーションおよびトランザクション レプリケーションのバックアップと復元の方式を計画する場合には、以下の 3 点を考慮する必要があります。
- バックアップ対象のデータベース
- トランザクション レプリケーションのバックアップ設定
- データベースの復元手順 (選択したレプリケーションの種類とオプションによって異なります)
このトピックでは、これらの各項目について、以下の 3 つのセクションで説明します。Oracle パブリッシングのバックアップと復元の詳細については、「Oracle パブリッシャのバックアップと復元」を参照してください。
データベースのバックアップ
スナップショット レプリケーションおよびトランザクション レプリケーションの場合は、以下のデータベースを定期的にバックアップする必要があります。
- パブリッシャにあるパブリケーション データベース
- ディストリビュータにあるディストリビューション データベース
- サブスクライバにあるサブスクリプション データベース
- パブリッシャ、ディストリビュータ、およびすべてのサブスクライバにある master および msdb システム データベース。これらのデータベースは、相互に関連するレプリケーション データベースとして、同時にバックアップする必要があります。たとえば、パブリッシャでパブリケーション データベースをバックアップするときに、同時に、master および msdb データベースをバックアップします。パブリケーション データベースが復元されるときに、master および msdb データベースのレプリケーションの構成と設定が、パブリケーション データベースと一致していることを確認します。
定期的なログ バックアップを実行する場合は、レプリケーション関連の変更をログ バックアップでキャプチャする必要があります。ログ バックアップを実行しない場合は、レプリケーションに関連する設定を変更するたびに、バックアップを実行する必要があります。詳細については、「一般にバックアップの更新が必要になるアクション」を参照してください。
トランザクション レプリケーションのバックアップ設定
トランザクション レプリケーションには "sync with backup" オプションが用意されており、ディストリビューション データベースおよびパブリケーション データベースで設定できます。
- どのような場合でも、ディストリビューション データベースでこのオプションを設定することをお勧めします。
ディストリビューション データベースでこのオプションを設定すると、パブリケーション データベースのログに記録されたトランザクションは、ディストリビューション データベース内のバックアップが終了するまで切り捨てられることはありません。ディストリビューション データベースは前回のバックアップに復元できます。紛失したトランザクションは、パブリケーション データベースからディストリビューション データベースに配信されます。レプリケーションは影響を受けることなく継続されます。
ディストリビューション データベースでこのオプションを設定しても、レプリケーションの待機時間には影響しません。ただし、ディストリビューション データベースの対応するトランザクションがバックアップされるまで、パブリケーション データベースのログの切り捨てが遅延されます (この結果、パブリケーション データベースのトランザクション ログのサイズが増加する可能性があります)。 - アプリケーションがレプリケーションの待機時間の延長を許容できる場合は、パブリケーション データベースでこのオプションを設定することをお勧めします。
パブリケーション データベースでこのオプションを設定すると、パブリケーション データベースでのバックアップが終了するまで、トランザクションがディストリビューション データベースに配信されることはなくなります。その後、パブリッシャでパブリケーション データベースを前回のバックアップに復元できます。復元されたパブリケーション データベースにないトランザクションが、ディストリビューション データベースに存在する可能性は一切ありません。
パブリッシャでのバックアップが終了するまでの間、トランザクションがディストリビューション データベースに配信されなくなるため、レプリケーションの待機時間とスループットが影響を受けます。たとえば、トランザクション ログが 5 分ごとにバックアップされる場合、パブリッシャでコミットされるトランザクションと、パブリッシャからディストリビューション データベース、その後サブスクライバに配信されるトランザクションの間で、さらに 5 分間の待機時間が発生します。メモ : "sync with backup" オプションを設定すると、パブリケーション データベースとディストリビューション データベースの一貫性が確保されます。ただし、データの損失が発生しなくなるわけではありません。たとえば、トランザクション ログが見つからない場合、トランザクション ログの前回のバックアップ以降にコミットされたトランザクションを、パブリケーション データベースまたはディストリビューション データベースで利用することはできません。これは、レプリケートされていないデータベースと同様の動作です。
"sync with backup" オプションを設定するには
- レプリケーション Transact-SQL プログラミング : トランザクション レプリケーションの連携バックアップを有効にする方法 (レプリケーション Transact-SQL プログラミング)
レプリケーションに関連するデータベースの復元
最新のバックアップが利用可能で適切な手順が実行された場合、レプリケーション トポロジ内のすべてのデータベースを復元できます。パブリケーション データベースの復元手順は、使用するレプリケーションの種類とオプションによって異なります。ただし、パブリケーション データベース以外のデータベースの復元手順については、レプリケーションの種類とオプションに依存しません。
レプリケーションでは、レプリケートされたデータベースをバックアップ作成元のサーバーおよびデータベースに復元する操作がサポートされます。レプリケートされたデータベースのバックアップを別のサーバーまたはデータベースに復元する場合は、レプリケーションの設定は保存できません。この場合、バックアップが復元された後で、すべてのパブリケーションとサブスクリプションを再作成する必要があります。
パブリッシャ
以下の種類のレプリケーションについては、復元手順が用意されています。
- スナップショット レプリケーション
- 読み取り専用トランザクション レプリケーション
- 更新サブスクリプションを使用するトランザクション レプリケーション
- ピア ツー ピア トランザクション レプリケーション
msdb データベースおよび master データベースの復元方法についてもこのセクションで説明しますが、上記の 4 種類のレプリケーションについてはすべて同じ方法です。
パブリケーション データベース : スナップショット レプリケーション
- パブリケーション データベースの最新バックアップを復元します。手順 2. に進みます。
- すべてのパブリケーションおよびサブスクリプションに対する最新の構成がパブリケーション データベースのバックアップに含まれていますか。答えが「はい」の場合、復元は完了です。答えが「いいえ」の場合は、手順 3. に進みます。
- パブリッシャ、ディストリビュータ、およびサブスクライバで、レプリケーション構成を削除した後、再作成を行います。復元が完了します。
レプリケーションの削除の詳細については、「レプリケーションの削除」および「sp_removedbreplication (Transact-SQL)」を参照してください。
パブリケーション データベース : 読み取り専用トランザクション レプリケーション
- パブリケーション データベースの最新バックアップを復元します。手順 2. に進みます。
- 障害の発生前に、パブリケーション データベースで "sync with backup" 設定が有効になっていましたか。答えが「はい」の場合は、手順 3. に進みます。「いいえ」の場合は、手順 5. に進みます。
設定が有効の場合、SELECT DATABASEPROPERTYEX('<PublicationDatabaseName>', 'IsSyncWithBackup');
クエリが "1" を返します。 - 復元されたバックアップは完全かつ最新ですか。すべてのパブリケーションおよびサブスクリプションに対する最新の設定がこのバックアップに含まれていますか。答えが「はい」の場合、復元は完了です。答えが「いいえ」の場合は、手順 4. に進みます。
- 復元されたパブリケーション データベースの構成情報が最新ではありません。サブスクライバで未実行のコマンドがすべてディストリビューション データベースに存在することを確認し、レプリケーション構成の削除と再作成を行う必要があります。
- すべてのサブスクライバがディストリビューション データベース内の未実行のコマンドと同期するまで、ディストリビューション エージェントを実行します。レプリケーション モニタの [未配布のコマンド] タブを使用するか、またはディストリビューション データベース内の MSdistribution_status ビューでクエリを実行して、すべてのコマンドがサブスクライバに配信されたことを確認します。手順 b. に進みます。
ディストリビューション エージェントの実行の詳細については、「レプリケーション エージェントの起動および停止方法 (SQL Server Management Studio)」および「レプリケーション エージェント実行可能ファイルのプログラミング」を参照してください。
コマンドの確認の詳細については、「レプリケートされたコマンドなどディストリビューション データベースに格納されている情報を表示する方法 (レプリケーション Transact-SQL プログラミング)」および「サブスクリプションに関連付けられているエージェントの情報を表示し、タスクを実行する方法 (レプリケーション モニタ)」を参照してください。 - パブリッシャ、ディストリビュータ、およびサブスクライバで、レプリケーション構成を削除した後、再作成を行います。サブスクリプションを再作成するときには、サブスクライバにデータが格納済みであることを指定します。復元が完了します。
レプリケーションの削除の詳細については、「レプリケーションの削除」および「sp_removedbreplication (Transact-SQL)」を参照してください。
サブスクライバにデータが格納済みであることを指定する方法の詳細については、「サブスクリプションを手動で初期化する方法 (SQL Server Management Studio)」および「サブスクリプションを手動で初期化する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
- すべてのサブスクライバがディストリビューション データベース内の未実行のコマンドと同期するまで、ディストリビューション エージェントを実行します。レプリケーション モニタの [未配布のコマンド] タブを使用するか、またはディストリビューション データベース内の MSdistribution_status ビューでクエリを実行して、すべてのコマンドがサブスクライバに配信されたことを確認します。手順 b. に進みます。
- パブリケーション データベースで "sync with backup" オプションが設定されていませんでした。復元されたバックアップに含まれていないトランザクションが、ディストリビュータまたはサブスクライバに配信された可能性があります。サブスクライバで未実行のコマンドがすべてディストリビューション データベースに存在することを確認し、復元されたバックアップに含まれないすべてのトランザクションをパブリケーション データベースに手動で適用する必要があります。
重要 : この処理を実行することによって、復元対象のパブリッシュされたテーブルを、バックアップから復元されたパブリッシュされていないテーブルよりも新しい状態にすることができます。
パブリケーション データベース : 更新サブスクリプションを使用するトランザクション レプリケーション
- パブリケーション データベースの最新バックアップを復元します。手順 2. に進みます。
- すべてのサブスクライバがディストリビューション データベース内の未実行のコマンドと同期するまで、ディストリビューション エージェントを実行します。レプリケーション モニタの [未配布のコマンド] タブを使用するか、またはディストリビューション データベース内の MSdistribution_status ビューでクエリを実行して、すべてのコマンドがサブスクライバに配信されたことを確認します。手順 3. に進みます。
ディストリビューション エージェントの実行の詳細については、「レプリケーション エージェントの起動および停止方法 (SQL Server Management Studio)」および「レプリケーション エージェント実行可能ファイルのプログラミング」を参照してください。
コマンドの確認の詳細については、「レプリケートされたコマンドなどディストリビューション データベースに格納されている情報を表示する方法 (レプリケーション Transact-SQL プログラミング)」および「サブスクリプションに関連付けられているエージェントの情報を表示し、タスクを実行する方法 (レプリケーション モニタ)」を参照してください。 - キュー更新サブスクリプションを使用している場合は、各サブスクライバに接続して、サブスクリプション データベースの MSreplication_queue テーブルからすべての行を削除します。手順 4. に進みます。
メモ : キュー更新サブスクリプションおよび ID 列を含むテーブルを使用している場合は、復元後、正しい ID 範囲を割り当てる必要があります。詳細については、「ID 列のレプリケート」を参照してください。 - サブスクライバで未実行のコマンドがすべてディストリビューション データベースに存在することを確認し、復元されたバックアップに含まれないすべてのトランザクションをパブリケーション データベースに手動で適用する必要があります。
重要 : この処理を実行することによって、復元対象のパブリッシュされたテーブルを、バックアップから復元されたパブリッシュされていないテーブルよりも新しい状態にすることができます。
パブリケーション データベース : ピア ツー ピア トランザクション レプリケーション
以下の手順では、パブリケーション データベース A、B、および C は、ピア ツー ピア トランザクション レプリケーション トポロジ内にあります。データベース A およびデータベース C はオンラインで正常に動作しています。データベース B は復元対象のデータベースです。
- ディストリビューション エージェントを実行して、データベース A およびデータベース C のサブスクリプションを同期します。手順 2. に進みます。
ディストリビューション エージェントの実行の詳細については、「レプリケーション エージェントの起動および停止方法 (SQL Server Management Studio)」および「レプリケーション エージェント実行可能ファイルのプログラミング」を参照してください。 - B が使用するディストリビューション データベースがまだ利用可能な場合は、ディストリビューション エージェントを実行して、データベース A とデータベース B の間のサブスクリプション、およびデータベース B とデータベース C の間のサブスクリプションを同期します。手順 3. に進みます。
- B が使用するディストリビューション データベースで sp_removedistpublisherdbreplication (Transact-SQL) を実行し、ディストリビューション データベースからメタデータを削除します。手順 4. に進みます。
- データベース A およびデータベース C で、データベース B のパブリケーションに対するサブスクリプションを削除します。手順 5. に進みます。
サブスクリプションの削除の詳細については、「パブリケーションのサブスクライブ」を参照してください。 - データベース A のログ バックアップまたは完全バックアップを実行します。手順 6. に進みます。
- データベース A のバックアップをデータベース B で復元します。データベース B にはデータベース A のデータが格納されますが、レプリケーション構成は含まれません。バックアップを別のサーバーに復元する場合、レプリケーションが削除されます。データベース B からレプリケーションが削除されたのはそのためです。手順 7. に進みます。
- データベース B でパブリケーションを再作成し、その後データベース A とデータベース B の間のサブスクリプションを再作成します (データベース C 関連のサブスクリプションについては後の段階で処理します)。
- データベース B でパブリケーションを再作成します。手順 b. に進みます。
- データベース A のパブリケーションに対するサブスクリプションをデータベース B で再作成します。そのとき、バックアップを使用してサブスクリプションを初期化するように指定します (sp_addsubscription (Transact-SQL) の @sync_type パラメータの値を "initialize with backup" に指定します)。手順 c. に進みます。
- データベース B のパブリケーションに対するサブスクリプションをデータベース A で再作成します。そのとき、サブスクライバにデータが格納済みであることを指定します (sp_addsubscription (Transact-SQL) の @sync_type パラメータの値を "replication support only" に指定します)。手順 8. に進みます。
手順 a. ~ c. を最も簡単に実行する方法は、ピア ツー ピア トポロジ構成ウィザードを使用することです。詳細については、「ピア ツー ピア トランザクション レプリケーションを構成する方法 (SQL Server Management Studio)」を参照してください。ストアド プロシージャを使用することもできます。詳細については、「ピア ツー ピア トランザクション レプリケーションを構成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
- ディストリビューション エージェントを実行して、データベース A およびデータベース B のサブスクリプションを同期します。パブリッシュされたテーブルに ID 列が含まれる場合は手順 9. に進みます。含まれない場合は手順 10. に進みます。
- 復元後、データベース A の各テーブルに割り当てた ID 範囲は、データベース B でも使用されます。データベース B の障害発生後、データベース A およびデータベース C に反映されたすべての変更を復元されたデータベース B に適用し、その後各テーブルの ID 範囲を再作成します。
- データベース B で sp_requestpeerresponse (Transact-SQL) を実行して、出力パラメータ**@request_id** を取得します。手順 b. に進みます。
- 既定では、ディストリビューション エージェントが連続して実行されるように設定されているため、すべてのノードに対してトークンが自動的に送信されます。ディストリビューション エージェントが連続モードで実行されていない場合は、エージェントを実行します。詳細については、「レプリケーション エージェント実行可能ファイルのプログラミング」または「レプリケーション エージェントの起動および停止方法 (SQL Server Management Studio)」を参照してください。手順 c. に進みます。
- 手順 b. で取得した値を @request_id に指定して sp_helppeerresponses (Transact-SQL) を実行します。ピア要求の受信がすべてのノードで完了するまで待機します。手順 d. に進みます。
- DBCC CHECKIDENT を使用してデータベース B の各テーブルを再作成し、適切な範囲が使用されていることを確認します。手順 10. に進みます。
ID 範囲の管理の詳細については、「ID 列のレプリケート」の「手動で ID 範囲を管理する場合の範囲の割り当て」を参照してください。
- この時点では、データベース B とデータベース C は直接接続されていません。両者はデータベース A を介して変更を受信します。データベース B とデータベース C を接続するには、手順 11. ~ 13. を実行します。
- システムを停止します。システムの停止を実行するには、すべてのノードのパブリッシュされたテーブルで処理を停止し、他のすべてのノードからのすべての変更を各ノードが受信しているかどうかを確認します。
- ピア ツー ピア トポロジ内のパブリッシュされたテーブルの処理をすべて停止します。手順 b. に進みます。
- データベース B で sp_requestpeerresponse (Transact-SQL) を実行して、出力パラメータ**@request_id** を取得します。手順 c. に進みます。
- 既定では、ディストリビューション エージェントが連続して実行されるように設定されているため、すべてのノードに対してトークンが自動的に送信されます。ディストリビューション エージェントが連続モードで実行されていない場合は、エージェントを実行します。手順 d. に進みます。
- 手順 b. で取得した値を @request_id に指定して sp_helppeerresponses (Transact-SQL) を実行します。ピア要求の受信がすべてのノードで完了するまで待機します。手順 12. に進みます。
- データベース B とデータベース C の間のサブスクリプションを再作成します。
- データベース C のパブリケーションに対するサブスクリプションをデータベース B で再作成します。そのとき、バックアップを使用してサブスクリプションを初期化するように指定します。手順 b. に進みます。
- データベース B のパブリケーションに対するサブスクリプションをデータベース C で再作成します。そのとき、サブスクライバにデータが格納済みであることを指定します。手順 13. に進みます。
- ディストリビューション エージェントを実行して、データベース B およびデータベース C のサブスクリプションを同期します。復元が完了します。
msdb データベース (パブリッシャ)
- msdb データベースの最新バックアップを復元します。
- 復元されたバックアップは完全かつ最新ですか。すべてのパブリケーションおよびサブスクリプションに対する最新の設定がこのバックアップに含まれていますか。答えが「はい」の場合、復元は完了です。答えが「いいえ」の場合は、手順 3. に進みます。
- レプリケーション スクリプトを使用して、サブスクリプションのクリーンアップ ジョブを再作成します。復元が完了します。
master データベース (パブリッシャ)
- master データベースの最新バックアップを復元します。
- データベースのレプリケーション構成および設定が、パブリケーション データベースと一致していることを確認します。
ディストリビュータにあるデータベース
ディストリビューション データベース
- ディストリビューション データベースの最新バックアップを復元します。
- 障害の発生前に、ディストリビューション データベースで "sync with backup" 設定が有効になっていましたか。答えが「はい」の場合は、手順 3. に進みます。「いいえ」の場合は、手順 4. に進みます。
設定が有効の場合、SELECT DATABASEPROPERTYEX('<DistributionDatabaseName>', 'IsSyncWithBackup');
クエリが "1" を返します。 - 復元されたバックアップは完全かつ最新ですか。すべてのパブリケーションおよびサブスクリプションに対する最新の設定がこのバックアップに含まれていますか。答えが「はい」の場合、復元は完了です。答えが「いいえ」の場合は、手順 4. に進みます。
- 復元されたディストリビューション データベースが最新でないか、またはディストリビューション データベースで "sync with backup" オプションが設定されていませんでした (パブリッシャでのコミット後、サブスクライバに配信されていないトランザクションが、ディストリビューション データベースで見つからない可能性があります)。レプリケーションの削除および再作成を行ってから検証を実行します。
- パブリッシャ、ディストリビュータ、およびサブスクライバで、レプリケーション構成を削除した後、再作成を行います。サブスクリプションを再作成するときには、サブスクライバにデータが格納済みであることを指定します。手順 b. に進みます。
レプリケーションの削除の詳細については、「レプリケーションの削除」および「sp_removedbreplication (Transact-SQL)」を参照してください。
サブスクライバにデータが格納済みであることを指定する方法の詳細については、「サブスクリプションを手動で初期化する方法 (SQL Server Management Studio)」および「サブスクリプションを手動で初期化する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。 - 検証を行うすべてのパブリケーションにマークを付けます。検証に失敗したサブスクリプションを再初期化します。復元が完了します。
検証の詳細については、「レプリケートされたデータの検証」を参照してください。
再初期化の詳細については、「サブスクリプションの再初期化」を参照してください。
- パブリッシャ、ディストリビュータ、およびサブスクライバで、レプリケーション構成を削除した後、再作成を行います。サブスクリプションを再作成するときには、サブスクライバにデータが格納済みであることを指定します。手順 b. に進みます。
msdb データベース (ディストリビュータ)
- msdb データベースの最新バックアップを復元します。
- 復元されたバックアップは完全かつ最新ですか。すべてのパブリケーションおよびサブスクリプションに対する最新の設定がこのバックアップに含まれていますか。答えが「はい」の場合、復元は完了です。答えが「いいえ」の場合は、手順 3. に進みます。
- パブリッシャ、ディストリビュータ、およびサブスクライバで、レプリケーション構成を削除した後、再作成を行います。サブスクリプションを再作成するときには、サブスクライバにデータが格納済みであることを指定します。手順 4. に進みます。
レプリケーションの削除の詳細については、「レプリケーションの削除」および「sp_removedbreplication (Transact-SQL)」を参照してください。
サブスクライバにデータが格納済みであることを指定する方法の詳細については、「サブスクリプションを手動で初期化する方法 (SQL Server Management Studio)」および「サブスクリプションを手動で初期化する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。 - 検証を行うすべてのパブリケーションにマークを付けます。検証に失敗したサブスクリプションを再初期化します。復元が完了します。
検証の詳細については、「レプリケートされたデータの検証」を参照してください。
再初期化の詳細については、「サブスクリプションの再初期化」を参照してください。
master データベース (ディストリビュータ)
- master データベースの最新バックアップを復元します。
- データベースのレプリケーション構成および設定が、パブリケーション データベースと一致していることを確認します。
サブスクライバにあるデータベース
サブスクリプション データベース
- サブスクリプション データベースの最新バックアップは、ディストリビューション データベースにおけるディストリビューションの最大保有期間の設定よりも新しいですか (これにより、サブスクライバを最新状態にするために必要なすべてのコマンドがディストリビュータに存在しているかどうかを判断できます)。答えが「はい」の場合は、手順 2. に進みます。「いいえ」の場合は、サブスクリプションを再初期化します。復元が完了します。
ディストリビューションの最大保有期間を確認するには、sp_helpdistributiondb (Transact-SQL) を実行して、max_distretention 列から値 (時間単位) を取得します。
サブスクリプションの再初期化の詳細については、「サブスクリプションを再初期化する方法 (SQL Server Management Studio)」および「サブスクリプションを再初期化する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。 - サブスクリプション データベースの最新バックアップを復元します。手順 3. に進みます。
- サブスクリプション データベースにプッシュ サブスクリプションのみが含まれている場合は、手順 4. に進みます。サブスクリプション データベースにプル サブスクリプションが含まれている場合は、次の質問に答えてください。サブスクリプション情報は最新ですか。障害発生時に設定されていたすべてのテーブルおよびオプションがサブスクリプション情報に含まれていますか。答えが「はい」の場合は、手順 4. に進みます。「いいえ」の場合は、サブスクリプションを再初期化します。復元が完了します。
- ディストリビューション エージェントを実行して、サブスクライバを同期します。復元が完了します。
ディストリビューション エージェントの実行の詳細については、「レプリケーション エージェントの起動および停止方法 (SQL Server Management Studio)」および「レプリケーション エージェント実行可能ファイルのプログラミング」を参照してください。
msdb データベース (サブスクライバ)
- msdb データベースの最新バックアップを復元します。このサブスクライバでプル サブスクリプションが使用されていますか。答えが「いいえ」の場合、復元は完了です。答えが「はい」の場合は、手順 2. に進みます。
- 復元されたバックアップは完全かつ最新ですか。すべてのプル サブスクリプションに対する最新の設定がこのバックアップに含まれていますか。答えが「はい」の場合、復元は完了です。答えが「いいえ」の場合は、手順 3. に進みます。
- プル サブスクリプションの削除および再作成を行います。サブスクリプションを再作成するときには、サブスクライバにデータが格納済みであることを指定します。復元が完了します。
サブスクリプションの削除の詳細については、「パブリケーションのサブスクライブ」を参照してください。
サブスクライバにデータが格納済みであることを指定する方法の詳細については、「サブスクリプションを手動で初期化する方法 (SQL Server Management Studio)」および「サブスクリプションを手動で初期化する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
master データベース (サブスクライバ)
- master データベースの最新バックアップを復元します。
- データベースのレプリケーション構成および設定が、パブリケーション データベースと一致していることを確認します。
参照
概念
レプリケートされたデータベースのバックアップと復元
ディストリビューションの構成
データとデータベース オブジェクトのパブリッシュ
パブリケーションのサブスクライブ
サブスクリプションの初期化
データの同期
その他の技術情報
SQL Server でのデータベースのバックアップおよび復元