Dublējuma datu pārsūtīšana no jaunas MS SQL Server versijas uz vecāku versiju

Aizvēsture

Reiz, lai reproducētu kļūdu, man bija nepieciešams ražošanas datu bāzes dublējums.

Man par pārsteigumu es saskāros ar šādiem ierobežojumiem:

  1. Datu bāzes dublējums tika izveidots versijā SQL Server 2016 un nebija saderīgs ar manu SQL Server 2014.
  2. Manā darba datorā izmantotā OS bija Windows 7tāpēc es nevarēju atjaunināt SQL Server līdz versijai 2016
  3. Atbalstītais produkts bija daļa no lielākas sistēmas ar cieši savienotu mantoto arhitektūru, kā arī runāja ar citiem produktiem un bāzēm, tāpēc tā izvietošana citā stacijā var aizņemt ļoti ilgu laiku.

Ņemot vērā iepriekš minēto, nonācu pie secinājuma, ka ir pienācis laiks nestandarta risinājumu kruķiem.

Datu atjaunošana no dublējuma

Es izvēlējos izmantot virtuālo mašīnu Oracle VM VirtualBox ar operētājsistēmu Windows 10 (varat veikt pārbaudes attēlu pārlūkprogrammai Edge tātad). Virtuālajā mašīnā tika instalēts SQL Server 2016, un lietojumprogrammu datu bāze tika atjaunota no dublējuma (norādījums).

Piekļuves SQL Server konfigurēšana virtuālajā mašīnā

Pēc tam bija jāveic dažas darbības, lai varētu piekļūt SQL Server no ārpuses:

  1. Ugunsmūrim pievienojiet noteikumu, lai izlaistu porta pieprasījumus 1433.
  2. Vēlams, lai piekļuve serverim nenotiek caur Windows autentifikāciju, bet gan caur SQL, izmantojot pieteikumvārdu un paroli (vieglāk ir iestatīt piekļuvi). Tomēr šajā gadījumā SQL Server rekvizītos ir jāiespējo SQL autentifikācija.
  3. Lietotāja iestatījumos SQL Server cilnē Lietotāja kartēšana norādiet atjaunotās datu bāzes lietotāja lomu db_securityadmin.

Datu pārsūtīšana

Faktiski pati datu pārsūtīšana sastāv no diviem posmiem:

  1. Datu shēmu pārsūtīšana (tabulas, skati, saglabātās procedūras utt.)
  2. Pati datu pārsūtīšana

Datu shēmas pārsūtīšana

Veicam sekojošas operācijas:

  1. atlasīt Uzdevumi -> Ģenerēt skriptus pārnēsājamai pamatnei.
  2. Atlasiet objektus, kas jāpārsūta, vai atstājiet noklusējuma vērtību (šajā gadījumā tiks izveidoti skripti visiem datu bāzes objektiem).
  3. Norādiet skripta saglabāšanas iestatījumus. Visērtāk ir saglabāt skriptu vienā unikoda failā. Tad neveiksmes gadījumā visas darbības nav jāatkārto vēlreiz.

Kad skripts ir saglabāts, to var palaist oriģinālajā SQL Server (vecajā versijā), lai izveidotu nepieciešamo bāzi.

Brīdinājums: Pēc skripta izpildes jums jāpārbauda atbilstība starp datu bāzes iestatījumiem no dublējuma un skripta izveidotās datu bāzes. Manā gadījumā skriptā nebija iestatījuma COLLATE, kas noveda pie neveiksmes, pārsūtot datus un dejojot ar tamburīnu, lai atjaunotu datubāzi, izmantojot papildināto skriptu.

Datu pārsūtīšana

Pirms datu pārsūtīšanas ir jāatspējo visu datu bāzes ierobežojumu pārbaude:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Datu pārsūtīšana tiek veikta, izmantojot datu importēšanas vedni Uzdevumi -> Importēt datus SQL serverī, kur atrodas skripta izveidotā datu bāze:

  1. Norādiet savienojuma iestatījumus ar avotu (SQL Server 2016 virtuālajā mašīnā). Es izmantoju datu avotu SQL Server Native Client un iepriekšminētā SQL autentifikācija.
  2. Norādiet savienojuma iestatījumus galamērķim (SQL Server 2014 resursdatorā).
  3. Pēc tam iestatiet kartēšanu. Visi ir jāatlasa nav tikai lasāms objekti (piemēram, skati nav jāizvēlas). Kā papildu opcijas atlasiet "Atļaut ievietošanu identitātes kolonnās"ja tādas tiek izmantotas.
    Brīdinājums: ja, mēģinot atlasīt vairākas tabulas un iestatīt to īpašumu "Atļaut ievietošanu identitātes kolonnās" rekvizīts jau ir iestatīts vismaz vienai no atlasītajām tabulām, dialoglodziņā tiks norādīts, ka rekvizīts jau ir iestatīts visām atlasītajām tabulām. Šis fakts var mulsināt un izraisīt migrācijas kļūdas.
  4. Mēs sākam pārsūtīšanu.
  5. Ierobežojuma pārbaudes atjaunošana:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Ja rodas kādas kļūdas, mēs pārbaudām iestatījumus, izdzēšam ar kļūdām izveidoto datu bāzi, izveidojam to no jauna no skripta, veicam labojumus un atkārtojam datu pārsūtīšanu.

Secinājums

Šis uzdevums ir diezgan reti sastopams un notiek tikai iepriekš minēto ierobežojumu dēļ. Visizplatītākais risinājums ir jaunināt SQL Server vai izveidot savienojumu ar attālo serveri, ja lietojumprogrammas arhitektūra to atļauj. Tomēr neviens nav pasargāts no mantotā koda un nekvalitatīvas izstrādes līkajām rokām. Es ceru, ka šī instrukcija jums nebūs vajadzīga, bet, ja jums tā joprojām ir nepieciešama, tas palīdzēs ietaupīt daudz laika un nervu. Paldies par jūsu uzmanību!

Izmantoto avotu saraksts

Avots: www.habr.com