Переміщення бази даних з 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 не може відновити резервні копії з новіших версій. Це за дизайном. Використовуйте функцію "Експорт", скрипт з таблиць та даних та встановіть ціль сценарію в SQL 2008.

4
"Намагаючись зрозуміти, чому хтось із розумом міг би мігнути назад". - У мене на виробництві працює сервер 2012 року, але в моїй розробниковій машині є лише 2008. Я хотів би локальну копію БД, щоб сприяти розробці, але я не хочу встановлювати 2012 рік на своїй машині розробки, як ніколи стільки вільного місця залишилось, і не хочеться витрачати години на його встановлення. (Тож я витрачаю години, намагаючись переміститись назад назад .... але це тільки я.)
Багатий

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 року. АФАІК Я правильно розумію.
GFK

Відповіді:


40

Клацніть правою кнопкою миші на базі даних у студії управління SQL 2012 року та виберіть "Завдання -> Створити сценарії". Клацніть повз екран вітання, виберіть "скрипт всієї бази даних та всіх об'єктів бази даних". На сторінці "Вкажіть, як слід зберігати сценарії", натисніть "Додатково". У розділі "Загальне" на сторінці спливаючих властивостей змініть "Типи даних до сценарію" з "Тільки схеми" на "Схема та дані" та змініть "Сценарій для версії сервера" з "2012" на "2008".

Тоді мені довелося знайти якийсь спосіб відредагувати початок цього масового файлу SQL, щоб налаштувати, як буде створюватися база даних - дивіться цей q: https://stackoverflow.com/questions/102829/best-free-text-editor -підтримка-більше-ніж-4gb-файлів

І нарешті, мені довелося знайти спосіб запустити сценарій SQL, який був занадто великим, щоб відкрити його в студії управління SQL - дивіться цей q: https://stackoverflow.com/questions/431913/how-do-you-run- a-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, який використовує об'ємну копію. Доступна версія GUI та командного рядка (Batch), і вона є відкритим кодом. Дивіться http://sqlazuremw.codeplex.com/ . У моєму випадку операція зайняла 16 хвилин.

На вдосконаленому екрані ви можете вибрати, що ваша мета - SQL Server, а не SQL Azure.


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: \ Програмні файли \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx.mdf', SIZE = 14400KB, MAXSIZE = UNLIMITED, FILEGROW, 1024 КБ) ЛОГІЙ ВКЛЮЧЕНО (NAME = N'xxxxxldf ', FILENAME = N'C: \ Програмні файли \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx_log.ldf', РАЗМЕР = 18560 КБ, MAXSIZE = 2048 ГБ, ФІЛЕГРАШТ = 1048 ГБ) %) 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!


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.