Prenos varnostnih kopij podatkov iz nove različice MS SQL Server v starejšo različico

prazgodovina

Nekoč sem za reproduciranje hrošča potreboval varnostno kopijo produkcijske baze podatkov.

Na moje presenečenje sem naletel na naslednje omejitve:

  1. Varnostna kopija baze podatkov je bila narejena na različici SQL Server 2016 in ni bil združljiv z mojim SQL Server 2014.
  2. Na mojem službenem računalniku je bil uporabljen OS Windows 7tako da nisem mogel posodobiti SQL Server do različice 2016
  3. Podprti izdelek je bil del večjega sistema s tesno povezano podedovano arhitekturo in je govoril tudi z drugimi izdelki in bazami, zato je lahko trajalo zelo dolgo, da bi ga uvedli na drugo postajo.

Glede na navedeno sem prišel do zaključka, da je prišel čas za bergle nestandardnih rešitev.

Obnavljanje podatkov iz varnostne kopije

Odločil sem se za uporabo virtualnega stroja Oracle VM VirtualBox z Windows 10 (lahko posnamete testno sliko za brskalnik Edge zato). SQL Server 2016 je bil nameščen na virtualnem računalniku in baza podatkov aplikacij je bila obnovljena iz varnostne kopije (Navodila).

Konfiguriranje dostopa do strežnika SQL na virtualnem računalniku

Nato je bilo treba narediti nekaj korakov, da bi lahko dostopali do SQL Serverja od zunaj:

  1. Za požarni zid dodajte pravilo za preskok zahtev za vrata 1433.
  2. Zaželeno je, da dostop do strežnika ne poteka prek preverjanja pristnosti sistema Windows, temveč prek SQL z uporabo prijave in gesla (lažje je nastaviti dostop). Vendar v tem primeru ne pozabite omogočiti avtentikacije SQL v lastnostih strežnika SQL.
  3. V uporabniških nastavitvah na strežniku SQL na zavihku Preslikava uporabnikov določite vlogo uporabnika za obnovljeno bazo podatkov db_securityadmin.

Prenos podatkov

Pravzaprav je sam prenos podatkov sestavljen iz dveh stopenj:

  1. Prenos podatkovne sheme (tabele, pogledi, shranjene procedure itd.)
  2. Sam prenos podatkov

Prenos podatkovne sheme

Izvajamo naslednje operacije:

  1. Izberite Naloge -> Ustvari skripte za prenosno bazo.
  2. Izberite objekte, ki jih želite prenesti, ali pustite privzeto vrednost (v tem primeru bodo skripti ustvarjeni za vse objekte baze podatkov).
  3. Določite nastavitve za shranjevanje skripta. Najprimerneje je shraniti skript v eno datoteko Unicode. Nato vam v primeru neuspeha ni treba znova ponoviti vseh korakov.

Ko je skript shranjen, ga lahko zaženete na izvirnem strežniku SQL (stara različica), da ustvarite zahtevano osnovo.

Opozorilo: Po izvedbi skripta morate preveriti ujemanje med nastavitvami baze podatkov iz varnostne kopije in bazo podatkov, ki jo je ustvaril skript. V mojem primeru v skriptu ni bilo nastavitve za COLLATE, kar je povzročilo napako pri prenosu podatkov in plesu s tamburino za poustvarjanje baze podatkov z uporabo dopolnjenega skripta.

Prenos podatkov

Pred prenosom podatkov morate onemogočiti preverjanje vseh omejitev v bazi:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Prenos podatkov se izvede s pomočjo čarovnika za uvoz podatkov Naloge -> Uvoz podatkov na SQL Server, kjer se nahaja baza podatkov, ki jo ustvari skript:

  1. Določite nastavitve povezave z virom (SQL Server 2016 na virtualnem računalniku). Uporabil sem vir podatkov SQL Server Native Client in prej omenjeno avtentikacijo SQL.
  2. Določite nastavitve povezave za cilj (SQL Server 2014 na gostiteljskem računalniku).
  3. Nato nastavite preslikavo. Vsi morajo biti izbrani ni samo za branje predmetov (npr. pogledov ni treba izbrati). Kot dodatne možnosti izberite "Dovoli vstavljanje v stolpce identitete"če se uporabljajo.
    Opozorilo: če, ko poskušate izbrati več tabel in nastaviti njihovo lastnost "Dovoli vstavljanje v stolpce identitete" lastnost že nastavljena za vsaj eno od izbranih tabel, bo pogovorno okno pokazalo, da je lastnost že nastavljena za vse izbrane tabele. To dejstvo je lahko zmedeno in povzroči napake pri selitvi.
  4. Začnemo s prenosom.
  5. Obnovitev preverjanja omejitev:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Če pride do napak, preverimo nastavitve, izbrišemo podatkovno bazo, narejeno z napakami, jo ponovno izdelamo iz skripte, popravimo in ponovimo prenos podatkov.

Zaključek

Ta naloga je precej redka in se pojavi le zaradi zgornjih omejitev. Najpogostejša rešitev je nadgradnja strežnika SQL ali povezava z oddaljenim strežnikom, če to omogoča arhitektura aplikacije. Vendar nihče ni imun pred podedovano kodo in ukrivljenimi rokami slabe kakovosti razvoja. Upam, da tega navodila ne boste potrebovali, če pa ga še vedno potrebujete, vam bo prihranilo veliko časa in živcev. Hvala za vašo pozornost!

Seznam uporabljenih virov

Vir: www.habr.com