本文测试恢复单独的差异备份文件。报错:无法还原日志备份或差异备份,因为没有文件可用于前滚。
SSMS恢复完整备份文件没有问题,但差异备份恢复始终报错。以下是微软帮助文档中示例:
--微软帮助文档 RESTORE DATABASE AdventureWorks2008R2 FROM DISK = 'Z:SQLServerBackupsAdventureWorks2008R2.bak' WITH FILE = 6 NORECOVERY; RESTORE DATABASE AdventureWorks2008R2 FROM DISK = 'Z:SQLServerBackupsAdventureWorks2008R2.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 estdb.mdf', MOVE 'AdventureWorks2008R2_Log' TO 'C:MySQLServer estdb.ldf';