特定の時点への復旧

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

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

特定の時点に復元するには

特定の時点に復元するための Transact-SQL 構文

指定した時点への復元は、常にログ バックアップから行われます。復元シーケンスのすべての RESTORE ステートメントで、同一の STOPAT 句で目的の時点またはトランザクションを指定する必要があります。特定の時点への復元の前提条件として、最初にエンド ポイントが目的の復元時点よりも前になっているデータベースの完全バックアップを復元する必要があります。このデータベースの完全バックアップは、データベースの最新の完全バックアップより古くてもかまいません。ただし、これは、データベースの完全バックアップを復元した後で、目的の時点を含むログ バックアップまで後続のログ バックアップをすべて復元する場合に限ります。

復元するデータベース バックアップを識別しやすくするには、RESTORE DATABASE ステートメントで WITH STOPAT 句をオプションで指定し、指定した目的の時点に対してデータのバックアップが近すぎる場合はエラーが発生するようにします。データ バックアップに目的の時点が含まれている場合でも、常にデータ バックアップ全体が復元されます。

基本構文は次のとおりです。

RESTORE LOG database_name FROM <backup_device> WITH STOPAT =time, RECOVERY…

復旧ポイントは、time で指定する datetime 以前に行われた最後のトランザクション コミットの時点です。

特定の時点より前に行われた変更のみを復元するには、復元するバックアップごとに WITH STOPAT = time を指定します。これにより、目的の時点を過ぎる危険性を回避できます。

通常、特定の時点への復元シーケンスには、次の段階があります。

  • データベースの最新の完全バックアップを復元し、差分バックアップが存在する場合は、データベースを復旧せずに最新のデータベースの差分バックアップを復元します (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY)。

  • 各トランザクション ログ バックアップを作成順に適用して、ログの復元を停止する時点を指定します (RESTORE DATABASE database_name FROM <backup_device> WITH STOPAT**=time,** RECOVERY)。

詳細については、「バックアップ内の特定の時点へのデータベースの復元」を参照してください。