我尝试通过首先还原完整备份然后使用Microsoft.SqlServer.Management.Smo.Restore类还原差异备份来还原数据库。使用以下代码恢复完整备份:
Restore myFullRestore = new Restore();
myFullRestore.Database = "DatabaseName";
myFullRestore.Action = RestoreActionType.Database;
myFullRestore.AddDevice(@"C:\BackupFile.bak", DeviceType.File);
myFullRestore.FileNumber = 1;
myFullRestore.SqlRestore(myServer); // myServer is an already-existing instance of Microsoft.SqlServer.Management.Smo.Server
恢复完整备份(成功完成)后,恢复差异备份的代码如下:
Restore myDiffRestore = new Restore();
myDiffRestore.Database = "DatabaseName";
myDiffRestore.Action = RestoreActionType.Database;
myDiffRestore.AddDevice(@"C:\BackupFile.bak", DeviceType.File);
myDiffRestore.FileNumber = 4; // file contains multiple backup sets, this is the index of the set I want to use
myDiffRestore.SqlRestore(myServer);
但是,此代码将抛出Microsoft.SqlServer.Management.Smo.FailedOperationException,并显示消息“服务器'servername'的恢复失败”。 我是否需要明确声明我正在恢复差异备份,如果是,我该如何进行此操作?或者这个问题不是很明显吗?对于我做错了什么(或忽视做什么)的任何建议都将不胜感激。
更新:不确定这是否是最初的拼写错误,或者早期版本是否具有此形式的API,但对于此版本的更高版本
fullRestore.AddDevice(...);
应该是
fullRestore.Devices.AddDevice(...)
答案 0 :(得分:4)
经过多一点挖掘后,我想出了这个。为了使差异备份还原起作用,需要在NoRecovery设置为true的情况下执行完全还原:
// before executing the SqlRestore command for myFullRestore...
myFullRestore.NoRecovery = true;
这指定需要应用另一个事务日志,在这种情况下是差异备份。此页面包含一些我认为有用的信息: http://doc.ddart.net/mssql/sql70/ra-rz_9.htm