MS SQL Server-en bertsio berri batetik babeskopia datuak bertsio zaharrago batera transferitzea

historiaurrea

Behin, akats bat erreproduzitzeko, produkzio datu-basearen babeskopia bat behar nuen.

Nire harridurarako, muga hauekin egin nuen topo:

  1. Datu-basearen babeskopia bertsioan egin da SQL Server 2016 eta ez zen nirearekin bateragarria SQL Server 2014.
  2. Nire laneko ordenagailuan, erabilitako sistema eragilea zen Windows 7beraz, ezin izan dut eguneratu SQL Server 2016 bertsiora arte
  3. Onartutako produktua ondare-arkitektura hertsiki lotua zuen sistema handiago baten parte zen eta beste produktu eta oinarri batzuekin ere hitz egiten zuen, beraz, oso denbora luzea izan zitekeen beste geltoki batera zabaltzeko.

Aurrekoa ikusita, irtenbide ez-estandarren makuluen garaia iritsi dela ondorioztatu dut.

Babeskopia batetik datuak leheneratzea

Makina birtual bat erabiltzea aukeratu nuen Oracle VM VirtualBox Windows 10-rekin (Edge arakatzailerako proba-irudi bat har dezakezu beraz,). SQL Server 2016 makina birtualean instalatu zen eta aplikazioaren datu-basea babeskopiatik leheneratu zen (Instrukzio).

SQL Server-erako sarbidea makina birtual batean konfiguratzea

Ondoren, pauso batzuk eman behar ziren kanpotik SQL Server atzitu ahal izateko:

  1. Suebakirako, gehitu arau bat ataka-eskaerak saltatzeko 1433.
  2. Desiragarria da zerbitzarirako sarbidea Windows autentifikaziotik ez pasatzea, SQL bidez baizik, saioa hasteko eta pasahitza erabiliz (errazagoa da sarbidea konfiguratzea). Hala ere, kasu honetan, gogoratu behar duzu SQL autentifikazioa gaitzen duzula SQL Server propietateetan.
  3. SQL Server-en erabiltzailearen ezarpenetan fitxan Erabiltzaileen mapak zehaztu leheneratu datu-basearen erabiltzailearen rola db_securityadmin.

Datuen transferentzia

Izan ere, datu-transferentziak berak bi fase ditu:

  1. Datu-eskema transferitzea (taulak, ikuspegiak, gordetako prozedurak, etab.)
  2. Datuak berak transferitzea

Datu-eskema transferitzea

Eragiketa hauek egiten ditugu:

  1. Aukeratu Zereginak -> Sortu scripts oinarri eramangarri baterako.
  2. Hautatu transferitu behar dituzun objektuak edo utzi balio lehenetsia (kasu honetan, script-ak sortuko dira datu-baseko objektu guztientzat).
  3. Zehaztu scripta gordetzeko ezarpenak. Erosoena da script-a Unicode fitxategi bakar batean gordetzea. Orduan, hutsegite kasuan, ez dituzu urrats guztiak berriro errepikatu behar.

Script-a gorde ondoren, jatorrizko SQL Server (bertsio zaharra) exekutatu daiteke beharrezko oinarria sortzeko.

Abisua: Scripta exekutatu ondoren, segurtasun kopiako datu-basearen ezarpenen eta scriptak sortutako datu-basearen arteko korrespondentzia egiaztatu behar duzu. Nire kasuan, ez zegoen COLLATE ezarpenik gidoian, eta horrek porrot bat ekarri zuen datuak transferitzean eta pandero batekin dantzatzean datu-basea birsortzeko gidoi osagarria erabiliz.

Datuen transferentzia

Datuak transferitu aurretik, datu-baseko murrizketa guztien egiaztapena desgaitu behar duzu:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Datuen transferentzia datuak inportatzeko morroia erabiliz egiten da Zereginak -> Inportatu datuak SQL Server-en, non scriptak sortutako datu-basea dagoen:

  1. Zehaztu iturbururako konexio ezarpenak (SQL Server 2016 makina birtualean). Datu iturria erabili dut SQL Server Native Client eta aipatutako SQL autentifikazioa.
  2. Zehaztu helmugaren konexio-ezarpenak (SQL Server 2014 ostalariaren makina).
  3. Ondoren, konfiguratu mapak. Guztiak hautatu behar dira ez irakurtzeko soilik objektuak (adibidez, bistak ez dira hautatu behar). Aukera gehigarri gisa, hautatu "Onartu identitate-zutabeetan txertatzea"halakoak erabiltzen badira.
    Abisua: bada, hainbat taula hautatzen eta haien jabetza ezartzen saiatzean "Onartu identitate-zutabeetan txertatzea" propietatea dagoeneko hautatutako tauletako batentzat gutxienez ezarri da, elkarrizketa-koadroak adieraziko du propietatea dagoeneko hautatutako taula guztietarako ezarri dela. Gertaera hau nahasia izan daiteke eta migrazio akatsak sor ditzake.
  4. Transferentzia hasten dugu.
  5. Murrizketen egiaztapena leheneratu:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Akatsen bat gertatzen bada, ezarpenak egiaztatzen ditugu, akatsekin sortutako datu-basea ezabatzen dugu, scriptetik birsortzen dugu, zuzenketak egiten ditugu eta datu-transferentzia errepikatzen dugu.

Ondorioa

Zeregin hau nahiko arraroa da eta goiko mugengatik bakarrik gertatzen da. Irtenbide ohikoena SQL zerbitzaria berritzea edo urruneko zerbitzari batera konektatzea da, aplikazioaren arkitekturak ahalbidetzen badu. Hala ere, inor ez dago kalitate txarreko garapenaren kode oinetik eta esku okerretatik salbu. Espero dut argibide hau ez duzula beharko, baina oraindik behar baduzu, denbora eta nerbio asko aurrezten lagunduko dizu. Eskerrik asko zure arretagatik!

Erabilitako iturrien zerrenda

Iturria: www.habr.com