Восстановление резервной копии базы данных SQL Server на более низкой версии


185

Как восстановить файл резервной копии базы данных SQL Server более высокой версии на SQL Server более низкой версии?

Используя SQL Server 2008 R2 (10.50.1600) , я сделал файл резервной копии, и теперь я хочу восстановить его на SQL Server 2008 моего живого сервера (10.00.1600) .

Когда я пытался восстановить резервную копию на SQL Server 2008, он выдает ошибку, Restore Failedпотому что:

Резервное копирование базы данных выполнялось на сервере с версией 10.50.1600. Эта версия несовместима с этим сервером, на котором установлена ​​версия 10.00.1600.

Как восстановить файл резервной копии на этом сервере?


2
Вы не можете сделать это - это просто невозможно. SQL Server не позволяет «понижать» базу данных с более высокой версии до более низкой.
marc_s

18
Microsoft знает все о SQL-сервере (так как они его создали), но перемещение данных между двумя версиями невозможно. Я просто не понимаю, почему какой-то режим совместимости недоступен в экспорте. Как тяжело это может быть?
dvdmn

1
@dvdmn так же сложно, как и любой эпизод Top Gear, где говорят, что - разные типы, разные операторы, разные макеты блоков. Перемещение данных между базами данных очень просто, независимо от версии. Понижение, хотя нет .
Панагиотис Канавос

2
@PanagiotisKanavos Я не согласен, в MySQL вы можете экспортировать БД в виде команд SQL, и вы можете восстановить его на любой версии MySQL (вниз или вверх). Да, вы также можете экспортировать sql db как скрипт, но восстановить его нелегко, если у вас есть некоторые хранимые функции / процедуры, которые зависят друг от друга. Это в принципе не полезно / решение.
dvdmn

3
@dvdmn экспорт сценариев базы данных полностью отличается от резервного копирования. Я понимаю, что некоторые продукты не предлагают функции резервного копирования / восстановления или, что еще хуже, смешивают две концепции. Это часто происходит по историческим причинам: в прошлом не хватало резервных копий, некоторые продукты назывались экспортом / скриптингом под этим именем. Теперь, когда они это делают , они должны продолжать решать конфликты терминов, говоря о физических и логических резервных копиях, а затем смешиваться, когда они говорят о сценариях
Panagiotis Kanavos

Ответы:


78

Нет, невозможно понизить версию базы данных. 10.50.1600 - это версия SQL Server 2008 R2 . Нет абсолютно никакого способа восстановить или присоединить эту базу данных к экземпляру SQL Server 2008, на котором вы пытаетесь восстановить (10.00.1600 - это SQL Server 2008). Ваши единственные варианты:

  • обновить этот экземпляр до SQL Server 2008 R2 или
  • восстановите резервную копию, имеющуюся в экземпляре SQL Server 2008 R2, экспортируйте все данные и импортируйте их в базу данных SQL Server 2008.

Я не могу обновить клиентский сервер из-за ограничений разрешений. и размер моей базы данных превышает 2,5 ГБ, поэтому я не смог создать сценарий данных из-за ошибки исключения памяти.

9
@Gaurav Не создавайте сценарии для данных - вместо этого создавайте сценарии для всей базы данных (таблиц, процедур, триггеров, ограничений и т. Д.) Без данных, создавайте новую базу данных, затем щелкните правой кнопкой мыши исходную базу данных, перейдите в «Инструменты», затем «Экспорт данных» для переноса содержимого таблиц в вашу базу данных.
Джим Маклеод

17
Я очень подозрительно отношусь к обычному ответу «нет никакого возможного пути» - это просто означает, что вы еще не нашли путь. Может быть много причин, почему вы хотите сделать это, поэтому это не полезный ответ.
Джей Имерман

6
Я не согласен, @Jay, иногда «ты не можешь» является идеальным ответом, хотя более полезно предлагать обходные пути там, где это возможно.
Рассел Фокс

1
@Zhang, если у вас есть вопросы, задавайте их как вопросы, а не как комментарии.
Ремус Русану

83

Вы можете использовать функциональность, которая называется Export Data-Tier Application, которая генерирует .bacpacфайл, состоящий из схемы базы данных и данных.

На конечном сервере вы можете использовать опцию Импортировать приложение уровня данных, которая создает и заполняет новую базу данных из предварительно созданного .bacpacфайла.

Если вы хотите просто передать схему базы данных, вы можете использовать Извлечь приложение уровня данных для создания файла и Развернуть приложение уровня данных для развертывания созданной схемы базы данных.

Я пробовал этот процесс на разных версиях SQL Server от SQL 2014 до SQL 2012 и от SQL 2014 до SQL 2008R2 и работал хорошо.


8
Это ответ, который заслуживает большего внимания. Это на самом деле работает просто для большинства случаев. Однако если у вас есть пользователи SQL, которые осиротели, операции экспорта завершатся неудачно. Вы всегда можете удалить / добавить эти биты вручную, чтобы превзойти версии SQL.
Доктор Блю

3
Я только что попробовал это сделать, чтобы создать базу данных, созданную в MSSQLEX2014 (V12) на моем MSSQLEX2012 (V11). Я просто получаю сообщение об ошибке «Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider is not valid» без возможности изменить его.
Крейг

5
Импорт из SQL Server 2014 в 2012 с использованием .bakpac работает, но требует правильной версии SSMS. Например, я использую SSMS 2016 CTP3, и он работал безупречно. У меня не работает SSMS 2012. Я не тестировал SSMS 2014.
Грег Гам

1
Кто-нибудь знает, можно ли написать эту процедуру в T-SQL? ОБНОВЛЕНИЕ (отвечая самому себе после небольшого поиска): вы можете автоматизировать это с помощью sqlpackage.exeкомандной строки. Google для больше.
Алекс

1
Это единственное решение, которое помогло мне при переходе с достаточно большого / сложного SQL2017 на SQL2016. Производительность тоже очень хорошая.
Кит

35

Не обязательно будет работать

Буду работать

  • Генерация скриптов - Задачи -> Генерация скриптов . Убедитесь, что вы задали нужную целевую версию SQL Server на странице « Задать параметры сценариев -> Дополнительно» . Вы также можете выбрать, копировать схему, данные или и то, и другое. Обратите внимание, что в сгенерированном сценарии вам может потребоваться изменить папку DATA для файлов mdf / ldf при переходе с неэкспресса на экспресс или наоборот.

  • Microsoft SQL Server Publishing Services - я думаю, поставляется с SQL Server 2005 и выше. Загрузите последнюю версию здесь . Пререквизиты: sqlncli.msi/ sqlncli_x64.msi/ sqlncli_ia64.msi, SQLServer2005_XMO.msi/ SQLServer2005_XMO_x64.msi/ SQLServer2005_XMO_ia64.msi(скачать здесь ).


7
Генерация скриптов ненадежна для существенных баз данных, избегайте, если это вообще возможно.
Крис

Обе ссылки внизу - 404.
Снаđошƒаӽ

29

Вот мои 2 цента на разные варианты для этого:

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

Red gate - один из самых популярных, но есть много других, таких как ApexSQL Diff , ApexSQL Data Diff , Adept SQL , Idera …. Все это инструменты премиум-класса, но вы можете выполнить работу в пробном режиме;)

Создание сценариев : как уже упоминалось, вы всегда можете создать структуру сценариев и данные, используя SSMS, но вы должны принять во внимание порядок выполнения. По умолчанию объектные сценарии не упорядочены правильно, и вам придется позаботиться о зависимостях. Это может быть проблемой, если база данных большая и содержит много объектов.

Мастер импорта и экспорта : это не идеальное решение, так как он восстанавливает не все объекты, а только таблицы данных, но вы можете рассмотреть его для быстрого и грязного исправления, когда это необходимо.


1
Red Gate Sql Clone не поддерживает клонирование между различными версиями SQL-сервера, сообщая об одной и той же ошибке, которую я получаю при попытке сделать это вручную.
DarkDeny

29

Вы не можете восстановить базу данных (или присоединить), созданную в верхней версии, в более низкую версию. Единственный способ - создать сценарий для всех объектов и использовать сценарий для создания базы данных.

введите описание изображения здесь

выберите «Схема и данные» - если вы хотите перенести обе вещи в файл сценария резервного копирования,
выберите « Только схема» - если нужна только схема.

введите описание изображения здесь

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


16

Еще один способ сделать это - использовать функцию «Копировать базу данных»:

Найдите правой кнопкой мыши исходную базу данных> «Задачи»> «Копировать базу данных».

Вы можете скопировать базу данных в более низкую версию экземпляра SQL Server. Это работало для меня от SQL Server 2008 R2 (SP1) - 10.50.2789.0 до Microsoft SQL Server 2008 (SP2) - 10.0.3798.0


3
Обратите внимание, что это не будет работать, если целью является сервер SQL Express. «Сервер назначения не может быть экземпляром SQL Server 2005 или более поздней версии Express». social.msdn.microsoft.com/Forums/en-US/sqlgetstarted/thread/…
Охад Шнайдер

2
Также невозможно скопировать базу данных из SQL Server 2012 в SQL Server 2008 таким образом.
Мерцает

1
Копирование базы данных - это операция «Отсоединение / Присоединение»
Panagiotis Kanavos

1
Спасибо за этот совет! Это мне очень помогло. Я скопировал данные из SQL 2008 R2 в SQL 2008.
dns_nx

8

Вы можете попробовать это.

  1. Создайте базу данных на SQL Server 2008.
  2. С помощью функции импорта данных можно импортировать данные из SQL Server R2 (или любой более поздней версии).
  3. используйте "RedGate SQLCompare" для синхронизации скрипта.

6

Перейдите в Task-> Generate Scripts ...

В разделе « Дополнительно» в разделе «Типы данных для сценария» выберите "Schema and data"и попробуйте запустить этот сценарий в более низкой версии.


5
Это очень хорошее решение, но очень плохо работает с большими базами данных.
veljasije

5

Это не красиво, но я так и сделал, если у вас установлена ​​эта опция при установке SQL 2008 R2.

1) Щелкните правой кнопкой мыши базу данных в SQL Server 2008 R2 «Задачи». «Создание сценариев» в мастере, выберите всю базу данных и объекты на первом этапе. На шаге «Настройка параметров сценариев» вы должны увидеть кнопку «Дополнительно», выберите ее и убедитесь, что вы выбрали «Сценарий для версии сервера» = SQL Server 2008 «не версия R2. Это важный шаг, поскольку« импорт данных » сам по себе не несет с собой все первичные ключи, константы и любые другие объекты, такие как хранимые процедуры. "

2) Запустите сценарий SQL, созданный на новом экземпляре установки или базы данных SQL Express или SQL Server 2008, используя окно запроса, или откройте сохраненный сценарий .sql и выполните его; вы увидите новую базу данных.

3) Теперь щелкните правой кнопкой мыши новую базу данных и выберите «Задачи» .. «Импортировать данные ...», выберите источник в качестве базы данных R2 и пункт назначения в качестве новой базы данных. «Скопировать данные из одной или нескольких таблиц или представлений», установите верхний флажок, чтобы выбрать все таблицы, а затем на следующем шаге запустите пакет, и у вас должно быть все в более старой версии. Это должно работать и для возврата к версии 2005 года. Надеюсь, это поможет кому-то.


Привет @ Motogeek, у меня та же проблема, но у меня есть R2 на рабочем сервере и 2008 на локальном, в этом случае я не могу использовать данные импорта и экспорта. что было бы идеальным решением для этого?
Аббас

2

Вы можете использовать BCP для небольших столов.

Команда BCP OUT: -

BCP "SELECT *  FROM [Dinesh].[dbo].[Invoices]" QUERYOUT C:\av\Invoices1.txt -S MC0XENTC -T -c -r c:\error.csv

Команда BCP IN: - Создать структуру таблицы для Invoicescopy1.

BCP [Dinesh].[dbo].[Invoicescopy1] IN C:\av\Invoices.txt -S MC0XENTC -T -c

0

Я ценю, что это старый пост, но людям может быть полезно знать, что мастер миграции Azure (доступный в Codeplex - не может ссылаться на него, поскольку Codeplex в данный момент набираю это) будет делать это легко.


Этот инструмент был заменен помощником по миграции данных SQL Server. См: stackoverflow.com/questions/46517060/...
ahwm

0

Вам нужно будет использовать мастера импорта / экспорта в SSMS для переноса всего

С помощью резервного копирования / восстановления или отсоединения / подключения невозможно выполнить «даунгрейд». Поэтому вам нужно сделать следующее:

  1. Сделайте резервную копию базы данных с сервера, на котором установлена ​​новая версия SSMS / SQL.
  2. Импортируйте данные из сгенерированного файла .bak, развернув меню «Задачи» (после щелчка правой кнопкой мыши целевой базы данных) и выбрав опцию «Импорт данных».

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.