バックアップ内の特定の時点へのデータベースの復元

このトピックは、完全復旧モデルまたは一括ログ復旧モデルを使用する SQL Server データベースのみに適用されます。

障害発生前の特定の時点、マーク、またはログ シーケンス番号 (LSN) に、データベースを復元および復旧できます。たとえば、トランザクションにより、一部のデータが間違って変更された場合、不適切なデータが入力される直前の復旧ポイントにデータベースを復元することができます。データベースの復旧ポイントを指定する復元操作を、特定の時点への復元と呼びます。

次の図に、t9 の時点で作成されたトランザクション ログに含まれる中間の復旧ポイントまでの復元を示します。このバックアップの残りの部分および t10 の時点で作成されたその後のログ バックアップに含まれる変更は破棄されます。

ログ バックアップ中の時点への復元

目的の復旧ポイントは、以下のいずれかを使用して指定します。

  • トランザクション ログ内の特定の時点。

  • トランザクション ログ レコードに挿入された名前付きマーク。

  • ログ シーケンス番号 (LSN)。

注意

LSN への復旧は、ツール ベンダを対象としたものであり、一般的には、あまり有益ではない場合があります。

指定した時点またはトランザクションへの復元は、常にログ バックアップから行われます。したがって、目的の復旧ポイントがトランザクション ログ バックアップに含まれている必要があります。特定の時点またはトランザクションにデータベースを復元するには、STOPAT、STOPATMARK、または STOPBEFOREMARK 句で目的の復旧ポイントを指定します。復元シーケンスのすべての RESTORE ステートメントで、同一の STOPAT、STOPATMARK、STOPBEFOREMARK のいずれかの句で目的の時点またはトランザクションを指定する必要があります。復旧ポイントを含むログ バックアップを適用する場合、そのポイントより前のトランザクションのみを復旧できます。

特定の時点への復元の前提条件として、最初にエンド ポイントが目的の復旧ポイントよりも前になっているデータベースの完全バックアップを復元する必要があります。復元するデータベース バックアップを識別しやすくするには、RESTORE DATABASE ステートメントで WITH STOPAT、WITH STOPATMARK、WITH STOPBEFOREMARK のいずれかの句をオプションで指定し、指定した目的の時間に対してデータのバックアップが近すぎる場合はエラーが発生するようにします。ただし、データ バックアップに目的の時点が含まれている場合でも、常にデータ バックアップ全体が復元されます。

注意

ログ バックアップは、特定の時点への復元シーケンスの開始時点で復元されるデータベースの完全バックアップまたは部分バックアップと同じ復旧パスにある必要があります。

復旧が完了すると、データベースの時刻は、プライマリ ファイルを復旧した復旧ポイントの時刻になります。続けて復元操作を行う場合、後続の復元操作では、復元完了時点のデータベースと整合性のある復旧ポイントを使用する必要があります。

部分復元シーケンスで FILESTREAM ファイル グループを除外した場合、特定の時点への復元はサポートされません。復元シーケンスを強制的に実行して続行することもできます。ただし、RESTORE ステートメントから除外された FILESTREAM ファイル グループは復元できません。特定の時点への復元を強制的に実行するには、STOPAT、STOPATMARK、または STOPBEFOREMARK オプションに CONTINUE_AFTER_ERROR オプションを組み合わせて指定します。これらのオプションは、後続の RESTORE LOG ステートメントでも指定する必要があります。CONTINUE_AFTER_ERROR を指定した場合、部分復元シーケンスは正常に実行されますが、FILESTREAM ファイル グループは復元できなくなります。

注意

一括ログ復旧モデルでは、ログ バックアップに一括ログ記録された変更内容が含まれていると、そのバックアップ内の特定の時点への復旧を行うことができません。データベースは、トランザクション ログ バックアップの終了時点へ復旧する必要があります。

このセクションの内容