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

 

posted @ 2020-09-09 15:49  hhlotus  阅读(1556)  评论(0编辑  收藏  举报