SQL SERVER差異備份還原


本文測試恢復單獨的差異備份文件。報錯:無法還原日志備份或差異備份,因為沒有文件可用於前滾。

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';

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM