完整恢復模式下執行資料庫完整還原

iSQlServer發表於2009-01-19

資料庫完整還原的目的是還原整個資料庫。整個資料庫在還原期間處於離線狀態。在資料庫的任何部分變為聯機之前,必須將所有資料恢復到同一點,即資料庫的所有部分都處於同一時間點並且不存在未提交的事務。

在完整恢復模式下,資料庫可以還原到特定時間點。時間點可以是最新的可用備份、特定的日期和時間或者標記的事務。

安全說明:
建議您不要從未知源或不可信源附加或還原資料庫。這些資料庫可能包含執行非預期 Transact-SQL 程式碼的惡意程式碼,或通過修改架構或物理資料庫結構導致錯誤。使用來自未知源或不可信源的資料庫前,請在非生產伺服器上針對資料庫執行 DBCC CHECKDB,然後檢查資料庫中的程式碼,例如儲存過程或其他使用者定義程式碼。
 


 還原完整資料庫
通常,將資料庫恢復到故障點分為下列基本步驟:

備份活動事務日誌(稱為日誌尾部)。此操作將建立結尾日誌備份。如果活動事務日誌不可用,則該日誌部分的所有事務都將丟失。
重要提示:
在大容量日誌恢復模式下,備份任何包含大容量日誌操作的日誌都需要訪問資料庫中的所有資料檔案。如果無法訪問該資料檔案,則不能備份事務日誌。在這種情況下,您必須手動重做自最近備份日誌以來所做的所有更改。
 

有關詳細資訊,請參閱結尾日誌備份。

還原最新完整資料庫備份而不恢復資料庫 (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY)。

如果存在差異備份,則還原最新的差異備份而不恢復資料庫 (RESTORE DATABASE database_name WITH NORECOVERY)。

從還原備份後建立的第一個事務日誌備份開始,使用 NORECOVERY 依次還原日誌。

恢復資料庫 (RESTORE DATABASE database_name WITH RECOVERY)。此步驟也可以與還原上一次日誌備份結合使用。

資料庫完整還原通常可以恢復到日誌備份中的某一時間點或標記的事務。但是,在大容量日誌恢復模式下,如果日誌備份包含大容量更改,則不能進行時點恢復。有關詳細資訊,請參閱將資料庫還原到備份中的某個時間點。

下圖顯示了這一過程。故障發生後 (1),將建立結尾日誌備份 (2)。接著,將資料庫還原到該故障點。這涉及到還原資料庫備份、後續差異備份以及在差異備份後執行的每個日誌備份,包括結尾日誌備份。


還原整個資料庫時,應使用單一還原順序。下面的示例說明還原順序中用於將資料庫還原到故障點的資料庫完整還原方案的關鍵選項。還原順序由通過一個或多個還原階段來移動資料的一個或多個還原操作組成。將省略與此目的不相關的語法和詳細資訊。

資料庫將還原並前滾。資料庫差異用於減少前滾時間。此還原順序用於避免丟失工作;上次還原的備份為結尾日誌備份。

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

RESTORE DATABASE database FROM full database backup WITH NORECOVERY;

RESTORE DATABASE database FROM full_differential_backup WITH NORECOVERY;

RESTORE LOG database FROM log_backup WITH NORECOVERY;
對於其他每個日誌備份,重複此還原日誌步驟。

RESTORE DATABASE database WITH RECOVERY;

示例
對於以下示例,AdventureWorks 示例資料庫已設定為在資料庫備份之前使用完整恢復模式。此示例將建立 AdventureWorks 資料庫的結尾日誌備份。接下來,示例將還原較早的完整資料庫備份和日誌備份,然後還原結尾日誌備份。示例將在最後的單獨步驟中恢復資料庫。

注意:
此示例使用在完整資料庫備份的“在完整恢復模式下使用資料庫備份”部分中建立的資料庫備份和日誌備份。
 


此示例以 ALTER DATABASE 語句開頭,該語句將恢復模式設定為 FULL。

  
USE master;
--Make sure the database is using the full recovery model.
ALTER DATABASE AdventureWorks SET RECOVERY FULL;
GO
--Create tail-log backup.
BACKUP LOG AdventureWorks
TO DISK = 'Z:\SQLServerBackups\AdventureWorks.bak''Z:\SQLServerBackups\AdventureWorks.bak'
   WITH NORECOVERY;
GO
--Restore the full database backup (from backup set 1).
RESTORE DATABASE AdventureWorks
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorks.bak'
  WITH FILE=1,
    NORECOVERY;

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

--Restore the tail-log backup (from backup set 3).
RESTORE LOG AdventureWorks
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorks.bak'
  WITH FILE=3,
    NORECOVERY;
GO
--recover the database:
RESTORE DATABASE AdventureWorks WITH RECOVERY;
GO恢復到故障點
還原完整資料庫備份

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-541431/,如需轉載,請註明出處,否則將追究法律責任。

相關文章