Я пытаюсь восстановить базу данных, сначала восстановив полную резервную копию, а затем восстановив дифференциальную резервную копию, используя класс 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 failed for server» servername ». Нужно ли явно указывать, что я восстанавливаю дифференциальную резервную копию, и если да, то как мне это сделать? Или проблема менее очевидна? Любые предложения относительно того, что я делаю неправильно (или пренебрежение делать), будут очень признательны.
Update: Не уверен, что если бы это было первоначально опечатка или были ли предыдущие версии этой формы API, но для более поздних версий эта линия
fullRestore.AddDevice(...);
должен быть
fullRestore.Devices.AddDevice(...)
Восстановление с помощью NoRecovery = true оставит базу данных в состоянии «Восстановить». Чтобы снова использовать его, используйте эту команду: RESTORE DATABASE <имя базы данных> С ВОССТАНОВЛЕНИЕМ – James
Здравствуйте, пончик так же, пожалуйста, скажите мне, как восстановить Базовый дифференциал на основе определенной даты. –
@kalyan Я не совсем уверен, что вы просите; у вас есть набор дифференциальных резервных копий, и вы хотите восстановить их ** до ** определенной даты? Или вы хотите ** запустить ** в заданную дату и применить все последующие дифференциальные резервные копии? Или, может быть, что-то еще - вы могли бы прояснить? – Donut