Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.138.204.208] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте.
Сделал бэкап : Server srv = new Server(); bool useWindowsAuthentication = true; srv.ConnectionContext.ServerInstance = @".\SQLSERV"; srv.ConnectionContext.LoginSecure = true; Backup backup = new Backup(); backup.Action = BackupActionType.Database; backup.Database = @"C:\REPORT\PARAM.MDF"; backup.Incremental = false; backup.Initialize = true; backup.LogTruncation = BackupTruncateLogType.Truncate; string fileName = @"C:\Report\Backup\backup.bak"; BackupDeviceItem backupItemDevice = new BackupDeviceItem(fileName, DeviceType.File); backup.Devices.Add(backupItemDevice); try { backup.SqlBackup(srv); Journal.CreateWritten("Бэкап базы был успешно произведен.", Journal.JournalStates.Change); MessageBox.Show("Бэкап готов"); SendBackupToMail(); } catch (Exception ex) { Journal.CreateWritten("Бэкап базы не произведен. " + ex.Message, Journal.JournalStates.Error); MessageBox.Show(ex.InnerException.ToString()); } Потом ресторе: Server srv = new Server(); bool useWindowsAuthentication = true; srv.ConnectionContext.ServerInstance = @".\SQLSERV"; srv.ConnectionContext.LoginSecure = true; Restore restore = new Restore(); string fileName = @"C:\Report\Backup\Backup.bak"; restore.Devices.Add(new BackupDeviceItem(fileName, DeviceType.File)); // Just give it a new name string destinationDatabaseName = "paramres"; // Now relocate the data and log files RelocateFile reloData = new RelocateFile("param", string.Format(@"C:\REPORT\Restore\{0}.mdf", destinationDatabaseName)); RelocateFile reloLog = new RelocateFile("param_log", string.Format(@"C:\REPORT\Restore\{0}_Log.ldf", destinationDatabaseName)); restore.RelocateFiles.Add(reloData); restore.RelocateFiles.Add(reloLog); restore.Database = destinationDatabaseName; restore.ReplaceDatabase = true; try { restore.SqlRestore(srv); MessageBox.Show("Восстановление выполнено успешно"); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } При подключении к восстановленой БД через attachDbFilename выдает : Unable to open the physical file "C:\Report\Restore\paramres.mdf". Operating system error 32: "32(Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.)". An attempt to attach an auto-named database for file C:\Report\Restore\paramres.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share. Что я делаю не так ? |
Сообщ.
#2
,
|
|
|
Вобщем решилось так :
для того чтобы восстановленая БД заработала, нужно ей сделать Detach на сервере, и AttachDbFilename через мое приложение, после этого можно с ней работать и через приложение и через SQL Server Management Studio. Как только я делаю ресторе, новая база сразу же появляется в списке Databases на сервере, и, видимо, сервер больше никого к ней не пускает. Можно этого как-то избежать при ресторе, чтобы каждый раз Detach не делать ? |
Сообщ.
#3
,
|
|
|
Еще вопрос :
предоставляет ли C# какие-то средства для detach ? я нашел только через выполнение sql запроса : cmd.CommandText = "sys.sp_detach_db MyDatabase"; а нет, можно так : server.DetachDatabase() |
Сообщ.
#4
,
|
|
|
detach и Backup это небо и земля
|