Přenos zálohovaných dat z nové verze MS SQL Serveru do starší verze

pravěk

Jednou, abych mohl reprodukovat chybu, jsem potřeboval zálohu produkční databáze.

K mému překvapení jsem narazil na následující omezení:

  1. Záloha databáze byla provedena na verzi SQL Server 2016 a nebyl kompatibilní s mým SQL Server 2014.
  2. Na mém pracovním počítači byl použitý OS Windows 7tak jsem nemohl aktualizovat SQL Server až do verze 2016
  3. Podporovaný produkt byl součástí většího systému s pevně propojenou starší architekturou a také mluvil s jinými produkty a bázemi, takže jeho nasazení na jinou stanici mohlo trvat velmi dlouho.

Vzhledem k výše uvedenému jsem došel k závěru, že nastal čas berliček nestandardních řešení.

Obnova dat ze zálohy

Rozhodl jsem se použít virtuální stroj Oracle VM VirtualBox s Windows 10 (můžete pořídit testovací obrázek pro prohlížeč Edge proto). SQL Server 2016 byl nainstalován na virtuální počítač a databáze aplikace byla obnovena ze zálohy (instrukce).

Konfigurace přístupu k serveru SQL Server na virtuálním počítači

Dále bylo nutné provést několik kroků, aby bylo možné přistupovat k SQL Serveru zvenčí:

  1. Pro bránu firewall přidejte pravidlo pro přeskočení požadavků na port 1433.
  2. Je žádoucí, aby přístup na server neprobíhal přes Windows autentizaci, ale přes SQL pomocí loginu a hesla (jednodušší nastavení přístupu). V tomto případě si však musíte pamatovat na povolení ověřování SQL ve vlastnostech serveru SQL.
  3. V uživatelském nastavení na SQL Serveru na záložce Uživatel Mapování zadejte uživatelskou roli pro obnovenou databázi db_securityadmin.

Přenos dat

Ve skutečnosti se samotný přenos dat skládá ze dvou fází:

  1. Přenos datového schématu (tabulky, pohledy, uložené procedury atd.)
  2. Samotný přenos dat

Přenos datového schématu

Provádíme následující operace:

  1. vybrat Úkoly -> Generovat skripty pro přenosnou základnu.
  2. Vyberte objekty, které potřebujete přenést, nebo ponechte výchozí hodnotu (v tomto případě budou vytvořeny skripty pro všechny databázové objekty).
  3. Zadejte nastavení pro uložení skriptu. Nejpohodlnější je uložit skript do jednoho souboru Unicode. V případě neúspěchu pak nemusíte opakovat všechny kroky znovu.

Jakmile je skript uložen, lze jej spustit na původním serveru SQL Server (stará verze) a vytvořit tak požadovaný základ.

Poznámka: Po spuštění skriptu je třeba zkontrolovat shodu mezi nastavením databáze ze zálohy a databáze vytvořené skriptem. V mém případě nebylo ve skriptu žádné nastavení COLLATE, což vedlo k selhání při přenosu dat a tanci s tamburínou znovu vytvořit databázi pomocí doplněného skriptu.

Přenos dat

Před přenosem dat musíte zakázat kontrolu všech omezení v databázi:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Přenos dat se provádí pomocí průvodce importem dat Úkoly -> Importovat data na SQL Server, kde se nachází databáze vytvořená skriptem:

  1. Zadejte nastavení připojení ke zdroji (SQL Server 2016 na virtuálním počítači). Použil jsem zdroj dat Nativní klient serveru SQL Server a výše zmíněná SQL autentizace.
  2. Zadejte nastavení připojení pro cíl (SQL Server 2014 na hostitelském počítači).
  3. Dále nastavte mapování. Všechny musí být vybrány není jen pro čtení objekty (například pohledy není třeba vybírat). Jako další možnosti vyberte "Povolit vkládání do sloupců identity"pokud se takové používají.
    Poznámka: if, když se pokoušíte vybrat několik tabulek a nastavit jejich vlastnosti "Povolit vkládání do sloupců identity" vlastnost již byla nastavena alespoň pro jednu z vybraných tabulek, dialogové okno bude indikovat, že vlastnost již byla nastavena pro všechny vybrané tabulky. Tato skutečnost může být matoucí a vést k chybám při migraci.
  4. Zahájíme přenos.
  5. Obnovení kontroly omezení:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Pokud se vyskytnou nějaké chyby, zkontrolujeme nastavení, smažeme databázi vytvořenou s chybami, znovu ji vytvoříme ze skriptu, provedeme opravy a zopakujeme přenos dat.

Závěr

Tento úkol je poměrně vzácný a vyskytuje se pouze kvůli výše uvedeným omezením. Nejběžnějším řešením je upgradovat SQL Server nebo se připojit ke vzdálenému serveru, pokud to architektura aplikace umožňuje. Nikdo však není imunní vůči starému kódu a křivým rukám nekvalitního vývoje. Doufám, že tento návod nebudete potřebovat, ale pokud jej přesto potřebujete, pomůže vám ušetřit spoustu času a nervů. Děkuji za pozornost!

Seznam použitých zdrojů

Zdroj: www.habr.com