障害発生時点まで復元する方法 (Transact-SQL)

このトピックでは、障害が発生する直前の状態まで復元する方法について説明します。このトピックは、完全復旧モデルまたは一括ログ復旧モデルを使用しているデータベースのみを対象としています。

障害発生時点まで復元するには

  1. 次の基本的な BACKUP ステートメントを実行して、ログの末尾をバックアップします。

    BACKUP LOG <database_name>TO <backup_device> 
       WITH NORECOVERY, NO_TRUNCATE;
    
  2. 次の基本的な RESTORE DATABASE ステートメントを実行して、データベースの完全バックアップを復元します。

    RESTORE DATABASE <database_name> FROM <backup_device> 
       WITH NORECOVERY;
    
  3. 必要に応じて、次の基本的な RESTORE DATABASE ステートメントを実行して、データベースの差分バックアップを復元します。

    RESTORE DATABASE <database_name> FROM <backup_device> 
       WITH NORECOVERY;
    
  4. RESTORE LOG ステートメントで WITH NORECOVERY を指定して、手順 1. で作成したログ末尾のバックアップを含む各トランザクション ログ バックアップを適用します。

    RESTORE LOG <database_name> FROM <backup_device> 
       WITH NORECOVERY;
    
  5. 次の RESTORE DATABASE ステートメントを実行して、データベースを復旧します。

    RESTORE DATABASE <database_name> 
       WITH RECOVERY;
    

使用例

この例を実行する前に、次の準備作業を完了する必要があります。

  1. AdventureWorks データベースの既定の復旧モデルは、単純復旧モデルです。この復旧モデルでは障害発生時点までの復旧がサポートされていないため、次の ALTER DATABASE ステートメントを実行して、完全復旧モデルが使用されるように AdventureWorks を設定します。

    USE master;
    GO
    ALTER DATABASE AdventureWorks SET RECOVERY FULL;
    
  2. 次の BACKUP ステートメントを使用して、このデータベースの完全バックアップを作成します。

    BACKUP DATABASE AdventureWorks TO DISK = 'C:\AdventureWorks_Data.bck';
    
  3. 次のように、定期的なログ バックアップを作成します。

    BACKUP LOG AdventureWorks TO DISK = 'C:\AdventureWorks_Log.bck';
    

次の例では、AdventureWorks データベースのログ末尾のバックアップを作成した後に、以前作成したバックアップを復元します (この手順は、ログ ディスクにアクセスできることを前提としています)。

まず、データベースのログ末尾のバックアップを作成して、アクティブなログをキャプチャし、データベースを復元中の状態にしておきます。次に、データベースのバックアップを復元し、以前作成した定期的なログ バックアップを適用し、ログ末尾のバックアップを適用します。最後に、別の手順でデータベースを復旧します。

注意注意

既定の動作では、最終的なバックアップを復元するステートメントに、データベースの復旧が含まれています。

/* Example of restoring a to the point of failure */
-- Step 1: Create a tail-log backup by using WITH NORECOVERY.
BACKUP LOG AdventureWorks
   TO DISK = 'C:\AdventureWorks_Log.bck'
   WITH NORECOVERY;
GO
-- Step 2: Restore the full database backup.
RESTORE DATABASE AdventureWorks
   FROM DISK = 'C:\AdventureWorks_Data.bck'
   WITH NORECOVERY;
GO
-- Step 3: Restore the first transaction log backup.
RESTORE LOG AdventureWorks
   FROM DISK = 'C:\AdventureWorks_Log.bck'
   WITH NORECOVERY;
GO
-- Step 4: Restore the tail-log backup.
RESTORE LOG AdventureWorks
   FROM  DISK = 'C:\AdventureWorks_Log.bck'
   WITH NORECOVERY;
GO
-- Step 5: Recover the database.
RESTORE DATABASE AdventureWorks
   WITH RECOVERY;
GO