我試圖通過先還原完整備份,然後使用Microsoft.SqlServer.Management.Smo.Restore類還原差異備份來還原數據庫。完整的備份恢復與下面的代碼:使用SMO還原對象還原差異備份
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 server for server'servername'」。 我是否需要明確說明我正在恢復差異備份,如果是這樣,我該如何去做這件事?或者這個問題比這個更不明顯?任何關於我在做什麼錯誤(或忽視)的建議都將不勝感激。
更新:不知道這本來是一個錯字或更早版本是否有這種形式的API,但是對於以後的版本此行
fullRestore.AddDevice(...);
應該
fullRestore.Devices.AddDevice(...)
使用NoRecovery = true進行恢復將使數據庫處於「恢復」狀態。要使其再次可用,請使用以下命令: RESTORE DATABASE <數據庫名稱> WITH RECOVERY – James 2010-04-13 12:06:36