4

我正在尝试通过首先还原完整备份然后使用 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,并显示消息“Restore failed for server 'servername'”。我是否需要明确声明我正在恢复差异备份,如果需要,我该怎么做?还是问题比​​这不那么明显?任何关于我做错了什么(或忽略做)的建议将不胜感激。

更新:不确定这是否最初是一个错字或早期版本是否有这种形式的 API,但对于后来的版本,这条线

fullRestore.AddDevice(...);

应该

fullRestore.Devices.AddDevice(...)
4

1 回答 1

4

经过多一点挖掘,我想出了这个。为了使差异备份恢复正常工作,需要在 NoRecovery 设置为 true 的情况下执行完整恢复:

// before executing the SqlRestore command for myFullRestore...
myFullRestore.NoRecovery = true;

这指定需要应用另一个事务日志,在这种情况下是差异备份。这个页面有一些我发现有用的更多信息:http: //doc.ddart.net/mssql/sql70/ra-rz_9.htm

于 2009-06-25T14:07:17.153 回答