Подтвердить что ты не робот

Как скопировать базу данных SQL Server 2012 в экземпляр localdb?

Я ищу копию базы данных SQL Server 2012 Standard для моего экземпляра localdb. Я пробовал мастер, который жалуется, что localdb не является экземпляром SQL Server 2005 или более поздней версии. Я также сделал резервную копию/восстановление, но после восстановления в моем localdb я получил следующую ошибку...

Запуск этого...

RESTORE DATABASE CSODev
FROM DISK = 'C:\MyBckDir\CSODev.bak'
WITH MOVE 'CSOdev_Data' TO 'C:\Users\cblair\CSOdev_Data.mdf',
MOVE 'CSOdev_Log' TO 'C:\Users\cblair\CSOdev_Log.ldf',
REPLACE

Сообщение об ошибке, которое я получаю...

Обработано 8752 страниц для базы данных "CSODev" , файл "CSOdev_Data" в файле 1.
Обработано 5 страниц для базы данных "CSODev" , файл "CSOdev_Log" в файле 1.

Msg 1853, уровень 16, состояние 1, строка 1
Файл логической базы данных "CSOdev_Log" не найден. Укажите полный путь для файла.
Msg 3167, уровень 16, состояние 1, строка 1
RESTORE не смог запустить базу данных "CSODev" .
Msg 3013, уровень 16, состояние 1, строка 1
RESTORE DATABASE заканчивается аномально.

База данных заканчивается в режиме "Ожидание восстановления". Похоже, что у него есть проблемы с файлом журнала. Я попробовал 2 разных резервных копии в случае, если один был поврежден.

4b9b3361

Ответ 1

Существует известное ограничение (фактически это ошибка) для localDB. Он не сможет выполнить RESTORE с MOVE всякий раз, когда ваши файлы базы данных находятся в разных папках.

Вам необходимо восстановить исходные папки (нет MOVE). Используйте инструмент cmd, например SUBST, если вам нужно подделать диск:/path.

Ответ 2

У меня была та же проблема. Что в итоге получилось:

  • Попытка восстановить базу данных (получение ошибки в OP)
  • Отсоединение базы данных
  • Повторная привязка базы данных

На последнем этапе произошло то, что SSDT выполнил обновление файлов данных, которые, по-видимому, были в более старом формате. Когда это было завершено, база данных начала работать без проблем!

Ответ 3

У меня была такая же проблема, и после небольшого онлайн-исследования я наткнулся на гениальный способ заставить его работать (хотя и довольно хаки). В принципе, вы:

  • Создайте экземпляр SqlLocalDb (SqlLocalDb c tmp -s).
  • Восстановите базу данных, как вы это делали выше (например, SqlCmd -E -S <localdb connection string> -Q "RESTORE DATABASE ...").
  • Остановить экземпляр SqlLocalDb (SqlLocalDb p tmp).
  • Удалить экземпляр SqlLocalDb (SqlLocalDb d tmp).
  • Создайте новый экземпляр SqlLocalDb (SqlLocalDb c persistent -s).
  • Создайте базу данных в новом экземпляре, добавив ее (SqlCmd -E -S <persistent connection string> -Q "Create Database <dbname> On (Filename = '<Mdf file location'), (Filename = '<Ldf Filename'>) For Attach".

И, надеюсь, это сработает. См. здесь для оригинальной идеи.

Изменить: Добавлена ​​Jason Brady коррекция команды create.

Ответ 4

Попробуйте выполнить скриптинг вашей базы данных в виде схемы и данных, а затем запустите script локально.

Ответ 5

RESTORE FILELISTONLY
FROM DISK = 'D:\SQLBackups\yourdatabase.BAK'


ALTER DATABASE yourdatabasename
SET SINGLE_USER WITH
ROLLBACK IMMEDIATE

RESTORE DATABASE yourdatabasename
FROM DISK = 'D:\SQLBackups\yourdatabase.BAK'
with replace,
move 'logical name from file stream' to
'C:\yourdatabase.mdf',
move 'logical name from file stream' to 'C:\Yourdatabase.ldf'
ALTER DATABASE Qatar_DB SET MULTI_USER

Ответ 6

У меня была та же проблема. Попробуйте запустить visual studio в качестве администратора и попробуйте выполнить следующую команду

RESTORE DATABASE CSODev
FROM DISK = 'C:\MyBckDir\CSODev.bak'
WITH NORECOVERY, MOVE 'CSOdev_Data' TO 'C:\Users\cblair\CSOdev_Data.mdf',
MOVE 'CSOdev_Log' TO 'C:\Users\cblair\CSOdev_Log.ldf',

ОБНОВЛЕНИЕ: Это не сработало!

Несмотря на то, что приведенный выше оператор не вызывает ошибок и успешно завершается, база данных остается в состоянии "ОЖИДАНИЕ ВОССТАНОВЛЕНИЯ" и не может быть доступна каким-либо образом. Когда я попытался "ВОССТАНОВИТЬ С ВОССТАНОВЛЕНИЕМ", чтобы принести базу данных онлайн, я получил ту же ошибку, что и в вопросе выше.

Итак, в моем случае я закончил восстановление резервной копии на сервере DEV, который у меня работает с MSSQL 2008 R2, а затем выбрал: Tasks → Generate Scripts → выбрал объекты для script и Next → click on "Advanced" button → выберите "типы данных в script": схема и данные. Теперь запустите сгенерированный script против локальной db.

Ответ 7

Такая же проблема, спасибо за помощь. Моя локальная база данных - MS SQL 2014. Откройте "Студия управления SQL Server 2014"

  • Щелкните правой кнопкой мыши базу данных, перейдите в "Задачи", нажмите "Зайти в автономный режим"
  • Отсоедините базу данных
  • Прикрепить базу данных

Это работает для меня. После резервного копирования базы данных вы можете восстановить базу данных без ошибок. Спасибо.

Ответ 8

  • Вы можете сделать это вручную. это можно сделать с помощью сети точек и открытия двух видов соединений и пересылки данных из одной из них в другую. но это необходимо для создания одинаковых типов столбцов в локальном.
  • Вы можете проверить параметры импорта MS Access 2007