Prenos zálohovaných dát z novej verzie MS SQL Servera na staršiu verziu

pravek

Raz, aby som reprodukoval chybu, potreboval som zálohu produkčnej databázy.

Na moje prekvapenie som narazil na nasledujúce obmedzenia:

  1. Záloha databázy bola vykonaná na verzii SQL Server 2016 a nebol kompatibilný s mojím SQL Server 2014.
  2. Na mojom pracovnom počítači bol použitý OS windows 7takže som nemohol aktualizovať SQL Server do verzie 2016
  3. Podporovaný produkt bol súčasťou väčšieho systému s pevne prepojenou staršou architektúrou a hovoril aj s inými produktmi a základňami, takže jeho nasadenie na inú stanicu mohlo trvať veľmi dlho.

Vzhľadom na uvedené som dospel k záveru, že nastal čas na barličky neštandardných riešení.

Obnova údajov zo zálohy

Rozhodol som sa použiť virtuálny stroj Oracle VM VirtualBox s Windowsom 10 (môžete urobiť testovací obrázok pre prehliadač Edge preto). SQL Server 2016 bol nainštalovaný na virtuálnom počítači a databáza aplikácie bola obnovená zo zálohy (inštrukcie).

Konfigurácia prístupu k serveru SQL Server na virtuálnom počítači

Ďalej bolo potrebné vykonať niekoľko krokov, aby bolo možné pristupovať k serveru SQL Server zvonku:

  1. Pre bránu firewall pridajte pravidlo na preskočenie požiadaviek na port 1433.
  2. Je žiaduce, aby prístup na server neprebiehal cez Windows autentifikáciu, ale cez SQL pomocou prihlasovacieho mena a hesla (ľahšie sa nastavuje prístup). V tomto prípade si však musíte pamätať, že je potrebné povoliť overenie SQL vo vlastnostiach servera SQL.
  3. V užívateľských nastaveniach na SQL Server na záložke Mapovanie používateľov zadajte užívateľskú rolu pre obnovenú databázu db_securityadmin.

Prenos údajov

V skutočnosti samotný prenos údajov pozostáva z dvoch fáz:

  1. Prenos dátovej schémy (tabuľky, pohľady, uložené procedúry atď.)
  2. Samotný prenos údajov

Prenos dátovej schémy

Vykonávame nasledujúce operácie:

  1. vybrať Úlohy -> Generovať skripty pre prenosnú základňu.
  2. Vyberte objekty, ktoré potrebujete preniesť, alebo ponechajte predvolenú hodnotu (v tomto prípade sa vytvoria skripty pre všetky databázové objekty).
  3. Zadajte nastavenia pre uloženie skriptu. Najpohodlnejšie je uložiť skript do jedného súboru Unicode. Potom v prípade zlyhania nemusíte opakovať všetky kroky znova.

Po uložení skriptu ho možno spustiť na pôvodnom serveri SQL Server (stará verzia), aby sa vytvoril požadovaný základ.

varovanie: Po spustení skriptu je potrebné skontrolovať súlad medzi nastaveniami databázy zo zálohy a databázou vytvorenou skriptom. V mojom prípade nebolo v skripte žiadne nastavenie COLLATE, čo viedlo k zlyhaniu pri prenose údajov a tanci s tamburínou pri opätovnom vytvorení databázy pomocou doplneného skriptu.

Prenos údajov

Pred prenosom údajov musíte vypnúť kontrolu všetkých obmedzení v databáze:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Prenos údajov sa vykonáva pomocou sprievodcu importom údajov Úlohy -> Importovať údaje na SQL Server, kde sa nachádza databáza vytvorená skriptom:

  1. Zadajte nastavenia pripojenia k zdroju (SQL Server 2016 na virtuálnom počítači). Použil som zdroj údajov Natívny klient SQL Server a vyššie spomínaná SQL autentifikácia.
  2. Zadajte nastavenia pripojenia pre cieľ (SQL Server 2014 na hostiteľskom počítači).
  3. Ďalej nastavte mapovanie. Všetky musia byť vybrané nie len na čítanie objekty (napríklad pohľady nie je potrebné vyberať). Ako ďalšie možnosti vyberte "Povoliť vkladanie do stĺpcov identity"ak sa také použijú.
    varovanie: ak pri pokuse o výber niekoľkých tabuliek a nastavenie ich vlastnosti "Povoliť vkladanie do stĺpcov identity" vlastnosť už bola nastavená aspoň pre jednu z vybratých tabuliek, dialóg bude indikovať, že vlastnosť už bola nastavená pre všetky vybraté tabuľky. Táto skutočnosť môže byť mätúca a viesť k chybám pri migrácii.
  4. Začneme prenos.
  5. Obnovenie kontroly obmedzení:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Ak sa vyskytnú nejaké chyby, skontrolujeme nastavenia, vytvorenú databázu s chybami vymažeme, znova ju vytvoríme zo skriptu, urobíme opravy a prenos dát zopakujeme.

Záver

Táto úloha je pomerne zriedkavá a vyskytuje sa iba z dôvodu vyššie uvedených obmedzení. Najbežnejším riešením je upgrade SQL Servera alebo pripojenie k vzdialenému serveru, ak to architektúra aplikácie umožňuje. Nikto však nie je imúnny voči starému kódu a pokriveným rukám nekvalitného vývoja. Dúfam, že tento návod nebudete potrebovať, ale ak ho predsa len potrebujete, pomôže vám to ušetriť veľa času a nervov. Ďakujem za tvoju pozornosť!

Zoznam použitých zdrojov

Zdroj: hab.com