トランザクション ログ バックアップを適用する方法 (Transact-SQL)

トランザクション ログ バックアップをデータベースに適用するには、次の条件を満たしている必要があります。

  • データベースの最新の完全バックアップまたは差分バックアップが作成される前に、データベースが完全復旧モデルまたは一括ログ復旧モデルを使用していた。

  • 復元シーケンスで以前のバックアップを復元するときに WITH NORECOVERY を指定した。

  • ログ バックアップが、作成された順序で、ログ チェーンにギャップがないように、適用されている。最後のログ バックアップを除いては、次のように WITH NORECOVERY を使用する必要があります。

    RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY;
    
    RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY;
    
  • 最後のログ バックアップを適用するときは、次のいずれかの操作を実行します。

    • 最後の BACKUP LOG ステートメントの一部としてデータベースを復旧する。

      RESTORE LOG <database_name> FROM <backup_device> WITH RECOVERY;
      GO
      
      RESTORE LOG <database_name> FROM <backup_device> WITH RECOVERY;
      GO
      
    • 個別の RESTORE DATABASE ステートメントを使用してデータベースの復旧を待機する。

      RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY; 
      RESTORE DATABASE <database_name> WITH RECOVERY;
      GO
      
      RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY; 
      RESTORE DATABASE <database_name> WITH RECOVERY;
      GO
      

      データベースの復旧を待機すると、必要なログ バックアップがすべて復元されていることを確認できます。これは、特定の時点への復元を実行する際の操作として、多くの場合は推奨される方法です。

重要な注意事項重要

指定があいまいにならないよう、すべての RESTORE ステートメントにおいて WITH NORECOVERY または WITH RECOVERY を常に明示的に指定することをお勧めします。これは、スクリプトを作成するときに特に重要です。

トランザクション ログのバックアップを適用するには

  1. 次の項目を指定して RESTORE LOG ステートメントを実行し、トランザクション ログ バックアップを適用します。

    • トランザクション ログが適用されるデータベースの名前。

    • 適用するトランザクション ログ バックアップが格納されているバックアップ デバイス。

    • NORECOVERY 句。

    このステートメントの基本構文は次のとおりです。

    RESTORE LOG database_name FROM backup_device WITH NORECOVERY

    database_name は、データベース名です。backup_device は、復元するログ バックアップを保持するデバイスの名前です。

  2. 適用する必要があるトランザクション ログ バックアップごとに、手順 1. を繰り返します。

  3. 復元シーケンスの最後のバックアップを復元した後、データベースを復旧するには、次のステートメントを使用します。

    RESTORE database_name WITH RECOVERY

    重要な注意事項重要

    ミラー データベースを作成している場合は、復旧ステップを省略します。ミラー データベースは、RESTORING 状態のままにする必要があります。

使用例

既定では、AdventureWorks2008R2 データベースは単純復旧モデルを使用します。以下の例では、次に示すように、完全復旧モデルが使用されるようにデータベースを変更する必要があります。

ALTER DATABASE AdventureWorks2008R2 SET RECOVERY FULL

ALTER DATABASE AdventureWorks2008R2 SET RECOVERY FULL

A. 1 つのトランザクション ログ バックアップの適用

次の例では、まず AdventureWorks2008R2_1 というバックアップ デバイスに存在するデータベースの完全バックアップを使用して AdventureWorks2008R2 データベースを復元します。次に、AdventureWorks2008R2_log というバックアップ デバイスにある最初のトランザクション ログ バックアップを適用します。最後に、データベースを復旧します。

RESTORE DATABASE AdventureWorks2008R2
   FROM AdventureWorks2008R2_1
   WITH NORECOVERY
GO
RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2_log
   WITH FILE = 1,
   WITH NORECOVERY
GO
RESTORE DATABASE AdventureWorks2008R2
   WITH RECOVERY
GO

RESTORE DATABASE AdventureWorks2008R2
   FROM AdventureWorks2008R2_1
   WITH NORECOVERY
GO
RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2_log
   WITH FILE = 1,
   WITH NORECOVERY
GO
RESTORE DATABASE AdventureWorks2008R2
   WITH RECOVERY
GO

B. 複数のトランザクション ログ バックアップの適用

次の例では、まず AdventureWorks2008R2_1 というバックアップ デバイスに存在するデータベースの完全バックアップを使用して AdventureWorks2008R2 データベースを復元します。次に、AdventureWorks2008R2_log という名前のバックアップ デバイスにある最初の 3 つのトランザクション ログ バックアップを、1 つずつ適用します。最後に、データベースを復旧します。

RESTORE DATABASE AdventureWorks2008R2
   FROM AdventureWorks2008R2_1
   WITH NORECOVERY
GO
RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2_log
   WITH FILE = 1,
   NORECOVERY
GO
RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2_log
   WITH FILE = 2,
   WITH NORECOVERY
GO
RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2_log
   WITH FILE = 3,
   WITH NORECOVERY
GO
RESTORE DATABASE AdventureWorks2008R2
   WITH RECOVERY
GO

RESTORE DATABASE AdventureWorks2008R2
   FROM AdventureWorks2008R2_1
   WITH NORECOVERY
GO
RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2_log
   WITH FILE = 1,
   NORECOVERY
GO
RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2_log
   WITH FILE = 2,
   WITH NORECOVERY
GO
RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2_log
   WITH FILE = 3,
   WITH NORECOVERY
GO
RESTORE DATABASE AdventureWorks2008R2
   WITH RECOVERY
GO