Existuje způsob, jak obnovit zálohu databáze serveru SQL Server 2012 na server SQL Server 2008?
Pokusil jsem se připojit soubor, nefunguje to.
Máte několik možností:
Možnost A: Skriptovat databázi v režimu kompatibility pomocí možnosti Generovat skript:
Poznámka: Pokud skriptujete databázi se schématy a daty, v závislosti na velikosti vašich dat bude skript masivní a nebude zpracováván SSMS, sqlcmd nebo osql (může být také v GB).
Varianta B:
Nejprve nejprve vypište tabulky se všemi indexy, FK, atd. A vytvořte prázdné tabulky v cílové databázi - volba s SCHEMA ONLY (No data).
K vložení dat použijte BCP
bcp z dat pomocí skriptu níže. nastavte SSMS v textovém režimu a zkopírujte výstup generovaný skriptem do souboru 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)
Spusťte soubor bat, který vygeneruje soubory .dat ve složce, kterou jste určili.
Spusťte pod skriptem na cílovém serveru znovu SSMS v textovém režimu.
--- 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)
Spusťte výstup pomocí SSMS pro vložení dat zpět do tabulek.
Toto je velmi rychlá metoda BCP, protože používá nativní režim.
Ne, nemůžete jít zpět, pouze vpřed. V roce 2008 můžete vytvořit prázdnou databázi a poté pomocí Průvodce generováním skriptů v Management Studio skriptovat schéma a data (nebo nástroje pro porovnání třetích stran od Red Gate a dalších). Ujistěte se, že jste nastavili správnou cílovou verzi na rok 2008, a budete muset vyvinout nekompatibilní věci (např. OFFSET nebo FORMAT), které jste mohli použít v roce 2012.
Neexistuje žádný podporovaný způsob, jak to provést, protože SQL Server neumožňuje tento druh kompatibility.
Co můžete udělat, je
obnovení databáze na SQL 2012
generovat skripty pro objekty a data
Pokud nemáte SQL Server 2012, můžete použít nástroje třetích stran ke čtení záloh a extrahování dat a struktury.
V tomto případě stačí vytvořit prázdnou databázi na SQL 2008 a použít nástroje jako ApexSQL Diff a ApexSQL Data Diff pro synchronizaci objektů a dat. Najdete je i od jiných významných dodavatelů, jako jsou Red-Gate nebo Idera.