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

Pas historia

Nja një herë, për të riprodhuar një defekt, më nevojitej një backup i bazës së të dhënave production.

Për habinë time, u përballa me këto kufizime:

  1. Backup-i i bazës ishte bërë në versionin SQL Server 2016 dhe nuk ishte i përputhshëm me versionin tim SQL Server 2014.
  2. Në kompjuterin tim të punës ishte e instaluar Windows 7, ndaj nuk mund të azhurnoja SQL Server në versionin 2016
  3. Produkti përkrahur ishte pjesë e një sistemi më të madh me një arkitekturë legaci të fortë dhe gjithashtu i drejtohej produkteve dhe bazave të tjera, ndaj implementimi i tij në një stacion tjetër mund të kërkonte shumë kohë.

Duke pasur parasysh këtë, unë arrita në përfundimin se ishte koha për disa zgjidhje jo standarde.

Rindërtimi i të dhënave nga backup-i

Unë vendosa të përdor një makinë virtuale Oracle VM VirtualBox me Windows 10 (mund të merrni një imazh provë për shfletuesin Edge këtu). Në makinën virtuale u instalua SQL Server 2016 dhe nga backup-i u rikuperua baza e të dhënave të aplikacionit (udhëzimi).

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

Pastaj, ishte e nevojshme të ndërmerreshin disa hapa për të mundësuar qasjen 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ë qasja në server të bëhet jo përmes autentifikimit të Windows, por përmes SQL me emrin e përdoruesit dhe fjalëkalimin (më e lehtë për t'u konfiguruar qasja). Megjithatë, në këtë rast, mos harroni të aktivizoni mundësinë e autentifikimit SQL në pronësitë e SQL Server.
  3. Në cilësimet e përdoruesit në SQL Server në skedën User Mapping specifikoni për bazën e rikuperuar rolin e përdoruesit db_securityadmin.

Transferimi i të dhënave

Transferimi i të dhënave përfshin dy etapa:

  1. Transferimi i skemës së të dhënave (tabela, pamje, procedura të ruajtura, etj.)
  2. Transferimi i të dhënave të vërteta

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

Kryejmë operacionet e mëposhtme:

  1. Zgjidhni Tasks -> Generate Scripts për bazën e të dhënave që do të transferohet.
  2. Zgjidhni objektet e nevojshme për transferim ose lini vlerën e parazgjedhur (në këtë rast do të krijohen skriptet për të gjithë objektet e bazës).
  3. Specifikoni cilësimet për ruajtjen e skriptit. E përshtatshme është të ruani skriptin në një skedar të vetëm me kodimin Unicode. Kështu, në rast dështimi, nuk do të nevojitet të përsërisni të gjitha hapat.

Pas ruajtjes së skriptit, ai mund të ekzekutohet në SQL Server-in origjinal (versionin më të vjetër) për të krijuar bazën e nevojshme.

Kujdes: pas ekzekutimit të skriptit, është e nevojshme të kontrolloni përputhshmërinë e cilësimeve të bazës nga backup-i dhe bazës së krijuar nga skripti. Në rastin tim, në skript mungonte cilësimi për COLLATE, i cili çonte në dështim gjatë transferimit të të dhënave dhe kërkonte rregullime të menjëhershme për të ribërë bazën përmes një skripti të përmirësuar.

Transferimi i të dhënave

Para transferimit të të dhënave, është e nevojshme të çaktivizoni verifikimin e të gjitha kufizimeve në bazë:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

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

  1. Specifikoni cilësimet e lidhjes me burimin (SQL Server 2016 në makinën virtuale). Unë përdora Data Source SQL Server Native Client dhe autentifikimin SQL të përmendur më parë.
  2. Specifikoni cilësimet e lidhjes me destinacionin (SQL Server 2014 në makinë e hostit).
  3. Pastaj konfiguroni mapping-un. Duhet të zgjidhen të gjitha jo read-only objektet (për shembull, pamjet nuk duhet të zgjidhen). Si opsione shtesë, duhen zgjedhur «Lejo inserimin në kolona identity», nëse të tilla përdoren.
    Kujdes: nëse, gjatë përpjekjes për të zgjedhur disa tabela dhe t'u japim atyre këtë pronësi «Lejo inserimin në kolona identity» pronësia ishte tashmë e vendosur për të paktën një nga tabelat e zgjedhura, në dialog do të shënohet se pronësia është vendosur për të gjitha tabelat e zgjedhura. Ky fakt mund të ngatërrojë dhe të çojë në gabime të transferimit.
  4. Nisim transferimin.
  5. Rindërtojmë verifikimin e kufizimeve:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Nëse ndodhin ndonjë gabim, kontrolloni cilësimet, fshini bazën e krijuar me gabime, krijoni përsëri atë nga skripti, bëni rregullimet dhe përsërisni transferimin e të dhënave.

Përfundimi

Kjo detyrë ndodhet mjaft rrallë dhe shfaqet vetëm për shkak të kufizimeve të lartpërmendura. Në shumicën e rasteve, zgjidhja konsiston në azhurnimin e SQL Server-it ose në lidhjen me një server të largët, nëse arkitektura e aplikacionit e lejon. Megjithatë, askush nuk është i mbrojtur nga kodi legaci dhe gabimet nga zhvillimi i dobët. Shpresoj që ky udhëzues të mos ju nevojitet, dhe nëse e bëni kështu, do t'ju ndihmojë të kurseni shumë kohë dhe nerva. Faleminderit për vëmendjen!

Lista e burimeve të përdorura

Burimi: habr.com

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