Transferimi i të dhënave të backup-it të versionit të ri të MS SQL Server në një version më të vjetër

Historia e mëparshme

Një herë, për të riprodhuar një defekt, më nevojitej një kopje rezervë të bazës së të dhënave të prodhimit.

Për habinë time, u përballa me kufizimet e mëposhtme:

  1. Kopja rezervë e bazës ishte bërë në versionin SQL Server 2016 dhe nuk ishte e kompatibilshme me SQL Server 2014.
  2. Në kompjuterin tim të punës, sistemi operativ ishte Windows 7, kështu që nuk mund të përditësoja SQL Server në versionin 2016
  3. Produkti i mbështetur ishte pjesë e një sistemi më të madh me një arkitekturë legjendare të lidhur ngushtësisht dhe gjithashtu iu drejtohej produkteve dhe bazave të tjera, prandaj implementimi i tij në një stacion tjetër mund të zgjaste shumë kohë.

Duke marrë parasysh të gjitha këto, arrita në përfundimin se ishte koha për zgjidhje të passtandardizuara.

Rikuperimi i të dhënave nga kopja rezervë

Vendosa të përdor një makina virtuale Oracle VM VirtualBox me Windows 10 (mund të marrë një imazh testues për shfletuesin Edge këtu). Në makinën virtuale u instalua SQL Server 2016 dhe nga kopja rezervë u rikuperua baza e të dhënave të aplikacionit (instruksion).

Konfigurimi i aksesit në SQL Server në makinën virtuale

Më pas, ishin të nevojshme disa hapa për të mundësuar aksesin në SQL Server nga jashtë:

  1. Për firewall-in shtoni një rregull për të lejuar kërkesat në portin 1433.
  2. Preferohet që aksesin në server të bëhet jo përmes autentifikimit të Windows, por përmes SQL me emrin e përdoruesit dhe fjalëkalimin (është më e lehtë të konfigurohet aksesin). Megjithatë, në këtë rast nuk duhet harruar të aktivizohet në pronat e SQL Server mundësia e autentifikimit SQL.
  3. Në cilësimet e përdoruesit në SQL Server, në skedën Vendosja e Përdoruesve përcaktoni rolin e përdoruesit për bazën e rikuperuar db_securityadmin.

Transferimi i të dhënave

Në fakt, transferimi i të dhënave përbëhet nga dy etapa:

  1. Transferimi i skemës së të dhënave (tavolinat, pamjet, procedurat e ruajtura etj.)
  2. Transferimi i të dhënave vetë

Transferimi i skemës së të dhënave

Kryejmë operacionet e mëposhtme:

  1. Zgjidhni Tasks -> Generoni Skripta për bazën që transferohet.
  2. Zgjedhim objektet që duam të transferojmë ose e lëmë vlerën siç është (në këtë rast do të krijohen skriptet për të gjitha objektet e bazës).
  3. Përcaktojmë cilësimet për ruajtjen e skriptës. Më e lehtë është të ruani skriptën në një skedar të vetëm në kodimin Unicode. Kështu, në rast dështimi, nuk do të nevojitet të përsërisni të gjitha hapat.

Pasi të ruhet skripta, mund të ekzekutohet në SQL Serverin origjinal (versionin e vjetër) për të krijuar bazën e nevojshme.

Kujdes: Pas vendosjes së skriptit, është e nevojshme të kontrollohet përputhshmëria e konfigurimeve të databazës nga backup dhe databaza e krijuar nga skripti. Në rastin tim, në skript kishte mungesë të konfigurimit për COLLATE, që shkaktonte dështim gjatë transferimit të të dhënave dhe krijimin e vështirësive në krijimin e databazës me skriptin e përmirësuar.

Transferimi i të dhënave

Para se të transferoni të dhënat, është e nevojshme të çaktivizoni kontrollin e të gjithë kufizimeve në databazë:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Transferimi i të dhënave bëhet përmes asistentit të importit të të dhënave Tasks -> Import Data në SQL Server, ku ndodhet databaza e krijuar nga skripti:

  1. Specifikoni konfigurimet e lidhjes me burimin (SQL Server 2016 në një makinë virtuale). Unë përdora Data Source SQL Server Native Client dhe autentifikimin SQL të përmendur më sipër.
  2. Specifikoni konfigurimet e lidhjes me vendin e destinacionit (SQL Server 2014 në makinë mikpritëse).
  3. Pastaj konfigurojmĂ« hartimin. ËshtĂ« e nevojshme tĂ« zgjidhni tĂ« gjitha jo read-only objektet (pĂ«r shembull, nuk Ă«shtĂ« e nevojshme tĂ« zgjidhen pamjet). Si mundĂ«si shtesĂ« duhet zgjedhur «Lejo futjen nĂ« kolona identity», nĂ«se pĂ«rdoren tĂ« tilla.
    Kujdes: nëse, gjatë përpjekjes për të zgjedhur disa tabela dhe për t'u dhënë atyre pronësinë «Lejo futjen në kolona identity» pronia tashmë ishte e vendosur më parë për të paktën një nga tabelat e zgjedhura, një dialog do të shënojë se prona tashmë është vendosur për të gjitha tabelat e zgjedhura. Ky fakt mund të ngatërronte dhe të çonte në gabime transferimi.
  4. Fillojmë transferimin.
  5. Rivendosim kontrollin e kufizimeve:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Nëse janë shfaqur ndonjë gabim, kontrolloni konfigurimet, hiqni databazën e krijuar me gabime, krijoni atë përsëri nga skripti, bëni korrigjimet dhe përsëritni transferimin e të dhënave.

Përfundim

Kjo detyrë ndodhet mjaft rrallë dhe ndodh vetëm për shkak të kufizimeve të përmendura më sipër. Shpesh zgjidhja përfshin përditësimin e SQL Server ose lidhjen me një server të largët, nëse arkitektura e aplikacionit e lejon këtë. Megjithatë, askush nuk është i mbrojtur nga kodi legacy dhe gabimet e zhvillimit të dobët. Shpresoj që kjo udhëzues të mos ju nevojitet, dhe nëse ndodh, t'ju ndihmojë të kurseni shumë kohë dhe nerva. Faleminderit për vëmendjen!

Lista e burimeve të përdorura

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster