Я пытаюсь восстановить SQL сервер .bak в пустую базу данных, используя следующий C# код:Восстановление базы данных с помощью C# и SMO
string dbBakFile = GetBackFileFromZip(restoreConfig.TmpUnZipFolder,restoreConfig.DatabaseFileToRestore);
if (string.IsNullOrEmpty(dbBakFile))
{
response.Status = DatabaseResponseStatus.Error;
response.Message = "No .bak file found in " + restoreConfig.DatabaseToRestore;
return response;
}
var builder =
new SqlConnectionStringBuilder(
ConfigurationManager.ConnectionStrings["myserver"].ConnectionString);
var smoServer =
new Server(new ServerConnection(builder.DataSource,builder.UserID,builder.Password));
var db = smoServer.Databases[restoreConfig.DatabaseToRestore];
if (db != null)
{
smoServer.KillAllProcesses(restoreConfig.DatabaseToRestore);
log.Debug("all processes on db killed");
}
string dbPath = Path.Combine(db.PrimaryFilePath, restoreConfig.DatabaseToRestore + ".mdf");
log.Debug("db path is " +dbPath);
string logPath = Path.Combine(db.PrimaryFilePath,restoreConfig.DatabaseToRestore + "_Log.ldf");
log.Debug("log path is " + logPath);
var restore = new Restore();
var deviceItem =
new BackupDeviceItem(dbBakFile, DeviceType.File);
restore.DatabaseFiles.Add(dbPath);
restore.DatabaseFiles.Add(logPath);
restore.Devices.Add(deviceItem);
restore.Database = restoreConfig.DatabaseToRestore;
restore.FileNumber = 1;
restore.Action = RestoreActionType.Files;
restore.ReplaceDatabase = true;
restore.PercentCompleteNotification = 10;
restore.PercentComplete +=restore_PercentComplete;
restore.Complete += restore_Complete;
restore.SqlRestore(smoServer);
db = smoServer.Databases[restoreConfig.DatabaseToRestore];
db.SetOnline();
smoServer.Refresh();
db.Refresh();
Я получаю следующее сообщение об ошибке:
Microsoft.SqlServer.Management.Smo.FailedOperationException: Restore failed for Server 'IM-M4500\SQLEXPRESS'. ---> Microsoft.SqlServer.Management.Smo.SmoException: System.Data.SqlClient.SqlError: The backup set holds a backup of a database other than the existing 'new-test-44444' database
Да он держит другую резервную копию, и я хочу перезаписать и заменить ее, также хочу переместить файлы mdf и log в новые файлы. Я что-то упустил в вариантах восстановления?
Большое спасибо
Исмаил
Danson, благодарю вас за ответ. Просто чтобы дать вам немного больше информации, у меня есть процесс, когда пользователи заполняют форму и создают для них iis-сайт и новый пустой db. После этого процесса, если у них есть существующий db, я хочу, чтобы они могли восстановить этот db. Процесс создания использует соглашение об именах для сайта и db, и я хочу сохранить это и просто написать db поверх вновь созданного db. Нет ли способа сделать это с помощью tsql? Я попробовал ваш sql, и я все равно получаю такую же ошибку. Спасибо Ismail – Ismail