まず、フルバックアップを復元してから、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(...)
NoRecovery = trueで復元すると、データベースは「復元中」の状態になります。再度使用できるようにするには、次のコマンドを使用してください。 RESTORE DATABASE <データベース名> RECOVERY – James
こんにちは、同じ方法で特定の日付に基づいてデータベース差分を復元する方法を教えてください。 –
@kalyan私はあなたが何を求めているのか正確には分かりません。あなたは差分バックアップセットを持っていますか?それらを**特定の日付まで**復元したいですか?または、特定の日付に**開始**し、後続の差分バックアップをすべて適用したいですか?または、おそらく他の何かが完全に - あなたは明確にすることができますか? – Donut