特定の復旧ポイントにデータベースを復旧するためのベスト プラクティス
このトピックは、完全復旧モデルまたは一括ログ復旧モデルを使用するデータベースにのみ関連しています。
このトピックでは、特定の復旧ポイントにデータベースを復元する場合のベスト プラクティスをいくつか紹介します。
特定の復元時点が不明な場合の STANBY を使用した検索
特定の復旧ポイントにデータベースを復元しようとした際に、目的の時点、LSN、またはマークされたトランザクション (存在する場合) が不明な場合があります。解決策の 1 つは、プライマリ データ ファイルを段階的にロールフォワードし、必要に応じて WITH RECOVERY の代わりに WITH STANDBY **=**standby_file_name を指定することによって他のデータ ファイルをロールフォワードする方法です。STANDBY オプションを使用すると、データベースが読み取り専用として復旧されます。このため、データベースを読み取って、目的の時点に関する情報を調べることができます。スタンバイ ファイルを使用すると、データベースが目的の時点を超えてロールフォワードされた場合に、復旧処理の結果を元に戻すことができます。データベースが目的の時点に到達していない場合は、ログ バックアップを続けて復元するときに、各復元ステートメントで WITH STANDBY を使用し、同一のスタンバイ ファイルを指定できます。
目的の復旧ポイントを特定できたら、その時点へのロールフォワードを再実行できます。目的の時点に到達したら、RECOVERY オプションを使用して部分的に復元されたデータベースを復旧します。次に、他にファイルがある場合は、それらを復元および復旧し、データベースとの一貫性を確保します。目的の復旧ポイントまでのログ バックアップをすべて復元したら、その復旧ポイント後に作成された最初のログ バックアップを復元します。
STANDBY オプションの詳細については、「RESTORE の引数 (Transact-SQL)」を参照してください。
復元シーケンスの早い段階での特定時点の指定
復元シーケンスは、1 つ以上の復元フェーズによってデータを移動する、1 つ以上の復元操作で構成されます。シーケンスの目的について情報を多く指定するほど、最初からのやり直しが必要となるようなエラーが発生する可能性は低くなります。特定の時点への復元の場合、SQL Server データベース エンジンは復元シーケンスの開始時 (および途中) で指定された情報を使用して、復元の目標となる特定の時点を見極めます。必要な情報の指定が遅すぎると、シーケンスは失敗します。復元シーケンスの早い段階で目的の時点の情報を指定し、目標とする特定の時点を超えた時点に復元されないようにしてください。
特定の復旧ポイントに復元する場合は、すべての RESTORE LOG ステートメントで、RECOVERY オプションと共に STOPAT、STOPBEFOREMARK、または STOPATMARK を使用して目的の時点を指定します。RECOVERY オプションと STOPAT オプションを同時に指定したときに、指定した時点の情報がトランザクション ログ バックアップに格納されていない場合 (指定した日時がトランザクション ログに記録されている時点より後の場合など)、警告が生成されます。この場合、データベースは復旧されません。復旧ポイントに到達すると、データベースが復旧され、次のログ バックアップを復元する操作が失敗します。ログ バックアップを復元するときに RECOVERY オプションと STOPAT オプションを同時に指定すると、目的の時点を超えてログが復元されることはありません。
例 : 特定の時点への復元
次の復元シーケンスの例では、最初のログ バックアップを適用するときに初めて、特定の時点に復元することが指定されています。この例では、差分バックアップ後の最初のログ バックアップが目的の時点です。
RESTORE DATABASE database_name FROM full_backup
WITH NORECOVERY;
RESTORE DATABASE database_name FROM full_differential_backup
WITH NORECOVERY;
RESTORE LOG database_name FROM log_backup
WITH STOPAT = time, RECOVERY;
RESTORE LOG database_name FROM log_backup
WITH STOPAT = time, RECOVERY;
指定されたログの復元が成功するかどうかは、time がログ バックアップによってキャプチャされた期間内にあるかどうかによって決まります。以下の表を参照してください。
time とログ バックアップのキャプチャ期間との関係 | 結果 |
---|---|
time がキャプチャ期間より前 |
復元は失敗し、ロールフォワードは行われません。 |
time がキャプチャ期間内 |
最後の復元が成功し、データベースが復旧されます。 |
time がキャプチャ期間より後 |
ロールフォワードは成功しますが、time に到達していないため、データベースは復旧されません。 |
後続のすべての RESTORE ステートメントでの特定の時点の宣言
特定の時点は、STOPAT、STOPBEFOREMARK、または STOPATMARK オプションが指定されたステートメントのみで有効です。RESTORE ステートメントでこのオプションを指定しなかった場合は、バックアップ全体が復元されます。
特定の時点への復元シーケンスの実行中、time に新しい値を指定することによって復旧ポイントを変更できます (ただし、time に新しく指定する時点までデータベースが復元されていないことが前提です)。
メモ : |
---|
STOPBEFOREMARK および STOPATMARK オプションには、mark_name および lsn_number の 2 つのパラメータがあります。mark_name パラメータは、RESTORE LOG ステートメントでのみサポートされ、ログ バックアップのトランザクション マークを指定します。lsn_number パラメータは、RESTORE DATABASE ステートメントおよび RESTORE LOG ステートメントの両方でサポートされ、ログ シーケンス番号を指定します。 |
参照
概念
トランザクション ログ バックアップの適用
ログ シーケンス番号 (LSN) への復旧
マークされたトランザクションへの復旧
その他の技術情報
RESTORE (Transact-SQL)
バックアップ内の特定の時点へのデータベースの復元