Atsarginių duomenų perkėlimas iš naujos MS SQL Server versijos į senesnę versiją

priešistorė

Kartą, norint atkurti klaidą, man reikėjo atsarginės gamybos duomenų bazės kopijos.

Mano nuostabai, susidūriau su šiais apribojimais:

  1. Duomenų bazės atsarginė kopija buvo sukurta versija "SQL Server 2016 ir buvo nesuderinamas su manuoju "SQL Server 2014.
  2. Mano darbo kompiuteryje buvo OS langai 7todėl negalėjau atnaujinti "SQL Server iki 2016 versijos
  3. Palaikomas produktas buvo didesnės sistemos dalis su glaudžiai susieta senąja architektūra, taip pat buvo pasiekiami kiti produktai ir bazės, todėl gali užtrukti labai ilgai, kol jis bus įdiegtas į kitą stotį.

Atsižvelgdamas į tai, kas išdėstyta, padariau išvadą, kad atėjo laikas nestandartinių sprendimų ramentams.

Duomenų atkūrimas iš atsarginės kopijos

Nusprendžiau naudoti virtualią mašiną "Oracle VM VirtualBox su „Windows 10“ (galite padaryti bandomąjį „Edge“ naršyklės vaizdą taigi). SQL Server 2016 buvo įdiegtas virtualioje mašinoje, o programų duomenų bazė buvo atkurta iš atsarginės kopijos (mokymas).

Prieigos prie SQL serverio nustatymas virtualioje mašinoje

Tada reikėjo imtis tam tikrų veiksmų, kad būtų galima pasiekti SQL serverį iš išorės:

  1. Užkardai pridėkite taisyklę, leidžiančią perduoti prievado užklausas 1433.
  2. Patartina, kad prieiga prie serverio vyktų ne per „Windows“ autentifikavimą, o per SQL, naudojant prisijungimo vardą ir slaptažodį (prieigą konfigūruoti lengviau). Tačiau šiuo atveju turite nepamiršti įjungti SQL autentifikavimo SQL serverio ypatybėse.
  3. SQL serverio vartotojo nustatymuose skirtuke Vartotojo atvaizdavimas nurodykite atkurtos duomenų bazės vartotojo vaidmenį db_securityadmin.

Duomenų perdavimas

Tiesą sakant, pats duomenų perdavimas susideda iš dviejų etapų:

  1. Duomenų schemos (lentelių, rodinių, saugomų procedūrų ir kt.) perkėlimas
  2. Pats duomenų perkėlimas

Duomenų schemos perkėlimas

Atliekame šias operacijas:

  1. pasirinkti Užduotys -> Generuoti scenarijus nešiojamam pagrindui.
  2. Pasirinkite objektus, kuriuos norite perkelti, arba palikite numatytąją reikšmę (šiuo atveju scenarijai bus sukurti visiems duomenų bazės objektams).
  3. Nurodykite scenarijaus išsaugojimo nustatymus. Patogiausias būdas yra įrašyti scenarijų viename faile Unicode koduotėje. Tada, jei įvyko gedimas, jums nereikės pakartoti visų veiksmų.

Išsaugojus scenarijų, jį galima vykdyti šaltinio SQL serveryje (senoje versijoje), kad būtų sukurta reikalinga duomenų bazė.

Įspėjimas: Įvykdžius scenarijų, reikia patikrinti duomenų bazės nustatymų nuoseklumą iš atsarginės kopijos ir scenarijaus sukurtos duomenų bazės. Mano atveju, scenarijus neturėjo COLLATE nustatymo, dėl ko nepavyko perduoti duomenis ir šokant su tamburinu iš naujo sukurti duomenų bazę naudojant papildytą scenarijų.

Duomenų perdavimas

Prieš perkeldami duomenis, turite išjungti visų duomenų bazės apribojimų tikrinimą:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Duomenų perdavimas atliekamas naudojant duomenų importavimo vedlį Užduotys -> Importuoti duomenis SQL serveryje, kur yra scenarijaus sukurta duomenų bazė:

  1. Nurodykite ryšio su šaltiniu parametrus („SQL Server 2016“ virtualioje mašinoje). Naudojau duomenų šaltinį SQL serverio vietinis klientas ir anksčiau minėtas SQL autentifikavimas.
  2. Nurodome ryšio nustatymus su paskirties vieta (pagrindiniame kompiuteryje SQL Server 2014).
  3. Toliau nustatome žemėlapių sudarymą. Turite pasirinkti visus ne tik skaitomas objektus (pavyzdžiui, rodinių pasirinkti nereikia). Reikėtų pasirinkti papildomas parinktis „Leisti įterpti į tapatybės stulpelius“, jei tokie naudojami.
    Įspėjimas: jei bandysite pasirinkti kelias lenteles ir priskirti joms ypatybę „Leisti įterpti į tapatybės stulpelius“ ypatybė jau buvo nustatyta bent vienai iš pasirinktų lentelių, dialogo lange bus nurodyta, kad ypatybė jau nustatyta visoms pasirinktoms lentelėms. Šis faktas gali suklaidinti ir sukelti perdavimo klaidų.
  4. Pradėkime perkėlimą.
  5. Apribojimų patikros atkūrimas:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Jei atsiranda klaidų, patikriname nustatymus, ištriname su klaidomis sukurtą duomenų bazę, iš naujo sukuriame iš scenarijaus, atliekame pataisymus ir kartojame duomenų perdavimą.

išvada

Ši užduotis yra gana reta ir kyla tik dėl minėtų apribojimų. Dažniausias sprendimas yra atnaujinti SQL serverį arba prisijungti prie nuotolinio serverio, jei programos architektūra tai leidžia. Tačiau niekas nėra apsaugotas nuo senojo kodo ir prastos kokybės plėtros kreivų rankų. Tikiuosi, kad šios instrukcijos jums neprireiks, o jei prireiks, tai padės sutaupyti daug laiko ir nervų. Ačiū už dėmesį!

Naudotų šaltinių sąrašas

Šaltinis: www.habr.com