it-swarm-eu.dev

SQL Server 2012 zpětná kompatibilita pro zálohy s rokem 2008

Mám řadu klientů se serverem SQL Server 2008 a to je to, co zde mám na svém serveru. Záložní soubory používám k odesílání databází sem a tam mezi klienty a v mé kanceláři.

Četl jsem, že když vytvoříte zálohu ze serveru SQL Server 2012, neexistuje způsob, jak ji obnovit do instance 2008. Předpokládal jsem, že úroveň kompatibility se postará o tento problém, ale ne. Z toho důvodu jsem v rozpacích, jak upgradovat. Kromě upgradu všech svých klientů najednou, což je nemožné, nemyslím na žádný čistý způsob, jak to udělat.

Mám potřebu poslat databázi klientovi a získat databázi od klienta. Toto je moje první verze upgrade na SQL Server, takže jsem nový problém. Nějaké nápady, jak postupovat?

15
Jeff Stock

Jsou zde dvě věci: číslo verze souboru a úroveň kompatibility. Když připojíte databázi k novější hlavní verzi (například od roku 2008 do roku 2008R2 nebo 2008R2 do 2012), verze databáze se trvale změní a tuto databázi již nelze připojit ke starší verzi.

Úroveň kompatibility je pro analýzu zastaralých T-SQL zastaralých ve staré škole, které fungovaly ve starších verzích serveru SQL. Nezmění to, jak jsou data uložena na disk.

Chcete-li dát databázi někomu na starší verzi serveru SQL, musíte data exportovat a importovat do jiné databáze. K tomu jsou užitečné nástroje jako Red Gate's Data Compare.

17
Brent Ozar

Nastavení úrovně kompatibility používá SQL Server k určení, jak by měly být zpracovávány určité nové funkce. Tímto způsobem by mohla být DB migrována na novější verzi SQL bez problémů s aplikací. Úroveň kompatibility lze změnit tam a zpět.

Záložní soubory bohužel nejsou zpětně kompatibilní. Jednou z metod by bylo použití importu/exportu k přesunutí dat z vaší aktuální databáze do instance starší verze.

6
StanleyJohns

Pro migrace SQL použijte bezplatný a otevřený zdrojový průvodce migrací databáze SQL.

Měl jsem 5GB databázi s párem ~ 10 miliónů záznamů a zkusil cestu přes Generate Script a pak jsem ji spustil s sqlcmd.exe. Za prvé, vygenerovaný skript nebyl vždy funkční správně. Za druhé, sqlcmd.exe může selhat také na velkých souborech, stěžovat si na dostupnou paměť. osql.exe funguje, ale bere věky (a má stejné argumenty příkazového řádku).

Pak jsem narazil na skvělý nástroj pro migraci serveru SQL do databází SQL Azure. To funguje také pro SQL Server na SQL Server, například pokud chcete migrovat databázi SQL 2012 do roku 2008 R2. Používá bcp.exe, který používá hromadnou kopii. K dispozici je GUI a verze příkazového řádku (Batch) a je to open source. Viz http://sqlazuremw.codeplex.com/ . V mém případě to trvalo 16 minut.

Na pokročilé obrazovce si můžete vybrat, že vaším cílem je SQL Server, nikoli SQL Azure.

3
lvmeijer

Zjistil jsem, že BCP je efektivnější než některé nástroje pro získávání dat do dřívější verze serveru SQL a pro stahování dat z RDS. (Díky @ivan_posdeev.)

Nejprve vytvořím schéma kliknutím pravým tlačítkem myši na databázi v SQL Server Management Studio, Úkoly, Generování skriptů. Zaškrtněte všechny objekty, v pokročilých objektech zajistěte, že vše, co potřebujete, bude skriptováno (statistiky, indexy atd.), Zrušte zaškrtnutí „USE database“, pokud má vaše cílová databáze jiné jméno, nastavte kompatibilitu s vaší cílovou verzí databáze a vygenerujte soubor, který vytvoří vaše schéma. Vytvořte databázi v cílovém umístění a spusťte na něm tento soubor (pomocí osql, sqlcmd nebo GUI).

Chcete-li data přesunout, spusťte následující dotaz dvakrát ve zdrojové databázi , nejprve okomentovat druhý sloupec a vygenerovat dávkový soubor pro extrahování dat, poté okomentovat první sloupec a vygenerovat importovaný dávkový soubor pro spuštění v cílovém umístění. (Musíte přidat zdrojový a cílový server, názvy instancí, výstupní a vstupní adresáře souborů, uživatelská jména a hesla. Chcete-li používat integrované zabezpečení, nahraďte možnosti -U A -P Pouhými -T.)

To podporuje Unicode, pokud to nepotřebujete, změňte přepínač -N V obou příkazech na -n.

SELECT 
   'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME  + ' out d:\dbdump\' + s.Name + '.' + t.NAME  + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
--    'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME  + ' in d:\dbdump\' + s.Name + '.' + t.NAME  + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME  + '.ERRORS.dat'
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
ORDER BY 
    s.Name, t.NAME

Po spuštění kontrolních souborů s názvem schema.tablename.ERRORS.dat - budou obsahovat všechny řádky, které se nezdařily, prázdné, pokud žádné nebyly.

MSDN reference pro BCP zde , přátelštější projděte si možnosti BCP zde .

Našel jsem to nesmírně lepší než generování skriptů a všech nástrojů, které jsem vyzkoušel. Běží také na databázích RDS (které neumožňují zálohování). Generované datové soubory mají 30% velikost skriptů SQL, jejich spuštění zabere zlomek času a je mnohem spolehlivější. (Skripty generované SQL Serverem pro skriptování dat byly vždy vypnuty, někdy předvídatelně někdy ne, vygenerovaný SQL nebyl kompatibilní s 2008R2 (např. Použitý nvarchar(0), často nebyl dokončen bez rozpoznatelného důvodu atd.) . BCP také replikuje všechna porušení omezení, jako je například referenční integrita.).

2
Chris