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

Сообщение 1853, уровень 16, состояние 1, строка 1
Не удается найти логический файл базы данных "CSOdev_Log". Укажите полный путь к файлу.
Сообщение 3167, уровень 16, состояние 1, строка 1
ВОССТАНОВЛЕНИЕ не удалось запустить базу данных "CSODev".
Сообщение 3013, Уровень 16, состояние 1, строка 1
RESTORE DATABASE аварийно завершает работу.

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


person Corey Blair    schedule 29.10.2012    source источник
comment
Возможно, попробуйте поместить свои файлы в другое место, кроме папки вашего профиля. Что произойдет, если вы переместите файлы данных / журналов, например, в C: \ Data \?   -  person Aaron Bertrand    schedule 29.10.2012
comment
Я пробовал это сделать, но по-прежнему получаю то же сообщение об ошибке.   -  person Corey Blair    schedule 29.10.2012
comment
Мне удалось это сделать успешно - я создал базу данных на обычном экземпляре, сделал резервную копию и просто восстановил ее на экземпляре localdb: i.stack.imgur.com/rOOhq.png Я не уверен, какой информации не хватает в вашем вопросе, но очевидно, что вы делаете что-то по-другому. Я не знаю, что спросить, чтобы это выяснить. Это происходит с какой-либо базой данных или только с этой конкретной базой данных?   -  person Aaron Bertrand    schedule 29.10.2012
comment
Вы уверены, что логическое имя вашего файла LOG - CSOdev_Log? Можете ли вы запустить restore filelistonly from disk = 'C:\MyBckDir\CSODev.bak, чтобы просмотреть список файлов логической базы данных в файле резервной копии?   -  person Krzysztof Kozielczyk    schedule 29.10.2012
comment
Запуск RESTORE FILELISTONLY FROM DISK = 'C: \ MyBckDir \ CSODev.bak' показывает ..._ 1_   -  person Corey Blair    schedule 29.10.2012
comment
Хм, логичное имя выглядит нормально. Что-нибудь интересное в файле SQL error.log? Он должен быть в %LOCALAPPDATA%\Microsoft\Microsoft SQL Server Local DB\Instances\<instance-name>, где <instance-name>, скорее всего, будет v11.0.   -  person Krzysztof Kozielczyk    schedule 29.10.2012


Ответы (9)


Существует известное ограничение (по сути, настоящая ошибка) для localDB. Он не сможет выполнить любое ВОССТАНОВЛЕНИЕ с ПЕРЕМЕЩЕНИЕМ, если файлы базы данных находятся в разных папках.

Приходится восстанавливать в исходные папки (без ПЕРЕМЕЩЕНИЯ). Используйте инструмент cmd, например SUBST, если вам нужно подделать диск: / путь.

person BernardV    schedule 27.04.2014

У меня такая же проблема. В конечном итоге сработало следующее:

  1. Попытка восстановить базу данных (получение ошибки в ОП)
  2. Отсоединение базы данных
  3. Повторное подключение базы данных

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

person MEMark    schedule 13.09.2013

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

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

Надеюсь, это сработает. Первоначальную идею см. здесь.

Изменить: добавлено исправление команды create Джейсоном Брэди.

person ktr    schedule 11.08.2013
comment
Это сработало для меня. Хотя синтаксис Create Database был неправильным. Буквально это 2 дополнительных символа, и Stack Overflow сообщает мне, что я не могу вносить изменения, если их не меньше 6. Это должно быть Create Database <dbname> On (Filename = '<Mdf file location'), (Filename = '<Ldf Filename'>) For Attach - person Jason; 22.08.2014

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

person Srb1313711    schedule 04.07.2013
comment
Я думаю, что для некоторых из нас лучше всего подходит создание сценариев для базы данных. Я думаю, что моя проблема в том, что экземпляры SQL Server разные (например, 2005 и 2008). - person vbullinger; 26.04.2015

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

  1. Щелкните правой кнопкой мыши базу данных, перейдите в «Задачи», нажмите «Перевести в автономный режим».
  2. Отключить базу данных
  3. Прикрепите базу данных

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

person Stephen    schedule 27.04.2016

У меня такая же проблема. Попробуйте запустить 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, а затем выбрал: Задачи -> Создать сценарии -> выбрать объекты для сценария и Далее -> нажать кнопку «Дополнительно» -> выбрать » типы данных для скрипта »: Схема и данные. Теперь запустите сгенерированный скрипт для локальной базы данных.

person cleftheris    schedule 25.01.2013

Попробуйте эти скрипты (пример с adventureworks2012, который я лично тестировал):

RESTORE FILELISTONLY
FROM DISK = 'c:\temp\adv2012.bak'

Это вызовет имена файлов как:

AdventureWorks2012      C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQL2012RTM\MSSQL\DATA\AdventureWorks2012.mdf
AdventureWorks2012_log  C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQL2012RTM\MSSQL\DATA\AdventureWorks2012_log.ldf

Используйте эти имена файлов, чтобы создать окончательный сценарий следующим образом:

RESTORE DATABASE AdventureWorks2012
FROM DISK = 'C:\temp\adv2012.bak'

WITH MOVE 'AdventureWorks2012' TO 'C:\cnom_WS\Local-Databases\AdventureWorks\AdventureWorks2012.mdf',
MOVE 'AdventureWorks2012_log' TO 'C:\cnom_WS\Local-Databases\AdventureWorks\AdventureWorks2012_log.ldf',
REPLACE;

Кстати, я запускаю их через Visual Studio (обозреватель объектов SQL Server), но я сильно подозреваю, что это можно легко запустить в SSMS ;-)

person cnom    schedule 15.02.2019

  1. Вы можете сделать это вручную. это можно сделать, используя точечную сеть и открывая два типа соединений и пересылая данные от одного из них к другому. но для этого нужно создать такие же типы столбцов в локальном.
  2. Вы можете проверить параметры импорта MS Access 2007
person Omar Merivani    schedule 13.11.2013

person    schedule
comment
Это решение сработало и у меня. В качестве примечания: сначала убедитесь, что вы создали пустые базы данных, а затем выполните приведенный выше запрос с настройкой для вашего надлежащего случая в LocalDB, чтобы это сработало. Схемы из разных версий работают как обратно Совместимые (2012 - ›2010) - person Truesky; 20.09.2017