【问题标题】:Restoring a Differential Backup with an SMO Restore object使用 SMO 还原对象还原差异备份
【发布时间】:2009-06-24 20:56:40
【问题描述】:

我正在尝试通过首先还原完整备份然后使用 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(...)

【问题讨论】:

    标签: c# .net sql-server-2000 smo database-restore


    【解决方案1】:

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

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

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

    【讨论】:

    • 使用 NoRecovery = true 进行恢复将使数据库处于“正在恢复”状态。要使其再次可用,请使用以下命令:RESTORE DATABASE WITH RECOVERY
    • 您好,Donut 以同样的方式请您告诉我如何根据特定的给定日期恢复数据库差异。
    • @kalyan 我不确定你在问什么;您是否有一组差异备份并希望将它们恢复到某个日期?还是您想在给定日期开始并应用所有后续差异备份?或者完全是别的东西——你能澄清一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    相关资源
    最近更新 更多