2009-06-24 98 views
4

我試圖通過先還原完整備份,然後使用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(...) 

回答

4

後多一點挖掘我想出了這一個。爲了使差異備份恢復工作,完全恢復需要用NORECOVERY組進行,以真:

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

這指定另一個事務日誌需要被應用,在這種情況下是差異備份。此頁面有一些我發現有用的信息: http://doc.ddart.net/mssql/sql70/ra-rz_9.htm

+2

使用NoRecovery = true進行恢復將使數據庫處於「恢復」狀態。要使其再次可用,請使用以下命令: RESTORE DATABASE <數據庫名稱> WITH RECOVERY – James 2010-04-13 12:06:36