Как скопировать базу данных 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 разных резервных копии в случае, если один был поврежден.
Ответы
Ответ 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