Відновлення резервної копії бази даних SQL Server у нижній версії


185

Як відновити файл резервного копіювання бази даних вищої версії на 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 ви можете експортувати db як 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

Ви можете використовувати функцію, що називається Експорт додатка рівня даних, який генерує.bacpac файл, що складається з схеми бази даних та даних.

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

Якщо ви хочете просто перенести схему бази даних, ви можете використовувати програму Extract Data-Tier для створення файлу та розгортання додатка рівня даних для розгортання створеної схеми бази даних.

Я спробував цей процес на різних версіях SQL Server від SQL 2014 до SQL 2012 та від SQL 2014 до SQL 2008R2 і добре працював.


8
Це відповідь, яка заслуговує на більшу увагу. Насправді це спрацьовує просто робота у більшості випадків. Якщо у вас там є користувачі SQL, які є сиротами, операції експорту не вдасться. Ви завжди можете видалити / додати ці біти вручну, щоб інакше переходити версії SQL.
Доктор Блю

3
Я щойно спробував це, щоб створити БД, створену на MSSQLEX2014 (V12) на моєму MSSQLEX2012 (V11). Я просто отримую помилку "Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider не вірно", і спосіб її змінити не можна.
Крейг

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 - я думаю, постачається з SQL Server 2005 і вище, я думаю. Завантажте останню версію тут . Передумови: sqlncli.msi/ sqlncli_x64.msi/ sqlncli_ia64.msi, SQLServer2005_XMO.msi/ SQLServer2005_XMO_x64.msi/ SQLServer2005_XMO_ia64.msi(завантажити тут ).


7
Генерація сценаріїв не є надійною для значних баз даних, уникайте, якщо це можливо.
Кріс

Обидва посилання внизу - 404.
Snađошƒаӽ

29

Ось мої 2 центи на різні варіанти завершення цього:

Інструменти сторонніх розробників : Напевно, найпростіший спосіб виконати роботу - це створити порожню базу даних на нижчій версії, а потім використати сторонні інструменти для читання резервної копії та синхронізації нової щойно створеної бази даних із резервною копією.

Червоні ворота - одна з найпопулярніших, але є багато інших, таких як ApexSQL Diff , ApexSQL Data Diff , Adept SQL , Idera …. Все це - преміальні інструменти, але ви можете виконати роботу в пробному режимі;)

Генерування сценаріїв : як уже згадувалося, ви завжди можете структурувати сценарії та дані, використовуючи SSMS, але вам потрібно враховувати порядок виконання. За замовчуванням об'єкти сценарії не впорядковані правильно, і вам доведеться подбати про залежності. Це може бути проблемою, якщо база даних велика і має багато об’єктів.

Майстер імпорту та експорту : це не ідеальне рішення, оскільки воно не відновить усі об'єкти, а лише таблиці даних, але ви можете розглянути його для швидкого та брудного виправлення, коли це потрібно.


1
Клон Red Gate Sql не підтримує клонування між різними версіями 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 "Цільовий сервер не може бути екземпляром SQL Server 2005 або новішої версії Express". social.msdn.microsoft.com/Forums/en-US/sqlgetstarted/thread/…
Шнайдер

2
Також неможливо скопіювати базу даних із SQL Server 2012 на SQL Server 2008 таким чином.
Мерехтіння

1
Копіювати базу даних - це операція "Від’єднання /
додавання"

1
Дякую за цю підказку! Це мені дуже допомогло. Я скопіював дані з SQL 2008 R2 в SQL 2008.
dns_nx

8

Ви можете спробувати це.

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

6

Перейдіть до Завдання-> Створити сценарії ...

У розділі Додатково в розділі "Типи даних для сценарію" виберіть "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.