It oerdragen fan reservekopygegevens fan in nije ferzje fan MS SQL Server nei in âldere ferzje

prehistoarje

Ienris, om in brek te reprodusearjen, hie ik in reservekopy nedich fan 'e produksjedatabase.

Ta myn ferrassing kaam ik de folgjende beheinings tsjin:

  1. De databank-backup is makke op 'e ferzje SQL Server 2016 en wie net kompatibel mei mines SQL Server 2014.
  2. Op myn wurkkomputer wie it OS Windows 7dus ik koe net bywurkje SQL Server oant ferzje 2016
  3. It stipe produkt wie diel fan in grutter systeem mei in strak keppele legacy arsjitektuer en ek tagong ta oare produkten en bases, dus it koe in hiel lange tiid te ynsetten nei in oar stasjon.

Mei it each op it boppesteande kaam ik ta de konklúzje dat de tiid kommen is foar de krukken fan net-standert oplossingen.

Gegevens weromsette fan reservekopy

Ik besleat in firtuele masine te brûken Oracle VM VirtualBox mei Windows 10 (jo kinne in testôfbylding nimme foar de Edge-blêder fan hjir). SQL Server 2016 waard ynstalleare op 'e firtuele masine en de applikaasjedatabase waard weromset fan in reservekopy (hantlieding).

Ynstelle fan tagong ta SQL Server op in firtuele masine

Dêrnei wie it nedich om wat stappen te nimmen om it mooglik te meitsjen fan tagong ta SQL Server fan bûten:

  1. Foar de brânmuorre, foegje in regel ta om poartefersiken troch te jaan 1433.
  2. It is oan te rieden dat tagong ta de tsjinner net foarkomt fia Windows-ferifikaasje, mar fia SQL mei in oanmelding en wachtwurd (it is makliker om tagong te konfigurearjen). Yn dit gefal moatte jo lykwols ûnthâlde om SQL-ferifikaasje yn te skeakeljen yn 'e SQL Server-eigenskippen.
  3. Yn 'e brûkersynstellingen op SQL Server op' e ljepper Meidogger Mapping spesifisearje de brûker rol foar de restaurearre databank db_securityadmin.

Gegevens oerdracht

Eigentlik bestiet de gegevensoerdracht sels út twa stadia:

  1. Gegevensskema oerdrage (tabellen, werjeften, bewarre prosedueres, ensfh.)
  2. It oerdragen fan de gegevens sels

Data Schema Transfer

Wy fiere de folgjende operaasjes út:

  1. Kies Taken -> Skripten generearje foar in draachbere basis.
  2. Selektearje de objekten dy't jo moatte oerdrage of ferlitte de standertwearde (yn dit gefal wurde skripts makke foar alle databankobjekten).
  3. Spesifisearje ynstellings foar it bewarjen fan it skript. De maklikste manier is om it skript op te slaan yn ien bestân yn Unicode-kodearring. Dan, as d'r in mislearring is, hoege jo net alle stappen opnij te werheljen.

Sadree't it skript is bewarre, kin it wurde útfierd op 'e boarne SQL Server (âlde ferzje) om de fereaske databank te meitsjen.

Warskôging: Nei it útfieren fan it skript moatte jo de konsistinsje fan 'e databankynstellingen kontrolearje fan' e reservekopy en de databank makke troch it skript. Yn myn gefal hie it skript gjin ynstelling foar COLLATE, wat late ta in mislearring by it oerdragen fan gegevens en dûnsjen mei in tamboerine om de databank opnij te meitsjen mei it fergrutte skript.

Gegevens oerdracht

Foardat jo gegevens oerdrage, moatte jo it kontrolearjen fan alle beheiningen op 'e databank útskeakelje:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Gegevens oerdracht wurdt útfierd mei de wizard Gegevens ymportearje Taken -> Gegevens ymportearje op SQL Server, wêr't de database makke troch it skript leit:

  1. Spesifisearje de ferbiningynstellingen nei de boarne (SQL Server 2016 op in firtuele masine). Ik brûkte gegevensboarne SQL Server Native Client en de earder neamde SQL-ferifikaasje.
  2. Wy spesifisearje de ferbining ynstellings nei de bestimming (SQL Server 2014 op de host masine).
  3. Dêrnei sette wy de mapping op. Jo moatte alles selektearje net allinich lêzen objekten (bygelyks werjeften hoege net te selektearjen). Oanfoljende opsjes moatte wurde selektearre "Tastaan ​​ynfoegje yn identiteitskolommen", as sokke wurde brûkt.
    Warskôging: as jo besykje te selektearjen ferskate tabellen en tawize it pân oan harren "Tastaan ​​ynfoegje yn identiteitskolommen" it pân is al earder ynsteld foar op syn minst ien fan de selektearre tabellen, it dialoochfinster sil oanjaan dat it pân is al ynsteld foar alle selektearre tabellen. Dit feit kin betiizjend wêze en liede ta oerdrachtflaters.
  4. Litte wy de oerdracht begjinne.
  5. De beheiningkontrôle weromsette:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

As der flaters foarkomme, kontrolearje wy de ynstellings, wiskje de database makke mei flaters, meitsje it opnij oan fan it skript, meitsje korreksjes en werhelje de gegevensoerdracht.

konklúzje

Dizze taak is frij seldsum en ûntstiet allinich troch de boppesteande beheiningen. De meast foarkommende oplossing is om SQL-tsjinner te upgrade of te ferbinen mei in tsjinner op ôfstân as de applikaasje-arsjitektuer it talit. Nimmen is lykwols feilich foar legacy-koade en de kromme hannen fan ûntwikkeling fan minne kwaliteit. Ik hoopje dat jo dizze ynstruksjes net nedich binne, en as jo se nedich binne, sille se jo helpe om in protte tiid en senuwen te besparjen. Tank foar jo oandacht!

Spisok ispolzovannyx istochnikov

Boarne: www.habr.com

Add a comment