2009-06-24 19 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がスローされ、「サーバー 'servername'の復元に失敗しました」というメッセージが表示されます。 私は、差分バックアップを復元することを明示的に述べる必要がありますか?そうであれば、これをどうやって行うのですか?それともこの問題よりも明らかに問題が少ないのでしょうか?私が間違っていること(または無視すること)に関する提案は、大いに感謝します。

更新:これはもともとタイプミスだった場合またはそれ以前のバージョンでは、APIのこのフォームを持っていたが、それ以降のバージョンのこのライン

fullRestore.AddDevice(...); 

が後

fullRestore.Devices.AddDevice(...) 

答えて

4

にするかどうかわかりませんもう少し掘り起こすと、私はこのことを考え出しました。差分バックアップのための順序で動作するように復元し、フルはtrueに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 <データベース名> RECOVERY – James

+0

こんにちは、同じ方法で特定の日付に基づいてデータベース差分を復元する方法を教えてください。 –

+0

@kalyan私はあなたが何を求めているのか正確には分かりません。あなたは差分バックアップセットを持っていますか?それらを**特定の日付まで**復元したいですか?または、特定の日付に**開始**し、後続の差分バックアップをすべて適用したいですか?または、おそらく他の何かが完全に - あなたは明確にすることができますか? – Donut

関連する問題