Есть ли способ восстановить резервную копию базы данных SQL Server 2012 на SQL Server 2008?
Я пытался прикрепить файл, он не работает.
Есть ли способ восстановить резервную копию базы данных SQL Server 2012 на SQL Server 2008?
Я пытался прикрепить файл, он не работает.
Ответы:
У вас есть несколько вариантов:
Вариант A : Сценарий базы данных в режиме совместимости с помощью параметра Generate script:
Примечание. Если вы создадите сценарий для базы данных со схемой и данными, в зависимости от размера данных, сценарий будет массивным и не будет обрабатываться SSMS, sqlcmd или osql (также может быть в ГБ).
Вариант Б:
Сначала выведите из таблицы сначала все индексы, FK и т. Д. И создайте пустые таблицы в целевой базе данных - опция ТОЛЬКО для SCHEMA (нет данных).
Используйте 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, поскольку он использует собственный режим.
Some SSIDs and linked servers didn't go across properly
. Связанные серверы должны быть написаны вручную. SSID могут быть переданы с помощью sp_helprevlogin. Задания SQLAgent, пакеты ssis и т. Д. Следует перемещать в соответствии с вашими потребностями. Смысл этого метода состоит в том, чтобы получить данные как можно быстрее, когда вы понижаете или объединяете 2 базы данных.
Нет, ты не можешь идти назад, только вперед. Вы можете создать пустую базу данных в 2008 году, а затем использовать мастер создания сценариев в Management Studio для создания сценария для схемы и данных (или сторонних инструментов сравнения от Red Gate и других). Убедитесь, что вы установили правильную целевую версию на 2008 год, и вам придется выявить несовместимые вещи (например, OFFSET или FORMAT), которые вы могли использовать в 2012 году.
Не существует поддерживаемого способа сделать это, потому что SQL Server не допускает такого рода совместимости.
Что вы можете сделать, это
восстановить базу данных на SQL 2012
генерировать скрипты для объектов и данных
Если у вас нет SQL Server 2012, вы можете использовать сторонние инструменты для чтения резервных копий и извлечения данных и структуры.
В этом случае просто создайте пустую базу данных на SQL 2008 и используйте инструменты, такие как ApexSQL Diff и ApexSQL Data Diff, для синхронизации объектов и данных. Вы можете найти их и у других крупных поставщиков, таких как Red-Gate или Idera.