本文測試恢復單獨的差異備份文件。報錯:無法還原日志備份或差異備份,因為沒有文件可用於前滾。
SSMS恢復完整備份文件沒有問題,但差異備份恢復始終報錯。以下是微軟幫助文檔中示例:
--微軟幫助文檔 RESTORE DATABASE AdventureWorks2008R2 FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2008R2.bak' WITH FILE = 6 NORECOVERY; RESTORE DATABASE AdventureWorks2008R2 FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2008R2.bak' WITH FILE = 9 RECOVERY;
WITH FILE = 6 處會報錯(后同,原因是備份集后缺少逗號分隔),這是針對同一文件中包含多個備份集情況。但說明了關鍵一點,即:
/* 第1步,還原完整備份,必須使用 WITH NORECOVERY ,不對數據庫執行操作,不回滾事務,使數據庫處於【正在還原...】狀態,
此時數據庫不可使用,但可繼續還原其它文件; 第2步,還原差異備份,使用 WITH RECOVERY,回滾未提交事務,使數據庫恢復到可使用狀態。 */
了解了這一點,即使使用SSMS進行差異備份還原操作,也可以正常還原。這說明:
1,在不是還原當前數據庫時,會出現以上狀況。因為在恢復當前數據庫時,會始終顯示並選中最近完整備份,差異備份則可選。
2,在不是還原當前數據庫時,始終需要最近完整備份文件,並按照上面兩步,才能還原到最新差異備份(在SSMS中還原當前差異備份時,SSMS幫我們兩步合一步而已)。
另附示例,使用其它數據庫備份,恢復新數據庫到指定文件位置:
--使用 BACKUP 和 RESTORE 復制數據庫 BACKUP DATABASE AdventureWorks2008R2 TO AdventureWorks2008R2Backups ; RESTORE FILELISTONLY FROM AdventureWorks2008R2Backups ; RESTORE DATABASE TestDB FROM AdventureWorks2008R2Backups WITH MOVE 'AdventureWorks2008R2_Data' TO 'C:\MySQLServer\testdb.mdf', MOVE 'AdventureWorks2008R2_Log' TO 'C:\MySQLServer\testdb.ldf';