Чи є спосіб відновити резервну копію бази даних SQL Server 2012 на SQL Server 2008?
Я спробував приєднати файл, він не працює.
Чи є спосіб відновити резервну копію бази даних SQL Server 2012 на SQL Server 2008?
Я спробував приєднати файл, він не працює.
Відповіді:
У вас є пара варіантів:
Варіант A : Сценарій бази даних у режимі сумісності за допомогою параметра Створення сценарію:
Примітка: Якщо ви скриптуєте базу даних зі схемою та даними, залежно від розміру даних, сценарій буде масивним і не буде оброблятися SSMS, sqlcmd або osql (можливо, в ГБ).

Варіант B:
Спочатку спершу виведіть таблиці з усіма індексами, FK та ін. Та створіть порожні таблиці в базі даних призначення - опція ТОЛЬКО SCHEMA (Без даних).
Використовуйте BCP для вставки даних
bcp з даних нижче за допомогою сценарію нижче. встановіть SSMS у текстовому режимі та скопіюйте вихід, створений нижче сценарієм, у файл bat.
-- save below output in a bat file by executing below in SSMS in TEXT mode
-- clean up: create a bat file with this command --> del D:\BCP\*.dat
select '"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp.exe" ' /* path to BCP.exe */
+ QUOTENAME(DB_NAME())+ '.' /* Current Database */
+ QUOTENAME(SCHEMA_NAME(SCHEMA_ID))+'.'
+ QUOTENAME(name)
+ ' out D:\BCP\' /* Path where BCP out files will be stored */
+ REPLACE(SCHEMA_NAME(schema_id),' ','') + '_'
+ REPLACE(name,' ','')
+ '.dat -T -E -SServerName\Instance -n' /* ServerName, -E will take care of Identity, -n is for Native Format */
from sys.tables
where is_ms_shipped = 0 and name <> 'sysdiagrams' /* sysdiagrams is classified my MS as UserTable and we dont want it */
/*and schema_name(schema_id) <> 'unwantedschema' */ /* Optional to exclude any schema */
order by schema_name(schema_id)Запустіть файл bat, який генерує .dat файли у вказаній вами папці.
Знову запустіть скрипт на цільовому сервері із SSMS у текстовому режимі.
--- Execute this on the destination server.database from SSMS.
--- Make sure the change the @Destdbname and the bcp out path as per your environment.
declare @Destdbname sysname
set @Destdbname = 'destinationDB' /* Destination Database Name where you want to Bulk Insert in */
select 'BULK INSERT '
/*Remember Tables must be present on destination database */
+ QUOTENAME(@Destdbname) + '.'
+ QUOTENAME(SCHEMA_NAME(SCHEMA_ID))
+ '.' + QUOTENAME(name)
+ ' from ''D:\BCP\' /* Change here for bcp out path */
+ REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '')
+ '.dat'' with ( KEEPIDENTITY, DATAFILETYPE = ''native'', TABLOCK )'
+ char(10)
+ 'print ''Bulk insert for ' + REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '') + ' is done... '''
+ char(10) + 'go'
from sys.tables
where is_ms_shipped = 0
and name <> 'sysdiagrams' /* sysdiagrams is classified my MS as UserTable and we dont want it */
and schema_name(schema_id) <> 'unwantedschema' /* Optional to exclude any schema */
order by schema_name(schema_id) Запустіть вихід, використовуючи SSMS, щоб вставити дані назад у таблиці.
Це дуже швидкий bcp метод, оскільки він використовує Native mode.
Some SSIDs and linked servers didn't go across properly. Пов'язані сервери повинні бути скриптовані вручну. SSID можуть бути захищені за допомогою sp_helprevlogin. Завдання SQLAgent, пакети ssis тощо потрібно переміщувати відповідно до ваших потреб. Сенс цього методу полягає в тому, щоб отримати дані якнайшвидше, коли ви знижуєте або зменшуєте 2 бази даних.
Ні, ви не можете йти назад, тільки вперед. Ви можете створити порожню базу даних 2008 року, а потім скористатися майстром Створення скриптів у студії управління для скриптування схеми та даних (або сторонніх інструментів порівняння від Red Gate та інших). Переконайтеся, що ви встановили правильну цільову версію як 2008 рік, і вам доведеться складати невідповідні речі (наприклад, OFFSET або FORMAT), які ви могли використовувати в 2012 році.
Не існує підтримуваного способу зробити це, оскільки SQL Server не дозволяє підтримувати подібну сумісність.
Що ти можеш зробити
відновити базу даних у SQL 2012
генерувати сценарії для об'єктів і даних
Якщо у вас немає SQL Server 2012, тоді ви можете використовувати інструменти сторонніх виробників для читання резервних копій та вилучення даних та структури.
У цьому випадку просто створіть порожню базу даних у SQL 2008 та використовуйте такі інструменти, як ApexSQL Diff та ApexSQL Data Diff для синхронізації об’єктів та даних. Ви також можете їх знайти у інших великих постачальників, таких як Red-Gate або Idera.