it-swarm-eu.dev

Obnovit zálohu serveru SQL Server 2012 do databáze SQL Server 2008?

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.

41
urlreader

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).

enter image description here

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

  1. 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)
    
  2. Spusťte soubor bat, který vygeneruje soubory .dat ve složce, kterou jste určili.

  3. 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) 
    
  4. 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.

31
Kin Shah

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.

23
Aaron Bertrand

Neexistuje žádný podporovaný způsob, jak to provést, protože SQL Server neumožňuje tento druh kompatibility.

Co můžete udělat, je

  1. obnovení databáze na SQL 2012

  2. generovat skripty pro objekty a data

  3. vyčistěte skripty od všech podrobností, které jsou jedinečné pro SQL 2012
  4. spouštět skripty v roce 2008

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.

8
David Smithers