На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Подключение к восстановленой БД , C#, SQL server
    Здравствуйте.
    Сделал бэкап :
    ExpandedWrap disabled
      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());
                  }

    Потом ресторе:
    ExpandedWrap disabled
      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.

    Что я делаю не так ?
      Вобщем решилось так :
      для того чтобы восстановленая БД заработала, нужно ей сделать Detach на сервере, и AttachDbFilename через мое приложение, после этого можно с ней работать и через приложение и через SQL Server Management Studio.
      Как только я делаю ресторе, новая база сразу же появляется в списке Databases на сервере, и, видимо, сервер больше никого к ней не пускает. Можно этого как-то избежать при ресторе, чтобы каждый раз Detach не делать ?
        Еще вопрос :
        предоставляет ли C# какие-то средства для detach ?
        я нашел только через выполнение sql запроса :
        ExpandedWrap disabled
          cmd.CommandText = "sys.sp_detach_db MyDatabase";

        а нет, можно так :
        ExpandedWrap disabled
          server.DetachDatabase()
        Сообщение отредактировано: bogdanchek -
          detach и Backup это небо и земля
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0251 ]   [ 16 queries used ]   [ Generated: 26.04.24, 11:32 GMT ]