Varundusandmete ülekandmine MS SQL Serveri uuest versioonist vanemasse versiooni

eelajalugu

Kunagi vajasin vea reprodutseerimiseks tootmisandmebaasi varukoopiat.

Endalegi üllatuseks puutusin kokku järgmiste piirangutega:

  1. Andmebaasi varukoopia tehti versioonile SQL Server 2016 ja ei sobinud minuga SQL Server 2014.
  2. Minu tööarvutis kasutati operatsioonisüsteemi Windows 7nii et ma ei saanud värskendada SQL Server kuni versioonini 2016
  3. Toetatud toode oli osa suuremast süsteemist, millel oli tihedalt seotud pärandarhitektuur, ning rääkis ka muudest toodetest ja alustest, nii et selle teise jaama juurutamine võib võtta väga kaua aega.

Eelnevat arvesse võttes jõudsin järeldusele, et on kätte jõudnud aeg ebastandardsete lahenduste karkude jaoks.

Andmete taastamine varukoopiast

Otsustasin kasutada virtuaalmasinat Oracle VM VirtualBox Windows 10-ga (saate teha Edge'i brauseri jaoks testpildi siit). Virtuaalsesse masinasse installiti SQL Server 2016 ja rakenduste andmebaas taastati varukoopiast (juhendamine).

Virtuaalses masinas SQL Serverile juurdepääsu konfigureerimine

Järgmiseks oli vaja astuda mõned sammud, et pääseda SQL Serverile väljastpoolt juurde:

  1. Tulemüüri jaoks lisage porditaotluste vahelejätmise reegel 1433.
  2. Soovitav on, et juurdepääs serverile ei toimuks Windowsi autentimise kaudu, vaid SQL-i kaudu, kasutades sisselogimist ja parooli (juurdepääsu on lihtsam seadistada). Kuid sel juhul peate meeles pidama SQL-i autentimise lubamist SQL Serveri atribuutides.
  3. SQL Serveri kasutajaseadetes vahekaardil Kasutaja kaardistamine määrake taastatud andmebaasi kasutaja roll db_securityadmin.

Andmete ülekanne

Tegelikult koosneb andmeedastus kahest etapist:

  1. Andmeskeemi edastamine (tabelid, vaated, salvestatud protseduurid jne)
  2. Andmete ülekandmine ise

Andmeskeemi edastamine

Teostame järgmisi toiminguid:

  1. valima Ülesanded -> Genereeri skripte kaasaskantava aluse jaoks.
  2. Valige ülekantavad objektid või jätke vaikeväärtus (sel juhul luuakse skriptid kõigi andmebaasiobjektide jaoks).
  3. Määrake skripti salvestamise sätted. Kõige mugavam on skript salvestada ühte Unicode'i faili. Seejärel ei pea te ebaõnnestumise korral kõiki samme uuesti kordama.

Kui skript on salvestatud, saab seda käitada algses SQL Serveris (vanas versioon), et luua vajalik baas.

Hoiatus: Pärast skripti käivitamist peate kontrollima varukoopiast pärineva andmebaasi ja skripti loodud andmebaasi sätete vastavust. Minu puhul puudus skriptis COLLATE seadistus, mis põhjustas andmete edastamisel ja tamburiiniga tantsimisel ebaõnnestumise, et täiendatud skripti abil andmebaas uuesti luua.

Andmete ülekanne

Enne andmete edastamist peate keelama kõigi andmebaasi piirangute kontrolli:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Andmeedastus toimub andmete importimise viisardi abil Ülesanded -> Impordi andmed SQL Serveris, kus asub skripti loodud andmebaas:

  1. Määrake ühenduse seaded allikaga (SQL Server 2016 virtuaalmasinas). Kasutasin andmeallikat SQL Serveri pärisklient ja eelnimetatud SQL-i autentimine.
  2. Määrake sihtkoha ühenduse sätted (hostmasinas SQL Server 2014).
  3. Järgmisena seadistage kaardistus. Kõik tuleb valida mitte kirjutuskaitstud objektid (näiteks vaateid pole vaja valida). Lisavalikutena valige "Luba sisestamine identiteedi veergudesse"kui selliseid kasutatakse.
    Hoiatus: kui, kui proovite valida mitu tabelit ja määrata nende omadusi "Luba sisestamine identiteedi veergudesse" atribuut on juba määratud vähemalt ühe valitud tabeli jaoks, näitab dialoog, et atribuut on juba määratud kõikidele valitud tabelitele. See asjaolu võib tekitada segadust ja viia migratsioonivigadeni.
  4. Alustame ülekandega.
  5. Piirangute kontrolli taastamine:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Vigade ilmnemisel kontrollime seadeid, kustutame vigadega loodud andmebaasi, loome skriptist uuesti, teeme parandused ja kordame andmeedastust.

Järeldus

See ülesanne on üsna haruldane ja toimub ainult ülaltoodud piirangute tõttu. Levinuim lahendus on SQL Serveri uuendamine või kaugserveriga ühenduse loomine, kui rakenduse arhitektuur seda võimaldab. Kuid keegi pole kaitstud pärandkoodi ja ebakvaliteetse arenduse kõverate käte eest. Loodan, et teil seda õpetust vaja ei lähe, aga kui teil seda siiski vaja läheb, aitab see säästa palju aega ja närve. Täname tähelepanu eest!

Kasutatud allikate loetelu

Allikas: www.habr.com