Я прочитал дюжину разных блогов, а также прочитал примеры msdn, и они просто не работают для меня.
В конечном счете, я пытаюсь автоматизировать перемещение БД из нашего производственного экземпляра в наш экземпляр разработки или в другом направлении.
Подход, который я выбрал, таков:
- резервное копирование/восстановление во временную БД
- отключить временную БД
- скопировать файлы mdf и ldf в другой экземпляр
- прикрепить.
Я застрял на 1, и я не могу понять, почему. Все, что я читал, утверждает, что это должно работать.
ПРИМЕЧАНИЕ. Я установил dbName
для базы данных, которую хочу восстановить. Я также установил restore.Database = dbName
, где restore
— экземпляр класса Restore
в пространстве имен smo
.
mdf.LogicalFileName = dbName;
mdf.PhysicalFileName = String.Format(@"{0}\{1}.mdf", server.Information.MasterDBPath, dbName);
ldf.LogicalFileName = dbName + "_log";
ldf.PhysicalFileName = String.Format(@"{0}\{1}.ldf", server.Information.MasterDBPath, dbName);
restore.RelocateFiles.Add(mdf);
restore.RelocateFiles.Add(ldf);
restore.SqlRestore(server);
Это исключение, которое я получаю:
Файл «D:\MSSQL.MIQ_Dev\MSSQL.2\MSSQL\Data\MIQDesign2Detach.mdf» не может быть перезаписан. Он используется базой данных 'MIQDesignTest2'.
Файл 'MIQDesign' не может быть восстановлен в 'D:\MSSQL.MIQ_Dev\MSSQL.2\MSSQL\Data\MIQDesign2Detach.mdf'. Используйте WITH MOVE, чтобы определить правильное расположение файла.
Файл "D:\MSSQL.MIQ_Dev\MSSQL.2\MSSQL\Data\MIQDesign2Detach.ldf" нельзя перезаписать. Он используется базой данных «MIQDesignTest2».
Файл «MIQDesign_log» не может быть восстановлен в «D:\MSSQL.MIQ_Dev\MSSQL.2\MSSQL\Data\MIQDesign2Detach.ldf». Используйте WITH MOVE, чтобы определить правильное расположение файла.
При планировании оператора RESTORE были обнаружены проблемы. В предыдущих сообщениях содержится подробная информация.
RESTORE DATABASE аварийно завершает работу.
Почему это пытается перезаписать оригинальный mdf? Разве RelocateFiles
не должно указывать, что вы хотите, чтобы он был сохранен в другом физическом имени файла?