復元と復旧の概要 (SQL Server)

適用対象: SQL Server

この記事では、SQL Server のデータベースの復元と復旧プロセスの概要について説明します。

概要

データベースをエラーから復旧するには、データベース管理者が論理的に正しく意味のある復元シーケンスで一連の SQL Server バックアップを復元する必要があります。 SQL Server の復元および復旧では、次に示すように、データベース全体、データ ファイル、またはデータ ページの各バックアップからのデータの復元をサポートしています。

  • データベース ( データベースの全体復元)

    データベース全体を復元および復旧します。復元および復旧の操作中は、データベースはオフラインになります。

  • データ ファイル ( ファイル復元)

    データ ファイルまたはファイルのセットを復元および復旧します。 ファイル復元中は、ファイルを含むファイル グループが自動的にオフラインになります。 オフラインのファイル グループにアクセスするとエラーが発生します。

  • データ ページ ( ページ復元)

    完全復旧モデルまたは一括ログ復旧モデルでは、個々のページを復元できます。 ページ復元は、ファイル グループの数に関係なく、どのデータベースでも実行できます。

SQL Server のバックアップと復元は、サポートされるすべてのオペレーティング システムで機能します。 サポートされているオペレーティング システムについては、「SQL Server のインストールに必要なハードウェアおよびソフトウェア」を参照してください。 以前のバージョンの SQL Server からのバックアップに対するサポートの情報については、「RESTORE」の「互換性サポート」のセクションを参照してください。

復元シナリオ

SQL Server の復元シナリオとは、1 つ以上のバックアップからデータを復元した後にデータベースを復旧するプロセスです。 サポートされている復元シナリオは、データベースの復旧モデルおよび SQL Server のエディションによって異なります。

次の表では、さまざまな復旧モデルでサポートされている復元シナリオについて説明しています。

単純復旧モデルの場合 完全/一括ログ復旧モデルの場合
データベースの全体復元 基本的な復元ストラテジです。 データベースの全体復元では、データベースの完全バックアップを復元し復旧するだけになる場合があります。 また、データベースの完全バックアップを復元した後で差分バックアップを復元し復旧する場合もあります。

詳細については、「データベースの全体復元 (単純復旧モデル)」を参照してください。
基本的な復元ストラテジです。 データベースの全体復元を行うには、データベースの完全バックアップと、必要に応じて差分バックアップ (存在する場合) を復元し、その後で後続のすべてのログ バックアップを順番に復元する必要があります。 データベースの全体復元を完了するには、最新のログ バックアップを復旧して、さらにそれを復元します (RESTORE WITH RECOVERY)。
詳細については、「データベースの全体復元 (完全復旧モデル)」を参照してください。
ファイル復元 1 データベース全体を復元することなく、破損した 1 つ以上の読み取り専用ファイルを復元します。 ファイル復元は、データベースに読み取り専用のファイル グループが少なくとも 1 つ含まれている場合だけ使用できます。 データベース全体を復元することなく、1 つ以上のファイルを復元します。 ファイル復元は、データベースがオフラインのときに実行できますが、SQL Server のエディションによってはオンラインのままでも実行できます。 ファイル復元の間、復元対象のファイルを含むファイル グループは常にオフラインです。
ページ復元 適用なし 破損した 1 つ以上のページを復元します。 ページ復元は、データベースがオフラインのときに実行できますが、SQL Server のエディションによってはオンラインのままでも実行できます。 ページ復元の間、復元対象のページは常にオフラインです。

現在のログ ファイルまで、ログ バックアップのチェーンが途切れていないことが必要です。ページを現在のログ ファイルまでの最新状態にするためには、それらをすべて適用する必要があります。
詳細については、ページ復元 - SQL Server に関するページを参照してください。
段階的な部分復元 1 データベースをファイル グループ レベルで段階的に復元および復旧します。プライマリ ファイル グループとすべての読み書き可能セカンダリ ファイル グループの復元から行います。 データベースをファイル グループ レベルでプライマリ ファイル グループから段階的に復元および復旧します。

詳細については、段階的な部分復元 (SQL Server) に関するページを参照してください。

1 つのオンライン復元は、Enterprise Edition でのみサポートされます。

データベースを復元する手順

ファイル復元を実行するために、データベース エンジンによって次の 2 つの手順が実行されます。

  • 不足しているデータベース ファイルを作成する。

  • バックアップ デバイスからデータベース ファイルにデータをコピーする。

データベースの復元を実行するために、データベース エンジン によって次の 3 つの手順が実行されます。

  • データベースとトランザクション ログ ファイルがまだ存在しない場合、作成する。

  • すべてのデータ、ログ、およびインデックス ページを、データベースのバックアップ メディアからデータベース ファイルにコピーする。

  • 復旧プロセスと呼ばれるものでトランザクション ログを適用する。

SQL Server データベース エンジンでは、データの復元方法に関係なく、データベース全体の論理的な一貫性が確保されないと、データベースを復旧できません。 たとえば、ファイルを復元する場合、データベースとの一貫性を維持できるように十分なロールフォワードを行うまでは、ファイルを復旧してオンラインにすることはできません。

ファイルまたはページを復元する利点

データベース全体ではなく、ファイルやページを復元して復旧すると、次のような利点があります。

  • 復元するデータが少ないので、コピーと復旧にかかる時間が短縮されます。

  • SQL Server では、ファイルまたはページを復元する場合、復元操作中にデータベース内の他のデータをオンラインのままにすることができます。

復旧とトランザクション ログ

ほとんどの復元シナリオでは、トランザクション ログ バックアップを適用し、オンラインにするデータベースのために SQL Server データベース エンジンで復旧プロセスを実行できるようにする必要があります。 復旧とは、トランザクション的に一貫した (クリーンな) 状態で各データベースを開始させるために、SQL Server で使用されるプロセスです。

フェールオーバーやその他のクリーンでないシャットダウンが発生した場合、データベースは一部の変更がバッファー キャッシュからデータ ファイルに書き込まれない状態になる場合があり、未完了のトランザクションによる変更がデータ ファイル内に存在している可能性もあります。 SQL Server のインスタンスが開始されると、各データベースの復旧が実行されます。これは 3 つのフェーズで構成され、最後のデータベース チェックポイントに基づいています。

  • フェーズ 1分析フェーズで、最後のチェックポイントを決定するためにトランザクション ログが分析され、ダーティ ページ テーブル (DPT) とアクティブなトランザクション テーブル (ATT) が作成されます。 DPT には、このデータベースがシャットダウンされたときにダーティだったページのレコードが含まれています。 ATT には、このデータベースがクリーンにシャットダウンされなかったときにアクティブだったトランザクションのレコードが含まれています。

  • フェーズ 2再実行フェーズで、データベースがシャットダウンされたときにデータ ファイルに書き込まれていない可能性がある、ログに記録されたすべての変更がロールフォワードされます。 データベース全体の復旧を成功させるために必要な最小ログ シーケンス番号 (minLSN) は DPT 内にあり、すべてのダーティ ページで必要な再実行操作の開始がマークされます。 このフェーズでは、SQL Server データベース エンジンによって、コミットされたトランザクションに属するすべてのダーティ ページがディスクに書き込まれます。

  • フェーズ 3元に戻すフェーズで、ATT 内にある未完了のトランザクションがロールバックされ、データベースの整合性が確保されます。 ロールバック後、データベースはオンラインになり、そのデータベースにそれ以上のトランザクション ログ バックアップを適用できなくなります。

各データベース復旧ステージの進行状況に関する情報は、SQL Server のエラーログに記録されます。 データベース復旧の進行状況は、拡張イベントを使って追跡することもできます。 詳細については、ブログ記事「データベース復旧の進行状況のための新しい拡張イベント」をご覧ください。

Note

段階的な部分復元のシナリオでは、読み取り専用ファイル グループがファイルのバックアップの作成前から読み取り専用だった場合は、ログ バックアップをファイル グループに適用する必要はないので、ファイルの復元の際にスキップされます。

Note

Always On フェールオーバー クラスター インスタンスのフェールオーバー後やインプレース再起動後など、SQL Server サービスの開始後にエンタープライズ環境でデータベースの可用性を最大化するために、元に戻すフェーズの実行中に、SQL Server Enterprise Edition は再実行フェーズの後にデータベースをオンラインにすることができます。 これは、高速復旧と呼ばれます。 ただし、データベースがオンライン状態に切り替わっても SQL Server サービスが再起動されていない場合は、高速復旧を使用できません。 たとえば、ALTER DATABASE AdventureWorks SET ONLINE; を実行しても、復旧の 3 つのフェーズがすべて完了するまで、データベースを読み取り/書き込み状態にすることはできません。

復旧モデルとサポートされる復元操作

データベースで使用できる復元操作は、そのデータベースの復旧モデルによって決まります。 次の表では、特定の復元シナリオごとに、各復旧モデルによりサポートされるかどうかと、どの程度までサポートされるかを示します。

復元操作 完全復旧モデル 一括ログ復旧モデル 単純復旧モデル
データの復旧 完全な復旧 (ログが使用可能な場合)。 一部データ損失の可能性。 最新の完全バックアップまたは差分バックアップ以降のデータが損失。
ポイントインタイム リストア ログ バックアップに含まれる任意の時点。 ログ バックアップに一括ログ記録された変更が含まれている場合は不可。 サポートされていません。
ファイル復元 1 完全にサポートされます。 場合によりサポートされます。 2 読み取り専用セカンダリ ファイルの場合のみ使用可能です。
ページ復元 1 完全にサポートされます。 場合によりサポートされます。 2 [なし] :
段階的な (ファイル グループ レベルの) 部分復元 1 完全にサポートされます。 場合によりサポートされます。 2 読み取り専用セカンダリ ファイルの場合のみ使用可能です。

1 SQL Server の Enterprise Edition でのみ使用可能

2 必要な条件については、この記事の後半の「単純復旧モデルの復元に関する制限事項」を参照してください。

重要

データベースの復旧モデルにかかわらず、SQL Server バックアップを、そのバックアップを作成したバージョンより古いバージョンの SQL Server データベース エンジンに復元することはできません。

単純復旧モデルでの復元シナリオ

単純復旧モデルの復元操作には次の制限があります。

  • ファイルの復元および段階的な部分復元は、読み取り専用のセカンダリ ファイル グループでのみ使用可能です。 これらの復元シナリオの詳細については、「ファイルの復元 (単純復旧モデル)」および「段階的な部分復元 (SQL Server)」を参照してください。

  • ページ復元は実行できません。

  • 特定の時点への復元は実行できません。

これらの制限事項のいずれかが復旧要件に適合しない場合は、完全復旧モデルの使用を検討することをお勧めします。 詳細については、「バックアップの概要 (SQL Server)」を参照してください。

重要

データベースの復旧モデルにかかわらず、SQL Server バックアップは、バックアップを作成したバージョンより古いバージョンの SQL Server では復元できません。

一括ログ復旧モデルを使用した復元

このセクションでは、一括ログ復旧モデルを使用した復元の考慮事項について説明します。一括ログ復旧モデルは、完全復旧モデルの補完のみを目的としたモデルです。

Note

一括ログ復旧モデルの概要については、「トランザクション ログ (SQL Server)」を参照してください。

全般的には、一括ログ復旧モデルは完全復旧モデルに似ており、完全復旧モデルで説明されている情報はどちらにも適用されます。 ただし、特定の時点への復旧とオンライン復元は、一括ログ復旧モデルの影響を受けます。

特定の時点への復旧に関する制限

一括ログ復旧モデルで作成されたログ バックアップに一括ログ記録された変更が含まれている場合、特定の時点に復旧することはできません。 一括変更を含むログ バックアップに対して特定の時点への復旧を実行しようとすると、復元操作が失敗します。

オンライン復元に関する制限

オンライン復元シーケンスは、次の条件を満たしている場合のみ実行できます。

  • 復元シーケンスを開始する前に、必要なログ バックアップがすべて作成されていること。

  • オンライン復元シーケンスを開始する前に、一括変更のバックアップが作成されていること。

  • データベースに一括変更が存在する場合、すべてのファイルがオンラインであるか、機能していないこと。 (つまり、このデータベースの一部ではなくなっていること)。

上記の条件を満たしていない場合、オンライン復元シーケンスは失敗します。

Note

オンライン復元を開始する前に、完全復旧モデルに切り替えることをお勧めします。 詳細については、「復旧モデル (SQL Server)」を参照してください。

オンライン復元の実行方法の詳細については、「オンライン復元 (SQL Server)」を参照してください。

データベース復旧アドバイザー (SQL Server Management Studio)

データベース復旧アドバイザーにより、最適な復元シーケンスを実装する復元プランを容易に構築できるようになります。 お客様からご要望のあった、データベース復元に関するさまざまな既知の問題の解決や機能強化が実施されました。 データベース復旧アドバイザーによって導入された主な機能強化は次のとおりです。

  • 復元プラン アルゴリズム: 特に、複雑な復元シナリオの復元プランの構築に使用されるアルゴリズムが大幅に改善されました。 ポイントインタイム リストアの分岐シナリオなど、多数のエッジ ケースが以前のバージョンの SQL Server よりも効率的に処理されます。

  • 特定の時点への復元: データベース復旧アドバイザーにより、特定の時点へのデータベースの復元が大幅に簡素化されます。 バックアップの視覚的タイムラインにより、特定の時点への復元のサポートが大幅に強化されています。 この視覚的タイムラインにより、データベースを復元する際の目的の復旧ポイントとして適切な時点を特定できます。 タイムラインにより、分岐した復旧パス (複数の復旧分岐にまたがるパス) をたどることが容易になります。 特定の時点への復元プランには、目的の時点 (日時) への復元に関連するバックアップが自動的に含まれます。 詳細については、「SQL Server データベースを特定の時点に復元する (完全復旧モデル)」を参照してください。

データベース復旧アドバイザーの詳細については、SQL Server Manageability の次のブログを参照してください。

高速データベース復旧

高速データベース復旧は SQL Server 2019 (15.x) と Azure SQL データベースで利用できます。 高速データベース復旧では、SQL Server データベース エンジンの復旧プロセスの再設計により、データベースの可用性が大幅に向上します (長期トランザクションが存在する場合は特に)。 高速データベース復旧が有効にされたデータベースでは、フェールオーバーまたは他のクリーンではないシャットダウンの後の復旧プロセスが、非常に速く完了します。 高速データベース復旧を有効にした場合、取り消された長時間トランザクションのロールバックも非常に速く完了します。

SQL Server 2019 (15.x) では、次の構文を使用して、データベースごとに高速データベース復旧を有効にできます。

ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = ON;

Note

Azure SQL データベースでは、高速データベース復旧が既定で有効になります。