Četl jsem, že je možné obnovit databázi na serveru SQL, pokud obnovujete ze starší verze na novější verzi, z důvodu zpětné kompatibility.
Ví někdo z ruky, pokud můžete obnovit databázi ze souboru * .bak pro různá vydání serveru SQL? Přesouváme přes FTP velmi rozsáhlou databázi, která bude trvat několik dní, takže bychom to raději udělali jen jednou. Pokud do doby přenosu databáze přes FTP nikdo neodpoví, zřejmě to vyzkoušíme a uvidíme, zda to funguje testováním, a odpovíme na naši vlastní otázku.
Níže je dotaz k získání podrobností o verzi serveru SQL. productversion
je ve formátu {major revision}.{minor revision}.{release revision}.{build number}
. V mém případě {release revision}
má hodnotu 5500
pro zdroj a 5512
pro cíl. Takže to vypadá dobře. edition
se však liší.
Dotaz:
SELECT
SERVERPROPERTY('productversion'),
SERVERPROPERTY('productlevel'),
SERVERPROPERTY('edition')
zdrojová databáze:
10.0.5500.0
SP3
Developer Edition (64-bit)
Cílová databáze:
10.0.5512.0
SP3
Enterprise Edition (64-bit)
Od vývojáře po podnik bude v pořádku, ujistěte se, že pokud používáte licencování procesoru, máte na cílovém serveru licence, které pokrývají všechny procesory. A nestačí je jen skrýt před SQL, pokud jsou fyzicky připojeni k počítači, jste za ně zodpovědní.
Také při přechodu z nižší sestavy na vyšší sestavení se zvýší verze vaší databáze. Existuje několik scénářů, kde to může být problematické - např. Pokud používáte podporu 15 000 oddílů na konkrétní sestavení z roku 2008, nebude fungovat, když upgradujete na konkrétní sestavení z roku 2008 R2. Také se můžete spolehnout na optimalizace (a mít zástupná řešení), která jsou ve skutečnosti chyby ve starší verzi, ale jsou opraveny v nové verzi, což může vést k horšímu výkonu. Je také důležité zkontrolovat všechny příznaky trasování používané u zdroje a zjistit, zda by měly být také povoleny v cílovém umístění. Nevadí úlohy, přihlášení atd.
Samozřejmě nemůžete jít zpět. Nikdy jsem nezkoušel menší downgrade jako 10.0.5512 -> 10.0.5500, ale rozhodně není možné jít dolů v aktualizaci Service Pack nebo verzi. Pokud tedy máte ve své instanci Developer Edition databázi 2012 a chcete ji umístit na svou instanci v roce 2008, budete mít pro vás připravenou práci (viz zde a zde ) - zejména pokud jste použili funkce pro rok 2012.
Ale na pokrytí dalších případů, které by mohly lidem na tuto otázku přistát (např. Někdo chce jít od vývojáře -> Standard nebo Enterprise -> Express nebo co vás) ...
Existují i další aktualizace vydání -> vydání, které nebudou fungovat tak dobře, např. od vývojáře -> Express, pokud jste použili funkce, které nejsou v Express Express podporovány (a totéž platí pro jakékoli jiné vydání než Enterprise). Několik příkladů funkcí, které nebudete moci použít v edicích nižší úrovně (v takovém případě obnovení zemře v okamžiku, kdy se pokusí uvést databázi online):
Nevím, jestli existuje způsob, jak to říct přímo ze souboru .BAK (jsem si jistý, že existuje nějaké kouzlo, které lze někde získat ze záhlaví stránky, nebo jestli máte víkend vypálit pomocí hex editoru) , ale zatímco databáze je ve zdrojové instanci stále neporušená, můžete vždy provést následující kroky, abyste zjistili, zda používáte nějaké funkce, které jsou dostupné kvůli SKU, ve které se nacházíte:
SELECT feature_name FROM sys.dm_db_persisted_sku_features;
Nejsem si jistý, zda by měl být na tomto seznamu SQL Server Audit - exkluzivita vydání této funkce se změnila, takže to pravděpodobně závisí na tom, co s tím děláte. Existují další věci, které byste mohli používat, ale nezobrazí se v DMV (některé proto, že jsou ve vašem kódu, který DMV nerozebírá, a některé proto, že vaše databáze spoléhá na externí věci, jako je SQL Server Agent , Service Broker atd.):
Existují také případy, kdy nebudete moci přejít od vývojáře k Express kvůli omezením velikosti souboru (databáze Express jsou omezeny na 10 GB v celkové velikosti datového souboru).
Samozřejmě mohou existovat i jiné gotchy, na které nebudete varováni - nezabrání migraci, ale mohou vést k velmi odlišnému výkonu v cíli. Příklady:
NOEXPAND
. A možná si ani neuvědomujete, že tato schopnost je důvodem, proč se vaše dotazy náhle zpomalí.[~ # ~] aktualizace [~ # ~] na základě tento duplikát :
Mohou se vyskytnout případy, kdy se pokusíte obnovit databázi z určitého vydání na menší vydání (i ve stejné verzi) a dostanete chyby, které jsou méně užitečné :
OBNOVENÍ se nezdařilo pro server 'server\instance'.
RESTORE nemohl spustit databázi 'databasename'.
To není příliš intuitivní. Pokud se však podíváte hlouběji do protokolů událostí serveru SQL, uvidíte další užitečné chyby (pouze jeden příklad):
Databázi 'databasename' nelze spustit, protože některé funkce databáze nejsou k dispozici v aktuálním vydání serveru SQL.
Databáze 'databasename' nelze v tomto vydání serveru SQL spustit, protože obsahuje funkci oddílu '_dta_pf__9987'. Pouze vydání Enterprise Edition serveru SQL podporuje funkce oddílu.
Teď to není úplně pravda - můžete se také vrátit k Evaluation Edition nebo Developer Edition, ale to je mimo to. Chcete-li obnovit tuto databázi, máte v zásadě dvě možnosti:
Varianta na (2) by spočívala pouze v odstranění zdrojového oddílu a dalších funkcí ve zdrojové databázi a provedení další zálohy. Ale pokud se to nerozbije ...
Vývojář a podnik jsou stejný software, jen s různými licenčními smlouvami.
Tuto databázi byste měli v cílovém umístění obnovit.