SMO復元オブジェクトを使用した差分バックアップの復元
-
22-07-2019 - |
質問
最初に完全バックアップを復元し、次に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(...)
解決
もう少し掘り下げた後、私はこれを見つけました。差分バックアップ復元を機能させるには、NoRecoveryをtrueに設定して完全復元を実行する必要があります。
// before executing the SqlRestore command for myFullRestore...
myFullRestore.NoRecovery = true;
これは、別のトランザクションログ(この場合は差分バックアップ)を適用する必要があることを指定します。このページには、さらに役立つ情報がいくつかあります。 http://doc.ddart.net/mssql/sql70/ra-rz_9。 htm
所属していません StackOverflow