數據庫完整還原的目的是還原整個數據庫。 整個數據庫在還原期間處於脫機狀態。
在數據庫的任何部分變為聯機之前,必須將所有數據恢復到同一點,即數據庫的所有部分都處於同一時間點並且不存在未提交的事務。
在完整恢復模式下,還原數據備份之后,必須還原所有后續的事務日志備份,然后再恢復數據庫。
您可以將數據庫還原到這些日志備份之一的特定 恢復點 。 恢復點可以是特定的日期和時間、標記的事務或日志序列號 (LSN)。
還原數據庫時,特別是在完整恢復模式或大容量日志恢復模式下,您應使用一個還原順序。 還原順序 由通過一個或多個還原階段來移動數據的一個或多個還原操作組成。
一、將數據庫還原到故障點
通常,將數據庫恢復到故障點分為下列基本步驟:
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)。 此步驟也可以與還原上一次日志備份結合使用。
下圖說明此還原順序。 故障發生后 (1),將創建結尾日志備份 (2)。 接着,將數據庫還原到該故障點。
這涉及到還原數據庫備份、后續差異備份以及在差異備份后執行的每個日志備份,包括結尾日志備份。
基本 TRANSACT-SQL RESTORE 語法
上圖中還原順序的基本 RESTORETransact-SQL 語法如下:
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;
示例:恢復到故障點 (Transact-SQL)
以下 Transact-SQL 示例顯示了將數據庫還原到故障點的還原順序中的基本選項。 此示例將創建數據庫的結尾日志備份。
接下來,此示例將還原完整數據庫備份和日志備份,然后還原結尾日志備份。 此示例將在最后的單獨步驟中恢復數據庫。
USE master; --Create tail-log backup. BACKUP LOG AdventureWorks2012 TO DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak' WITH NORECOVERY; GO --Restore the full database backup (from backup set 1). RESTORE DATABASE AdventureWorks2012 FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak' WITH FILE=1, NORECOVERY; --Restore the regular log backup (from backup set 2). RESTORE LOG AdventureWorks2012 FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak' WITH FILE=2, NORECOVERY; --Restore the tail-log backup (from backup set 3). RESTORE LOG AdventureWorks2012 FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak' WITH FILE=3, NORECOVERY; GO --recover the database: RESTORE DATABASE AdventureWorks2012 WITH RECOVERY; GO
二、將數據庫還原到日志備份中的某個時間點
在完整恢復模式下,完整的數據庫還原通常可恢復到日志備份中的某個時間點、標記的事務或 LSN。
但是,在大容量日志恢復模式下,如果日志備份包含大容量更改,則不能進行時點恢復。
時點還原方案示例
下例假定針對一個關鍵任務型數據庫系統,每天午夜創建一個完整數據庫備份;
從星期一到星期六,每小時創建一個差異數據庫備份;全天每 10 分鍾創建一個事務日志備份。
若要將數據庫還原到星期三凌晨 5:19 的狀態, 請執行以下操作:
1.還原星期二午夜創建的完整數據庫備份。
2.還原星期四凌晨 5:00 創建的差異數據庫 備份。
3.應用星期四凌晨 5:10創建的事務日志 備份。
4.應用星期三凌晨 5:20 創建的事務日志 備份,指定恢復進程僅應用到凌晨 5:19 之前發生的事務。
或者,如果需要將數據庫還原到它在星期四凌晨 3:04 的狀態, 而在星期四凌晨 3:00 創建的差異數據庫備份已不可用,
則執行下列操作:
1.還原在星期三午夜創建的數據庫備份。
2.還原星期四凌晨 2:00 創建的差異數據庫 備份。
3.應用從星期四凌晨 2:10 到 3:00 創建的所有事務 日志 備份。
4.應用星期四凌晨 3:10 創建的事務日志 備份,停止凌晨 3:04 的恢復進程。