2013-09-10 2 views
0

Я использую этот код около 2 лет для восстановления резервной копии 2008 года r2 до 2008 года r2, и он работает каждый раз. Теперь я пытаюсь использовать тот же код для восстановления с резервной копии r2 в 2008 году до localdb 2012 года, и он терпит неудачу каждый раз. Сообщение об ошибке ниже. Не только восстановление завершается неудачно, оно оставляет текущую базу данных в состоянии ожидания восстановления, и неприменимо. Я использую C#, и все это должно выполняться программно без участия пользователя или администратора базы данных. Можете ли вы помочь мне вернуть эту вещь в нужное русло?Не удается восстановить базу данных с помощью LocalDB

 using(var connection = new SqlConnection(connectionString)) 
     { 
      SqlCommand cmd = new SqlCommand(); 
      cmd.CommandText = String.Format("Alter Database {0} SET SINGLE_USER With ROLLBACK IMMEDIATE", dbName); 
      cmd.CommandType = CommandType.Text; 
      cmd.Connection = connection; 
      connection.Open(); 
      cmd.ExecuteNonQuery(); 

      SqlCommand cmd2 = new SqlCommand(); 
      cmd2.CommandText = String.Format(@"RESTORE DATABASE {0} FROM DISK = '{1}'", dbName, backupFilePath); 
      cmd2.CommandType = CommandType.Text; 
      cmd2.Connection = connection; 
      cmd2.ExecuteNonQuery(); 
     } 

System.Data.SqlClient.SqlException (0x80131904): логический файл базы данных 'MyData_log' не может быть найден. Укажите полный путь для файла. RESTORE не смог запустить базу данных 'MyData'. RESTORE DATABASE заканчивается аномально.

Edit: изменил одну строку

  cmd2.CommandText = String.Format(@"RESTORE DATABASE {0} FROM DISK = '{1}' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 5", dbName, backupFilePath); 

До сих пор не сделал никакой разницы.

ответ

0

Не следует ли ВОССТАНОВИТЬ БАЗА ДАННЫХ и использовать опцию WITH REPLACE? И ваша строка подключения соединяет вас с базой данных «master» для запуска этих команд, а не с восстановленной базы данных?

Вы использовали SQL Server Management Studio для поиска имени файла базы данных и местоположений файлов * .mdf и * .ldf?

Я также обнаружил, что иногда очень быстрое восстановление базы данных не работает должным образом, но последующие ... вы пытались вручную восстановить базу данных (используя SQL Server Management Studio ... щелкните правой кнопкой мыши DB, задачи, восстановить базу данных), а затем попытался запустить код программно?

Как правило, при программном восстановлении вы хотите захватить имена файлов файлов mdf и ldf, а затем указать их в команде RESTORE с опцией «WITH REPLACE».

+0

См. Редактирование вопроса. Я скопировал sql из окна восстановления SSMS, чтобы использовать его в качестве новой команды. До сих пор он не работал для восстановления базы данных sql 2008 r2 до базы данных sql 2012. Я предположительно обнаружил, что если я установлю полный sql express 2012 на тестовой машине, восстановление будет работать, хотя я все еще использую LocalDB. Очень странно, и мне придется продолжать тестирование. –

Смежные вопросы