Чи є спосіб відновити резервну копію бази даних 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.