Сумісність SQL Server 2012 для резервного копіювання з 2008 роком


14

У мене є декілька клієнтів із SQL Server 2008, і ось що я маю тут і на своєму сервері. Я використовую файли резервного копіювання, щоб пересилати бази даних назад і назад між клієнтами та в моєму офісі.

Я читав, що при створенні резервної копії з SQL Server 2012 немає можливості відновити її на екземплярі 2008 року. Я припускав, що рівень сумісності вирішить цю проблему, але це не так. Тому я в занепокоєнні щодо того, як оновити. Крім оновлення всіх моїх клієнтів відразу, що неможливо, я не можу придумати жодного чистого способу зробити це.

У мене є потреба відправити базу даних клієнту, а також отримати базу даних від клієнта. Це моя перша версія оновлення версії на SQL Server, тому я новачок у цій проблемі. Будь-які ідеї, як діяти далі?


4
На вашому сервері можуть бути встановлені один екземпляр SQL Server 2008 та один екземпляр SQL Server 2012 одночасно з різними іменами екземплярів. Можливо, це вирішило б ваші проблеми з клієнтами в різних версіях?
Мікаель Ерікссон

Схожий питання на SO: stackoverflow.com/q/1744808/95710
DForck42

Відповіді:


16

Тут задіяні дві речі: номер версії файлу та рівень сумісності. Коли ви додаєте базу даних до нової основної версії (наприклад, з 2008 по 2008R2 або 2008R2 до 2012), версія бази даних буде постійно змінена, і ви не можете знову приєднати цю базу до старої версії.

Рівень сумісності призначений для розбору застарілого T-SQL старого школи, який працював у старих версіях SQL Server. Це не змінює спосіб зберігання даних на диску.

Щоб надати базу даних комусь із старішої версії SQL Server, вам потрібно буде експортувати дані та імпортувати їх до іншої бази даних. Для цього корисні такі засоби, як порівняння даних Red Gate.


Так, у мене були такі самі проблеми раніше. Закінчилося виведення сценаріїв з усієї бази даних, а потім вилучення всіх даних. У той день на допомогу прийшли SQL для порівняння і порівняння даних Red Gate.
DForck42

@ DForck42: У моєму випадку БД була надто великою для скриптів із даними, тому я закінчив розробляти схему, потім переміщував дані bcp.
ivan_pozdeev

@ivan_pozdeev, ви кажете, що експортували за допомогою SQL Server 2012 BCP та імпортували за допомогою BCP SQL Server 2008R2? Будьте в курсі, що формати файлів сумісні, дякую.
Кріс

2
@Chris msdn.microsoft.com/en-us/library/ms162802.aspx "У програмі SQL Server 2014 утиліта bcp підтримує нативні файли даних, сумісні з SQL Server 2000, SQL Server 2005, SQL Server 2008, SQL Server 2008 R2 та SQL Server 2012. "
ivan_pozdeev

Дякую @ivan_posdeev, це було одкровенням. Я задокументував свої кроки нижче, якщо це допомагає комусь іншому.
Кріс

6

Налаштування рівня сумісності використовується SQL Server для визначення способів обробки певних нових функцій. Таким чином БД можна перенести на нову версію SQL, не маючи проблем із додатком. Рівень сумісності можна змінювати вперед і назад.

На жаль, файли резервного копіювання не сумісні назад. Одним із методів було б використання імпорту / експорту для переміщення даних із поточного БД до екземпляру старої версії.


3

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

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

Потім я натрапив на чудовий інструмент для переміщення SQL Server до баз даних SQL Azure. Це працює і для SQL Server, і для SQL Server, наприклад, якщо ви хочете перемістити базу даних SQL 2012 на R2 2008 року. Він використовує bcp.exe, який використовує об'ємну копію. Існує версія GUI та командного рядка (Batch), і це відкритий код. Дивіться http://sqlazuremw.codeplex.com/ . У моєму випадку операція зайняла 16 хвилин.

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


2

Я виявив, що BCP є більш ефективним, ніж деякі інструменти для отримання даних у більш ранній версії SQL Server та для витягу даних з RDS. (Дякую @ivan_posdeev.)

Я спочатку генерую схему, клацнувши правою кнопкою миші на базі даних в SQL Server Management Studio, Завданнях, Створити сценарії. Поставте галочку на всіх об'єктах, у вдосконалених об'єктах переконайтеся, що все, що вам потрібно буде сценарій (статистика, індекси тощо), зніміть позначку "База даних USE", якщо ваша база даних має інше ім'я, встановіть сумісність з цільовою версією бази даних та створіть файл, який створює вашу схему. Створення бази даних за місцем призначення і запустити цей файл на нього ( з допомогою osql, sqlcmdабо GUI).

Щоб перемістити дані, запустіть наступний запит двічі у вихідній базі даних, спочатку коментуючи другий стовпець, щоб створити пакетний файл для вилучення даних, потім коментуючи перший стовпець, щоб генерувати пакетний файл імпорту, який запускається у вашому пункті призначення. (Вам потрібно додати джерела та сервери призначення, імена екземплярів, каталоги вихідних та вхідних файлів, імена користувачів та паролі. Для використання інтегрованої безпеки замініть -Uі -Pпараметри на просто -T.)

Це підтримує Unicode, якщо вам це не потрібно, змініть -Nперемикач в обох операторах на -n.

SELECT 
   'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME  + ' out d:\dbdump\' + s.Name + '.' + t.NAME  + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
--    'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME  + ' in d:\dbdump\' + s.Name + '.' + t.NAME  + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME  + '.ERRORS.dat'
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
ORDER BY 
    s.Name, t.NAME

Після запуску перевірки файлів з назвою schema.tablename.ERRORS.dat - буде включати будь-які рядки, які не вдалися, порожні, якщо такі не зробили.

Посилання MSDN на BCP тут , більш дружнє проходження варіантів BCP тут .

Я виявив, що це надзвичайно перевершує створення сценаріїв та будь-який із інструментів, які я спробував. Він також працює на базах даних RDS (які не дозволяють створювати резервні копії). Згенеровані файли даних мають розмір сценаріїв SQL на 30%, запуск їх займає частину часу і набагато надійніше. (Сценарії , створювані SQL Server для даних сценаріїв завжди підставляли, іноді передбачувано , іноді немає, SQL генеруватися не сумісний з 2008R2 (наприклад, використовується nvarchar(0), часто не завершена без будь-якої видимої причини і т.д. BCP також дублює будь-які порушення обмежень , наприклад, референтна цілісність.).

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