如何:套用交易記錄備份 (Transact-SQL)

若要將交易記錄備份套用到資料庫,下列條件必須成立:

  • 在建立完整或差異資料庫備份之前,資料庫必須已在使用完整復原模式或大量記錄復原模式。

  • 還原較早的備份時,還原順序必須已經指定 WITH NORECOVERY。

  • 必須依建立記錄備份的順序來套用記錄備份,且記錄鏈中沒有任何間距。除了最後一個記錄備份以外,您必須使用 WITH NORECOVERY,如下所示:

    RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY;
    
  • 當套用最後一個記錄備份時,您可以執行下列動作:

    • 在最後一個 BACKUP LOG 陳述式之中復原資料庫:

      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 陳述式中永遠明確指定 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

A. 套用單一交易記錄備份

下列範例一開始會使用名為 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

B. 套用多個交易記錄備份

下列範例一開始會使用名為 AdventureWorks2008R2_1 備份裝置上的完整資料庫備份來還原 AdventureWorks2008R2 資料庫。此範例接著逐一套用名為 AdventureWorks2008R2_log 備份裝置上的前三個交易記錄備份。最後,此範例復原了資料庫。

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