MS SQL Serveri uue versiooni varukoopia migreerimine vanemale versioonile

Eelalugu

Kord oli mul vaja tootmisandmebaasi varukoopia taastamiseks viga paljastada.

Minu üllatuseks kohtasin järgmisi piiranguid:

  1. Andmebaasi varukoopia tehti versioonil SQL Server 2016 ja see ei olnud ühilduv minu SQL Server 2014.
  2. Minu tööarvutis oli OS-iks Windows 7, seetõttu ei saanud ma uuendada SQL Server versioonile 2016
  3. Toetatud toode oli osa suuremast süsteemist koos tugeva seotud pärandi arhitektuuriga ja samuti suheldes teiste toodete ja andmebaasidega, seega võis selle paigaldamine teisele tööjaamale võtta väga kaua aega.

Kuna ma pidasin eelnevat silmas, jõudsin järeldusele, et on aeg rakendada erilahendusi.

Andmete taastamine varukoopiast

Otsustasin kasutada virtuaalset masinat Oracle VM VirtualBox Windows 10 (saab kasutada Edge'i brauseri jaoks testpilt siit). Virtuaalsesse masinasse installiti SQL Server 2016 ja sellel taastati rakenduse andmebaas varukoopiast (juhend).

SQL Serveri juurdepääsu seadistamine virtuaalses masinas

Edasi oli vajalik teha mõned sammud, et võimaldada juurdepääs SQL Serverile väljastpoolt:

  1. Firewalle lisage reegel porti päringute lubamiseks 1433.
  2. Soovitav on, et juurdepääs serverile ei toimuks Windowsi autentimise kaudu, vaid SQL-i kaudu, kasutades sisse logimise ja parooli (niimoodi on lihtsam juurdepääsu seadeid seadistada). Siiski tuleb sel juhul mitte unustada lubada SQL Serveri seadetes SQL-autentimise võimalust.
  3. Kasutaja seadetes SQL Serveris vahekaart Kasutaja mapimine tuleb määrata taastatud andmebaasi kasutaja roll db_securityadmin.

Andmete ülekandmine

Andmete ülekandmine koosneb kahest etapist:

  1. Andmeskeemi ülekandmine (tabelid, vaated, salvestatud protseduurid jne)
  2. Tegelik andmete ülekandmine

Andmeskeemi ülekandmine

Teeme järgmised toimingud:

  1. Valime Ülesanded -> Skriptide genereerimine ülekantavale andmebaasile.
  2. Valige vajalikud ülekantavad objektid või jätke vaikeväärtus (sel juhul luuakse skriptid kõigi andmebaasi objektide jaoks).
  3. Määrake skripti salvestamise seaded. Mugavam on salvestada skript üheks failiks Unicode-kodeeringus. Sel juhul ei pea kõik samme uuesti läbi viima, kui peaks juhtuma tõrge.

Pärast skripti salvestamist saab selle käivitada algses SQL Serveris (vana versioon), et luua vajalik andmebaas.

Tähtis: Pärast skripti käivitamist tuleb kontrollida, kas varukoopia ja skripti poolt loodud andmebaasi seaded vastavad. Minu puhul ei olnud skriptis COLLATE seadistust, mis põhjustas andmete ülekandmisel tõrkeid ja vajalikke samme andmebaasi ümberloomiseks täiendava skriptiga.

Andmete ülekandmine

Enne andmete ülekandmist tuleb keelduda kõigi piirangute kontrollimisest andmebaasis:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Andmete ülekandmine toimub andmete importimise assistendi abil Tasks -> Import Data SQL Serveris, kus asub skriptiga loodud andmebaas:

  1. Määrame ühenduse seaded allikaga (SQL Server 2016 virtuaalmasinas). Kasutasin Data Source SQL Server Native Client ja eeltoodud SQL-autentimist.
  2. Määrame ühenduse seaded sihtkohaga (SQL Server 2014 hostmasinas).
  3. Seejärel seadistame kaardistamise. Tuleb valida kõik mitte read-only objektid (nt vaateid pole vaja valida). Täiendavate valikute seas tuleb valida „Lubage sisestamine identiteedi veergudesse“, kui selliseid kasutatakse.
    Tähtis: kui proovite valida mitu tabelit ja määrata neile omaduse „Lubage sisestamine identiteedi veergudesse“ omadus on juba seadistatud vähemalt ühe valitud tabeli jaoks, dialoogis märgitakse, et omadus on juba seadistatud kõigi valitud tabelite jaoks. See võib tekitada segadust ja viia ülekandmist puudutavate vigadeni.
  4. Alustame ülekannet.
  5. Taastame piirangute kontrollimise:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Kui tekivad vead, kontrollime seadeid, eemaldame vigadega loodud andmebaasi, loome selle uuesti skripti abil, teeme parandused ja kordame andmete ülekannet.

Kokkuvõte

See probleem esineb küllalt harva ja tuleneb ainult ülaltoodud piirangutest. Enamasti seisneb lahendus SQL Serveri värskendamises või kaugserveri kasutamises, kui rakenduse arhitektuur seda lubab. Siiski ei ole keegi kaitstud pärandkoodide ja halva kvaliteediga arenduse põhjustatud vigade eest. Loodan, et see juhend ei osutu vajalikuks, kuid kui siiski esineb vajadus, siis aitab see säästa palju aega ja närve. Aitäh tähelepanu eest!

Kasutatud allikate loetelu

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster