Восстановление разностной резервной копии с СМО восстановить объект


Я пытаюсь восстановить базу данных, сначала восстановив полную резервную копию, а затем восстановив дифференциальную резервную копию с помощью Microsoft.От SQLServer.Управление.модель 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.Управление.модель SMO.FailedOperationException, с помощью сообщение "не удалось восстановить имя сервера". Нужно ли мне явно указать, что я восстанавливаю дифференциальную резервную копию, и если да, то как это сделать? Или проблема менее очевидна, чем эта? Любые предложения относительно того, что я делаю неправильно (или пренебрегаю этим), будут очень оценены.

Update : не уверен, была ли это изначально опечатка или более ранние версии имели такую форму API, но для более поздних версий эта строка

fullRestore.AddDevice(...);

Должен быть

fullRestore.Devices.AddDevice(...)
1 4

1 ответ:

Еще немного покопавшись, я все понял. Для того, чтобы дифференциальное восстановление резервной копии работало, полное восстановление должно быть выполнено с NoRecovery, установленным в true:

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

Это указывает, что необходимо применить другой журнал транзакций, который в данном случае является дифференциальным резервным копированием. На этой странице есть еще кое-какая информация, которую я нашел полезной: http://doc.ddart.net/mssql/sql70/ra-rz_9.htm