Transferimi i të dhënave rezervë nga një version i ri i MS SQL Server në një version më të vjetër

parahistorinë

Një herë, për të riprodhuar një gabim, më duhej një kopje rezervë e bazës së të dhënave të prodhimit.

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

  1. Rezervimi i bazës së të dhënave është bërë në version SQL Server 2016 dhe nuk ishte në përputhje me timen SQL Server 2014.
  2. Në kompjuterin tim të punës, sistemi operativ i përdorur ishte Dritaret 7kështu që nuk mund të përditësoja SQL Server deri në versionin 2016
  3. Produkti i mbështetur ishte pjesë e një sistemi më të madh me një arkitekturë të trashëguar të lidhur ngushtë dhe gjithashtu foli me produkte dhe baza të tjera, kështu që mund të duhej një kohë shumë e gjatë për ta vendosur atë në një stacion tjetër.

Nisur nga sa më sipër, arrita në përfundimin se ka ardhur koha për paterica zgjidhjesh jo standarde.

Rivendosja e të dhënave nga një kopje rezervë

Zgjodha të përdor një makinë virtuale Oracle VM VirtualBox me Windows 10 (mund të bëni një imazh provë për shfletuesin Edge prandaj). SQL Server 2016 u instalua në makinën virtuale dhe baza e të dhënave të aplikacionit u rivendos nga rezervimi (udhëzim).

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

Më pas, ishte e nevojshme të ndërmerreshin disa hapa për të pasur qasje në SQL Server nga jashtë:

  1. Për murin e zjarrit, shtoni një rregull për të kapërcyer kërkesat e portit 1433.
  2. Është e dëshirueshme që qasja në server të mos kalojë përmes autentifikimit të Windows, por përmes SQL duke përdorur një hyrje dhe fjalëkalim (është më e lehtë të konfigurosh aksesin). Sidoqoftë, në këtë rast, duhet të mbani mend që të aktivizoni Autentifikimin SQL në vetitë e SQL Server.
  3. Në cilësimet e përdoruesit në SQL Server në skedën Harta e përdoruesit specifikoni rolin e përdoruesit për bazën e të dhënave të rivendosur db_securityadmin.

Transferimi i të dhënave

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

  1. Transferimi i skemës së të dhënave (tabelat, pamjet, procedurat e ruajtura, etj.)
  2. Transferimi i të dhënave në vetvete

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

Ne kryejmë operacionet e mëposhtme:

  1. zgjedh Detyrat -> Gjenerimi i skripteve për një bazë portative.
  2. Zgjidhni objektet që ju nevojiten për të transferuar ose lini vlerën e paracaktuar (në këtë rast, skriptet do të krijohen për të gjitha objektet e bazës së të dhënave).
  3. Specifikoni cilësimet për ruajtjen e skriptit. Është më e përshtatshme për të ruajtur skriptin në një skedar të vetëm Unicode. Pastaj, në rast dështimi, nuk keni nevojë të përsërisni të gjitha hapat përsëri.

Pasi të ruhet skripti, ai mund të ekzekutohet në serverin origjinal SQL (versioni i vjetër) për të krijuar bazën e kërkuar.

Warning: Pas ekzekutimit të skriptit, duhet të kontrolloni korrespondencën midis cilësimeve të bazës së të dhënave nga rezervimi dhe bazës së të dhënave të krijuar nga skripti. Në rastin tim, nuk kishte asnjë cilësim për COLLATE në skenar, gjë që çoi në një dështim gjatë transferimit të të dhënave dhe kërcimit me një dajre për të rikrijuar bazën e të dhënave duke përdorur skenarin e plotësuar.

Transferimi i të dhënave

Para transferimit të të dhënave, duhet të çaktivizoni kontrollin e të gjitha kufizimeve në bazën e të dhënave:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Transferimi i të dhënave kryhet duke përdorur magjistarin e importit të të dhënave Detyrat -> Importoni të dhëna në SQL Server, ku ndodhet baza e të dhënave e krijuar nga skripti:

  1. Specifikoni cilësimet e lidhjes me burimin (SQL Server 2016 në një makinë virtuale). Kam përdorur burimin e të dhënave Klienti vendas i serverit SQL dhe vërtetimi i lartpërmendur SQL.
  2. Specifikoni cilësimet e lidhjes për destinacionin (SQL Server 2014 në kompjuterin pritës).
  3. Më pas, konfiguroni hartën. Të gjithë duhet të zgjidhen jo vetëm për lexim objektet (për shembull, pamjet nuk kanë nevojë të zgjidhen). Si opsione shtesë, zgjidhni "Lejo futjen në kolonat e identitetit"nëse përdoren të tilla.
    Warning: nëse, kur përpiqeni të zgjidhni disa tabela dhe të vendosni vetinë e tyre "Lejo futjen në kolonat e identitetit" vetia tashmë është vendosur për të paktën njërën nga tabelat e zgjedhura, dialogu do të tregojë se vetia tashmë është vendosur për të gjitha tabelat e zgjedhura. Ky fakt mund të jetë konfuz dhe të çojë në gabime të migrimit.
  4. Ne fillojmë transferimin.
  5. Rivendosja e kontrollit të kufizimeve:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Nëse ndodh ndonjë gabim, ne kontrollojmë cilësimet, fshijmë bazën e të dhënave të krijuar me gabime, e rikrijojmë atë nga skripti, bëjmë korrigjime dhe përsërisim transferimin e të dhënave.

Përfundim

Kjo detyrë është mjaft e rrallë dhe ndodh vetëm për shkak të kufizimeve të mësipërme. Zgjidhja më e zakonshme është të përmirësoni SQL Server ose të lidheni me një server të largët nëse arkitektura e aplikacionit e lejon atë. Megjithatë, askush nuk është i imunizuar nga kodi i trashëguar dhe duart e shtrembër të zhvillimit me cilësi të dobët. Shpresoj se nuk do t'ju duhet ky udhëzim, por nëse ende keni nevojë për të, do t'ju ndihmojë të kurseni shumë kohë dhe nerva. Faleminderit per vemendjen!

Lista e burimeve të përdorura

Burimi: www.habr.com