執行完整的資料庫還原 (完整復原模式)

在完整資料庫還原中,目標是還原整個資料庫。在還原期間,整個資料庫為離線狀態。在讓資料庫的任何部分上線之前,所有的資料都必須復原到一致的位置;此時資料庫的所有部分都會回到相同的時間點,而且沒有未認可的交易存在。

在完整復原模式下,可以將資料庫還原到特定的時間點。上述時間點可以是最近的可用備份、特定的日期和時間,或標示的交易。

安全性注意事項安全性注意事項

建議您不要附加或還原來源不明或來源不受信任的資料庫。這些資料庫可能包含惡意程式碼,因此可能執行非預期的 Transact-SQL 程式碼,或是修改結構描述或實體資料庫結構而造成錯誤。使用來源不明或來源不受信任的資料庫之前,請先在非實際伺服器中的資料庫上執行 DBCC CHECKDB,同時檢查資料庫中的程式碼,例如預存程序或其他使用者自訂程式碼。

還原完整資料庫

一般而言,將資料庫復原至失敗點的作業,包含下列基本步驟:

  1. 備份使用中的交易記錄檔 (即所謂的記錄檔結尾)。這會建立結尾記錄備份。如果沒有使用中的交易記錄,就會遺失該部分記錄中的所有交易。

    重要事項重要事項

    在大量記錄復原模式下,備份包含大量記錄作業的記錄時,需要存取資料庫中的所有資料檔案。如果無法存取資料檔案,就無法備份交易記錄。在這種情況下,您必須手動重做最近一次備份記錄之後進行的所有變更。

    如需詳細資訊,請參閱<結尾記錄備份>。

  2. 還原最新的完整資料庫備份,但不復原資料庫 (RESTORE DATABASE database_name FROM <backup_device> WITH NORECOVERY)。

  3. 如果有差異備份存在,請還原最新的備份,但是不要復原資料庫 (RESTORE DATABASE database_name FROM differential_backup_device WITH NORECOVERY)。

  4. 從剛才還原的備份之後所建立的第一個交易記錄備份開始,依順序以 NORECOVERY 還原記錄。

  5. 復原資料庫 (RESTORE DATABASE database_name WITH RECOVERY)。或者,這個步驟也可以合併在還原最後的記錄備份。

  6. 完整資料庫還原通常可以復原至記錄備份中的某個時間點或標示的交易。然而,在大量記錄復原模式下,如果記錄備份包含大量記錄的變更,則無法進行時間點復原。如需詳細資訊,請參閱<將資料庫還原到備份中的時間點>。

下圖顯示這項程序。在失敗發生之後 (1),會建立結尾記錄備份 (2)。接下來,資料庫會還原至失敗點。這個程序牽涉到還原資料庫備份、後續的差異備份,以及在差異備份之後所進行的每一個記錄備份,包括結尾記錄備份在內。

完成資料庫還原至失敗的時間

當您要完全還原資料庫時,應該使用單一還原順序。下列範例針對要將資料庫還原至失敗時間點的完整資料庫還原實例,說明其還原順序中的重要選項。還原順序包含一或多個還原作業,會在一或多個還原階段中移動資料。會省略與這個檔案還原無關的語法和詳細資料。

資料庫會被還原並向前復原。資料庫差異可用來減少向前復原的時間。這個還原順序的目的是要避免工作遺失;最後還原的備份會是結尾記錄備份。

還原順序的基本 RESTORE 語法為:

  1. RESTORE DATABASE <database> FROM full database backup WITH NORECOVERY;

  2. RESTORE DATABASE <database> FROM full_differential_backup WITH NORECOVERY;

  3. RESTORE LOG <database> FROM <log_backup> WITH NORECOVERY;

    針對其他每個記錄備份重複此還原記錄步驟。

  4. RESTORE DATABASE <database> WITH RECOVERY;

範例

下列範例已在備份 AdventureWorks2008R2 範例資料庫之前,將該資料庫設定為使用完整復原模式。此範例會建立 AdventureWorks2008R2 資料庫的結尾記錄備份。接下來,此範例會還原較早的完整資料庫備份和記錄備份,然後才還原結尾記錄備份。此範例會在一個不同的最後步驟中復原資料庫。

[!附註]

此範例使用<完整資料庫備份>的「在完整復原模式下使用資料庫備份」一節中所建立的資料庫備份和記錄備份。

此範例會從設定復原模式為 FULL 的 ALTER DATABASE 陳述式開始進行。

USE master;
--Create tail-log backup.
BACKUP LOG AdventureWorks2008R2 
TO DISK = 'Z:\SQLServerBackups\AdventureWorks2008R2FullRM.bak'  
   WITH NORECOVERY; 
GO
--Restore the full database backup (from backup set 1).
RESTORE DATABASE AdventureWorks2008R2 
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2008R2FullRM.bak' 
  WITH FILE=1, 
    NORECOVERY;

--Restore the regular log backup (from backup set 2).
RESTORE LOG AdventureWorks2008R2 
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2008R2FullRM.bak' 
  WITH FILE=2, 
    NORECOVERY;

--Restore the tail-log backup (from backup set 3).
RESTORE LOG AdventureWorks2008R2 
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2008R2FullRM.bak'
  WITH FILE=3, 
    NORECOVERY;
GO
--recover the database:
RESTORE DATABASE AdventureWorks2008R2 WITH RECOVERY;
GO

復原到失敗點

復原至某個時間點

在完整復原模式下,可以將資料庫還原到記錄備份中的特定時間點。時間點可以是特定日期和時間、標示的交易或記錄序號 (LSN)。如需詳細資訊,請參閱<將資料庫還原到備份中的時間點>。

支援舊版 SQL Server 的備份

在 SQL Server 2008 中,您可以還原使用 SQL Server 2000、SQL Server 2005 或 SQL Server 2008 所建立的資料庫備份。但是,SQL Server 2008 無法還原使用 SQL Server 2000 或 SQL Server 2005 所建立的 mastermodelmsdb 備份。此外,任何舊版 SQL Server 都無法還原 SQL Server 2008 備份。

SQL Server 2008 使用與之前版本不同的預設路徑。因此,若要還原在 SQL Server 2000 或 SQL Server 2005 備份的預設位置中所建立的資料庫,就必須使用 MOVE 選項。如需有關新預設路徑的詳細資訊,請參閱<SQL Server 的預設和具名執行個體的檔案位置>。

[!附註]

如需有關如何將使用 SQL Server 7.0 或舊版建立的資料庫升級至 SQL Server 2005 的詳細資訊,請參閱<複製 SQL Server 7.0 或舊版的資料庫>。