Переместить базу данных из SQL Server 2012 в 2008

107081
Rich

У меня есть база данных на экземпляре SQL Sever 2012, которую я хотел бы скопировать на сервер 2008. Сервер 2008 года не может восстановить резервные копии, созданные сервером 2012 года (я пробовал).

В 2012 году я не могу найти никаких вариантов для создания резервной копии, совместимой с 2008 годом. Я что-то пропустил?

Есть ли простой способ экспортировать схему и данные в независимый от версии формат, который я могу затем импортировать в 2008?

База данных не использует какие-либо особенности 2012 года. Он содержит таблицы, данные и хранимые процедуры.

Вот что я пробовал до сих пор

Я попытался « Задачи» → « Создать сценарии» на сервере 2012 года и смог сгенерировать схему (включая хранимые процедуры) в виде сценария SQL. Это не включает никаких данных, хотя.

После создания этой схемы на моем компьютере 2008 года я смог открыть мастер «Экспорт данных» на компьютере 2012 года, и после настройки 2012 года в качестве исходного компьютера и 2008 года в качестве целевого компьютера мне был представлен список таблиц, которые я мог бы скопировать. Я выбрал все свои таблицы (более 300) и щелкнул по мастеру. К сожалению, он тратит целые годы на генерацию своих сценариев, а затем терпит неудачу с такими ошибками, как «Ошибка вставки в столбец только для чтения« FOO_ID »».

Я также попробовал «Мастер копирования базы данных», который утверждал, что может копировать «с 2000 года или позже до 2005 года или позже». Она имеет два режима:

  1. «Отсоединить и присоединить», что привело к ошибке:

    Message: Index was outside the bounds of the array. StackTrace: at Microsoft.SqlServer.Management.Smo.PropertyBag.SetValue(Int32 index, Object value) ... at Microsoft.SqlServer.Management.Smo.DataFile.get_FileName() 
  2. Метод объекта управления SQL, который завершился ошибкой

    Не удается прочитать свойство IsFileStream. Это свойство недоступно в SQL Server 7.0. "

28
Вы можете экспортировать напрямую? Я не знаю, насколько велика ваша БД, но это то, что я бы сделал, работая с небольшими базами данных. Dave 11 лет назад 0
Никакая более старая версия SQL Server не может восстанавливать резервные копии из более новых версий. Это по замыслу. Используйте функцию экспорта, составьте сценарий для таблиц и данных и установите для цели сценария значение SQL 2008. 11 лет назад 1
@RandolphWest - это работает, только если у вас есть возможность экспортировать базу данных. Если вы скажете, что выполнили экспорт и не изменили версию скрипта, а затем удалили базу данных, вам нужно будет импортировать курс обратно в ту же версию, а затем экспортировать ее правильным способом. Попытка выяснить, почему любой здравомыслящий человек мигрирует назад. Ramhound 11 лет назад 0
«Попытка выяснить, почему любой здравомыслящий человек мигрирует назад». - У меня есть рабочий сервер под управлением 2012 года, но на моей машине разработчика только 2008 год. Я бы хотел, чтобы локальная копия БД помогла в разработке, но я не хочу устанавливать 2012 год на мою машину разработки, так как у меня нет так много свободного места осталось, и я не хочу тратить часы на его установку. (Так что я трачу часы, пытаясь мигрировать в обратном направлении ... но это только я.) Rich 11 лет назад 4
@DaveRook - что вы подразумеваете под "экспорт прямой"? База данных составляет около 1 ГБ. Rich 11 лет назад 0
@RandolphWest, что вы подразумеваете под "функцией экспорта"? Rich 11 лет назад 0
Вы почти там. В разделе «Экспорт», в который вы вошли, есть возможность включить данные и схему. 11 лет назад 1
@RandolphWest - спасибо, что сделал это. Опция довольно хорошо спрятана. Смотрите мой ответ ниже. Если вам нужен кредит, скопируйте мой ответ, а я приму ваш и удалю мой. Rich 11 лет назад 0
Просто хотел добавить для Ramhound: я для одного обновил SQL 2008 R2 до SQL 2012 в своей среде Dev, а затем, после того как я изменил много схемы и данных в моем обновленном экземпляре, понял, что VS 2010 не может сравнивать схему или данные с SQL 2012. SSDT для VS 2010 и VS 2012 могут сравнивать схему с SQL 2012, но не совместимы с исходными проектами баз данных VS 2010 и не могут сравнивать данные. Короче говоря, я бы предпочел вернуться к SQL 2008 R2 и подождать, пока в компании не будет принято решение о переходе на 2012 год. Но я бы хотел сохранить свою новую схему / данные. AFAIK Я в своем уме. GFK 11 лет назад 1
Ответ Рича великолепен, также не забудьте создать базу данных на сервере 2008 перед запуском сценария, в некоторых случаях база данных не будет создана. Boduzapho 9 лет назад 0

7 ответов на вопрос

40
Rich

Щелкните правой кнопкой мыши базу данных в SQL Management Studio 2012 и выберите «Задачи -> Создать сценарии». Нажмите мимо экрана приветствия, выберите «Сценарий всей базы данных и всех объектов базы данных». На странице «указать, как должны быть сохранены скрипты», нажмите «Дополнительно». В разделе «Общие» на странице свойств всплывающего окна измените «Типы данных в сценарии» с «Только схема» на «Схема и данные» и измените «Сценарий для версии сервера» с «2012» на «2008».

Затем мне нужно было найти способ отредактировать начало этого массивного файла SQL, чтобы настроить способ создания базы данных - см. Этот вопрос: https://stackoverflow.com/questions/102829/best-free-text-editor Поддержка-больше, чем 4gb-файлы

И, наконец, мне пришлось найти какой-то способ запуска сценария SQL, который был слишком велик для его открытия в SQL Management Studio - см. Этот q: https://stackoverflow.com/questions/431913/how-do-you-run- а-300MB-MS-SQL-SQL-файл

что ты подправил в начале файла? JonoRR 10 лет назад 0
Я не могу вспомнить точно, извините. Я думаю, что приложение конкретное. Возможно имя базы данных или что-то в этом роде. Думаю, я бы добавил это здесь, если бы оно было актуально для людей с такой же проблемой. Rich 10 лет назад 1
@JonoRR Скорее всего, вы захотите отредактировать оператор CREATE DATABASE и задать пути к файлам данных в соответствии с тем, что имеет смысл на конечном сервере. Igby Largeman 10 лет назад 3
12
lvmeijer

For SQL migrations, use the free and open source SQL Database Migration Wizard.

I had a 5GB database with couple ~10 million records and tried the route via Generate Script and than ran it with sqlcmd.exe. First of all, the generated script was not always working correct. Secondly, sqlcmd.exe can fail on large files too, complaining about available memory. osql.exe works, but just takes ages (and has the same command line arguments).

Then I came across a wonderful tool for migrating SQL Server to SQL Azure databases. This works for SQL Server to SQL Server as well, for example if you'd like to migrate a SQL 2012 database to 2008 R2. It uses bcp.exe, which uses bulk copy. There is a GUI and command-line (Batch) version available and it's open source. See http://sqlazuremw.codeplex.com/. In my case, the operation took 16 minutes.

In an advanced screen you can select that your target is SQL Server, not SQL Azure.

Где вы устанавливаете 2008 R2 в этом мастере? JonoRR 10 лет назад 1
Замечательный совет, я восстановил базу данных с Express 2012 до Web 2008. Очень просто. rkawano 9 лет назад 0
Можно подтвердить, что работает как рекламируется. Сделал 2014-> 2012, междоменные, локальные SQL-серверы. Как этот инструмент избегал моих поисков так долго! Удивительно даже для не лазурного использования. Gomibushi 8 лет назад 0
3
Fernando

Я новичок в SQL, но мне удалось перейти с 2012 на 2008 год. Для этого я использовал утилиту импорта и экспорта SQL. Я выбрал сервер SQL 2012 и базу данных, которую я хочу перенести, и, наконец, сервер 2008 года и создал новую базу данных в качестве базы данных назначения. Это сработало.

2
Paul

Попробуйте инструменты APEXSQL . У них есть инструмент, который будет сценарий базы данных и сценарий данных также.

«от $ 299» - есть ли бесплатная альтернатива? Rich 11 лет назад 0
1
Jaimee Jose

После создания этой схемы на моем компьютере 2008 года я смог открыть мастер «Экспорт данных» на компьютере 2012 года, и после настройки 2012 года в качестве исходного компьютера и 2008 года в качестве целевого компьютера мне был представлен список таблиц, которые я мог бы скопировать. Я выбрал все свои таблицы (более 300) и щелкнул по мастеру. К сожалению, он тратит целые годы на генерацию своих скриптов, а затем терпит неудачу с такими ошибками, как «Ошибка вставки в столбец только для чтения« FOO_ID »».

Проблема в том, что он не может вставить столбцы идентификаторов, поэтому:

  1. Выберите все таблицы, отметив их
  2. Выберите все таблицы (способ сделать это, нажмите на первую и удерживайте Shift и нажмите на последнюю таблицу)
  3. Нажмите «Редактировать сопоставления» - вы можете увидеть это прямо над следующей кнопкой и рядом с предварительным просмотром.
  4. Вы получите окно, отметьте «Включить идентификационную вставку», а затем нажмите «Далее» и продолжайте, это должно работать. Это сработало для меня.
1
ladygargar

I followed Rich's solution https://superuser.com/a/469597/312310 above and it worked great! Thanks - I can't vote up yet in here!

The extra steps I had to do to get this to work are:

  • Change the logical file names and ensure the path is correct. I also had to change the generated log name, else it tried to overwrite the mdf file with the log and then threw this error https://stackoverflow.com/questions/7534664/sql-server-script-error-database-is-already-in-use

    CREATE DATABASE [xxxxx] ON PRIMARY ( NAME = xxxxx', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\xxxxx.mdf', SIZE = 14400KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ) LOG ON ( NAME = N'xxxxxldf', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\xxxxx_log.ldf', SIZE = 18560KB, MAXSIZE = 2048GB, FILEGROWTH = 10%) GO

  • I had to comment out the generated section and add the user permissions manually afterwards

    USE [xxxxx] GO /****** Object: User [xxxxx] Script Date: 30/11/2014 12:44:07 ******/ CREATE USER [xxxxx] FOR LOGIN [xxxxx] WITH DEFAULT_SCHEMA=[dbo] GO sys.sp_addrolemember @rolename = N'db_owner', @membername = N'Umbraco' GO sys.sp_addrolemember @rolename = N'db_datareader', @membername = N'Umbraco' GO sys.sp_addrolemember @rolename = N'db_datawriter', @membername = N'Umbraco' GO 

Ran it up, and lo and behold I can now restore my new Umbraco 7.1.2 database to my web server that only has SQL Server 2008 R2!

0
Endi Zhupani

Взгляните на xSQL Schema Compare и xSQL Data Compare . Вы можете сначала синхронизировать схему со схемой сравнения, а затем скопировать данные.

Отказ от ответственности: я связан с xSQL.