Varmuuskopiotietojen siirtäminen uudesta MS SQL Server -versiosta vanhempaan versioon

esihistoria

Kerran tarvitsin varmuuskopion tuotantotietokannasta voidakseni toistaa virheen.

Yllätyksekseni törmäsin seuraaviin rajoituksiin:

  1. Tietokannan varmuuskopio tehtiin versiolle SQL Server 2016 eikä se ollut yhteensopiva minun kanssani SQL Server 2014.
  2. Työtietokoneellani käyttöjärjestelmä oli Windows 7joten en voinut päivittää SQL Server versioon 2016 asti
  3. Tuettu tuote oli osa suurempaa järjestelmää, jossa oli tiukasti kytketty vanha arkkitehtuuri, ja se puhui myös muiden tuotteiden ja tukiasemien kanssa, joten sen käyttöönotto toiselle asemalle voi kestää hyvin kauan.

Yllä olevan perusteella tulin siihen tulokseen, että on tullut aika epätyypillisten ratkaisujen kainalosauvojen käyttöön.

Tietojen palauttaminen varmuuskopiosta

Päätin käyttää virtuaalikoneen Oracle VM VirtualBox Windows 10:llä (voit ottaa testikuvan Edge-selaimelle siten). SQL Server 2016 asennettiin virtuaalikoneeseen ja sovellustietokanta palautettiin varmuuskopiosta (opetus).

SQL Serverin käyttöoikeuden määrittäminen virtuaalikoneen

Seuraavaksi oli tarpeen tehdä joitain toimenpiteitä päästäkseen SQL Serveriin ulkopuolelta:

  1. Lisää palomuurille sääntö porttipyyntöjen ohittamiseksi 1433.
  2. On toivottavaa, että pääsy palvelimelle ei tapahdu Windows-todennuksen kautta, vaan SQL:n kautta sisäänkirjautumisen ja salasanan avulla (pääsyn määrittäminen on helpompaa). Tässä tapauksessa sinun on kuitenkin muistettava ottaa SQL-todennus käyttöön SQL Server -ominaisuuksissa.
  3. SQL Serverin käyttäjäasetuksissa välilehdellä Käyttäjän kartoitus määritä palautetun tietokannan käyttäjärooli db_securityadmin.

Tiedonsiirto

Itse tiedonsiirto koostuu kahdesta vaiheesta:

  1. Tietoskeeman siirto (taulukot, näkymät, tallennetut toiminnot jne.)
  2. Itse tietojen siirto

Tietoskeeman siirto

Suoritamme seuraavat toiminnot:

  1. valita Tehtävät -> Luo komentosarjat kannettavalle alustalle.
  2. Valitse siirrettävät objektit tai jätä oletusarvot (tässä tapauksessa skriptit luodaan kaikille tietokantaobjekteille).
  3. Määritä komentosarjan tallennusasetukset. On kätevintä tallentaa komentosarja yhteen Unicode-tiedostoon. Vian sattuessa sinun ei tarvitse toistaa kaikkia vaiheita uudelleen.

Kun komentosarja on tallennettu, se voidaan ajaa alkuperäisessä SQL Serverissä (vanha versio) tarvittavan pohjan luomiseksi.

Varoitus: Skriptin suorittamisen jälkeen sinun on tarkistettava varmuuskopion tietokannan asetusten ja komentosarjan luoman tietokannan välinen vastaavuus. Minun tapauksessani skriptissä ei ollut COLLATE-asetusta, mikä johti epäonnistumiseen tiedonsiirrossa ja tamburiinilla tanssiessa tietokannan luomisessa uudelleen täydennetyn skriptin avulla.

Tiedonsiirto

Ennen tietojen siirtämistä sinun on poistettava kaikkien tietokannan rajoitusten tarkistus:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Tiedonsiirto tapahtuu ohjatun tiedontuontitoiminnon avulla Tehtävät -> Tuo tiedot SQL Serverissä, jossa komentosarjan luoma tietokanta sijaitsee:

  1. Määritä yhteysasetukset lähteeseen (SQL Server 2016 virtuaalikoneessa). Käytin tietolähdettä SQL Server Native Client ja edellä mainittu SQL-todennus.
  2. Määritä yhteysasetukset kohteelle (SQL Server 2014 isäntäkoneella).
  3. Seuraavaksi määritä kartoitus. Kaikki on valittava ei vain luku -tilassa objektit (esimerkiksi näkymiä ei tarvitse valita). Valitse lisävaihtoehtoina "Salli lisääminen identiteettisarakkeisiin"jos sellaisia ​​käytetään.
    Varoitus: jos, kun yrität valita useita taulukoita ja asettaa niiden ominaisuudet "Salli lisääminen identiteettisarakkeisiin" ominaisuus on jo asetettu ainakin yhdelle valituista taulukoista, valintaikkuna ilmoittaa, että ominaisuus on jo asetettu kaikille valituille taulukoille. Tämä tosiasia voi olla hämmentävää ja johtaa siirtovirheisiin.
  4. Aloitamme siirron.
  5. Rajoitustarkistuksen palauttaminen:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Jos virheitä ilmenee, tarkistamme asetukset, poistamme virheellisen tietokannan, luomme sen uudelleen skriptistä, teemme korjauksia ja toistamme tiedonsiirron.

Johtopäätös

Tämä tehtävä on melko harvinainen ja tapahtuu vain yllä olevien rajoitusten vuoksi. Yleisin ratkaisu on päivittää SQL Server tai muodostaa yhteys etäpalvelimeen, jos sovellusarkkitehtuuri sen sallii. Kukaan ei kuitenkaan ole immuuni vanhalta koodilta ja huonolaatuisen kehityksen kieroilta käsiltä. Toivon, että et tarvitse tätä ohjetta, mutta jos tarvitset sitä edelleen, se auttaa säästämään paljon aikaa ja hermoja. Kiitos huomiostasi!

Luettelo käytetyistä lähteistä

Lähde: will.com