データベースを障害発生時点まで復元する - 完全復旧

適用対象:SQL Server

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

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

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

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

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

    BACKUP LOG AdventureWorks2022 TO DISK = 'C:\AdventureWorks2022_Log.bck';  
    

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

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

注意

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

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

参照

BACKUP (Transact-SQL)
RESTORE (Transact-SQL)