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

29

У меня есть база данных на экземпляре 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. "

Богатый
источник
Вы можете экспортировать напрямую? Я не знаю, насколько велика ваша БД, но это то, что я бы сделал, работая с небольшими базами данных.
Дейв
2
Никакая более старая версия SQL Server не может восстанавливать резервные копии из более новых версий. Это по замыслу. Используйте функцию экспорта,
4
«Попытка выяснить, почему любой здравомыслящий человек мигрирует назад». - У меня есть рабочий сервер под управлением 2012 года, но на моей машине разработчика только 2008 год. Я бы хотел, чтобы локальная копия БД помогла в разработке, но я не хочу устанавливать 2012 год на мою машину разработки, поскольку у меня нет так много свободного места осталось, и я не хочу тратить часы на его установку. (Так что я трачу часы, пытаясь мигрировать в обратном направлении ... но это только я.)
Rich
1
Вы почти там. В разделе «Экспорт», в который вы вошли, есть возможность включить данные и схему.
1
Просто хотел добавить для 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

Ответы:

40

Щелкните правой кнопкой мыши базу данных в 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
1
Я не могу вспомнить точно, извините. Я думаю, что приложение конкретное. Возможно имя базы данных или что-то в этом роде. Я думаю, что я добавил бы это здесь, если бы это было актуально для людей с той же проблемой.
Богатый
3
@JonoRR Скорее всего, вы захотите отредактировать оператор CREATE DATABASE и задать пути к файлам данных в соответствии с тем, что имеет смысл на конечном сервере.
Игби Большой человек
12

Для миграции SQL используйте мастер миграции базы данных SQL с открытым исходным кодом.

У меня была база данных 5 ГБ с парой ~ 10 миллионов записей, и я попробовал маршрут через Generate Script, а затем запустил его с помощью sqlcmd.exe. Прежде всего, сгенерированный скрипт не всегда работал правильно. Во-вторых, sqlcmd.exe также может не работать с большими файлами, жалуясь на доступную память. osql.exe работает, но требует времени (и имеет те же аргументы командной строки).

Затем я наткнулся на замечательный инструмент для миграции SQL Server на базы данных SQL Azure. Это работает и для SQL Server в SQL Server, например, если вы хотите перенести базу данных SQL 2012 в 2008 R2. Он использует bcp.exe, который использует массовое копирование. Доступна версия с графическим интерфейсом и командной строкой (Batch) с открытым исходным кодом. Смотрите http://sqlazuremw.codeplex.com/ . В моем случае операция заняла 16 минут.

На расширенном экране вы можете выбрать, что ваша цель - SQL Server, а не SQL Azure.

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

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

Фернандо
источник
2

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

Павел
источник
«от $ 299» - есть ли бесплатная альтернатива?
Богатое
1

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

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

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

Я следовал решению Рича https://superuser.com/a/469597/312310 выше, и оно отлично работало! Спасибо - я не могу голосовать еще здесь!

Дополнительные шаги, которые я должен был сделать, чтобы заставить это работать:

  • Измените логические имена файлов и убедитесь, что путь указан правильно. Мне также пришлось изменить сгенерированное имя журнала, иначе он попытался перезаписать файл mdf с журналом, а затем выдал эту ошибку https://stackoverflow.com/questions/7534664/sql-server-script-error-database-is- Уже в использовании

    СОЗДАТЬ БАЗУ ДАННЫХ [xxxxx] НА ПЕРВИЧНОМ (ИМЯ = xxxxx ', FILENAME = N'C: \ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx.mdf', РАЗМЕР = 14400KB, MAXSIZE = НЕОГРАНИЧЕННЫЙ, FILEGROWTH = 1024KB) LOG ON (ИМЯ = N'xxxxxldf ', FILENAME = N'C: \ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx_log.ldf', РАЗМЕР = 18560KB, MAXSIZE = 2048 ГБ, FILEGROWTH = 10 %) ИДТИ

  • Мне пришлось закомментировать сгенерированный раздел и вручную добавить разрешения пользователя

    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
    

Запустил его, и вот, теперь я могу восстановить свою новую базу данных Umbraco 7.1.2 на своем веб-сервере, на котором установлен только SQL Server 2008 R2!

ladygargar
источник
0

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

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

Энди Жупани
источник