28

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

7 ответов7

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-файл

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.

3

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

2

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

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 ', SIZE = 14400KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) ВХОД В СИСТЕМУ (ИМЯ = N'xxxxxldf ', FILENAME = N'C:\ Программные файлы \Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\xxxxx_log.ldf ', РАЗМЕР = 18560 КБ, МАКС. РАЗМЕР = 2048 ГБ, FILEGROWTH = 10%) GO

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

    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!

1

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .