Trosglwyddo data wrth gefn o fersiwn newydd o MS SQL Server i fersiwn hŷn

cynhanes

Unwaith, i atgynhyrchu byg, roeddwn angen copi wrth gefn o'r gronfa ddata cynhyrchu.

Er mawr syndod i mi, rhedais i'r cyfyngiadau canlynol:

  1. Gwnaed copi wrth gefn o'r gronfa ddata ar y fersiwn SQL Server 2016 ac nid oedd yn gydnaws â fy SQL Server 2014.
  2. Ar fy nghyfrifiadur gwaith, yr OS a ddefnyddiwyd oedd Ffenestri 7felly ni allwn ddiweddaru SQL Gweinyddwr hyd at fersiwn 2016
  3. Roedd y cynnyrch â chymorth yn rhan o system fwy gyda phensaernïaeth etifeddiaeth wedi'i chyplysu'n dynn ac roedd hefyd yn cyrchu cynhyrchion a seiliau eraill, felly gallai gymryd amser hir iawn i'w ddefnyddio i orsaf arall.

O ystyried yr uchod, deuthum i'r casgliad bod yr amser wedi dod i faglau atebion ansafonol.

Adfer data o gopi wrth gefn

Dewisais ddefnyddio peiriant rhithwir Oracle VM VirtualBox gyda Windows 10 (gallwch gymryd delwedd prawf ar gyfer y porwr Edge felly). Gosodwyd SQL Server 2016 ar y peiriant rhithwir ac adferwyd cronfa ddata'r rhaglen o gopi wrth gefn (cyfarwyddyd).

Ffurfweddu mynediad i SQL Server ar beiriant rhithwir

Nesaf, roedd angen cymryd rhai camau i allu cyrchu SQL Server o'r tu allan:

  1. Ar gyfer y wal dân, ychwanegwch reol i ganiatáu i geisiadau porthladd basio 1433.
  2. Mae'n ddoeth nad yw mynediad i'r gweinydd yn digwydd trwy ddilysu Windows, ond trwy SQL gan ddefnyddio mewngofnodi a chyfrinair (mae'n haws ffurfweddu mynediad). Fodd bynnag, yn yr achos hwn, rhaid i chi gofio galluogi dilysiad SQL yn eiddo SQL Server.
  3. Yn y gosodiadau defnyddiwr ar SQL Server ar y tab Mapio Defnyddwyr nodi rôl y defnyddiwr ar gyfer y gronfa ddata wedi'i hadfer db_securityadmin.

Trosglwyddo data

Mewn gwirionedd, mae'r trosglwyddiad data ei hun yn cynnwys dau gam:

  1. Trosglwyddo sgema data (tablau, golygfeydd, gweithdrefnau wedi'u storio, ac ati)
  2. Trosglwyddo'r data ei hun

Trosglwyddo sgema data

Rydym yn cyflawni'r gweithrediadau canlynol:

  1. dewiswch Tasgau -> Cynhyrchu Sgriptiau ar gyfer sylfaen symudol.
  2. Dewiswch y gwrthrychau y mae angen i chi eu trosglwyddo neu gadewch y gwerth rhagosodedig (yn yr achos hwn, bydd sgriptiau'n cael eu creu ar gyfer holl wrthrychau'r gronfa ddata).
  3. Nodwch y gosodiadau ar gyfer cadw'r sgript. Mae'n fwyaf cyfleus cadw'r sgript mewn un ffeil Unicode. Yna, rhag ofn y bydd methiant, nid oes angen i chi ailadrodd yr holl gamau eto.

Unwaith y bydd y sgript wedi'i gadw, gellir ei weithredu ar y ffynhonnell SQL Server (hen fersiwn) i greu'r gronfa ddata ofynnol.

Rhybudd: Ar ôl gweithredu'r sgript, mae angen i chi wirio cysondeb gosodiadau'r gronfa ddata o'r copi wrth gefn a'r gronfa ddata a grëwyd gan y sgript. Yn fy achos i, nid oedd gan y sgript osodiad ar gyfer COLLATE, a arweiniodd at fethiant wrth drosglwyddo data a dawnsio gyda thambwrîn i ail-greu'r gronfa ddata gan ddefnyddio'r sgript estynedig.

Trosglwyddo data

Cyn trosglwyddo data, rhaid i chi analluogi gwirio'r holl gyfyngiadau ar y gronfa ddata:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Mae trosglwyddo data yn cael ei wneud gan ddefnyddio'r dewin mewnforio data Tasgau -> Mewnforio Data ar SQL Server, lle mae'r gronfa ddata a grëwyd gan y sgript wedi'i lleoli:

  1. Nodwch y gosodiadau cysylltiad â'r ffynhonnell (SQL Server 2016 ar beiriant rhithwir). Defnyddiais ffynhonnell data Cleient Brodorol Gweinydd SQL a'r dilysiad SQL a grybwyllwyd uchod.
  2. Rydym yn nodi'r gosodiadau cysylltiad â'r cyrchfan (SQL Server 2014 ar y peiriant gwesteiwr).
  3. Nesaf rydym yn gosod y mapio. Rhaid dewis pob un nid darllen yn unig gwrthrychau (er enghraifft, nid oes angen dewis golygfeydd). Fel opsiynau ychwanegol, dewiswch "Caniatáu mewnosod mewn colofnau hunaniaeth"os defnyddir y cyfryw.
    Rhybudd: os ceisiwch ddewis sawl tabl a aseinio'r eiddo iddynt "Caniatáu mewnosod mewn colofnau hunaniaeth" mae'r eiddo eisoes wedi'i osod ar gyfer o leiaf un o'r tablau a ddewiswyd, bydd yr ymgom yn nodi bod yr eiddo eisoes wedi'i osod ar gyfer yr holl dablau a ddewiswyd. Gall y ffaith hon fod yn ddryslyd ac arwain at wallau mudo.
  4. Rydyn ni'n dechrau'r trosglwyddiad.
  5. Adfer gwirio cyfyngiad:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Os bydd unrhyw wallau yn digwydd, rydym yn gwirio'r gosodiadau, yn dileu'r gronfa ddata a grëwyd gyda gwallau, yn ei hail-greu o'r sgript, yn gwneud cywiriadau ac yn ailadrodd y trosglwyddiad data.

Casgliad

Mae'r dasg hon yn eithaf prin ac yn digwydd dim ond oherwydd y cyfyngiadau uchod. Yr ateb mwyaf cyffredin yw uwchraddio SQL Server neu gysylltu â gweinydd pell os yw pensaernïaeth y rhaglen yn caniatáu hynny. Fodd bynnag, nid oes unrhyw un yn imiwn rhag y cod etifeddiaeth a dwylo cam datblygiad o ansawdd gwael. Gobeithiaf na fydd angen y cyfarwyddiadau hyn arnoch, ac os oes eu hangen arnoch, byddant yn eich helpu i arbed llawer o amser a nerfau. Diolch am eich sylw!

Rhestr o ffynonellau a ddefnyddiwyd

Ffynhonnell: hab.com