Prijenos podataka sigurnosne kopije s nove verzije MS SQL Servera na stariju verziju

prapovijest

Jednom mi je, kako bih reproducirao bug, trebala sigurnosna kopija proizvodne baze podataka.

Na moje iznenađenje, naišao sam na sljedeća ograničenja:

  1. Sigurnosna kopija baze podataka napravljena je na verziji SQL Server 2016 i nije bio kompatibilan s mojim SQL Server 2014.
  2. Na mom radnom računalu korišten je OS Windows 7pa nisam mogao ažurirati SQL Server do verzije 2016
  3. Podržani proizvod bio je dio većeg sustava s usko povezanom naslijeđenom arhitekturom i također je komunicirao s drugim proizvodima i bazama, tako da bi moglo potrajati jako dugo da se postavi na drugu stanicu.

S obzirom na navedeno, došao sam do zaključka da je došlo vrijeme za štake nestandardnih rješenja.

Vraćanje podataka iz sigurnosne kopije

Odabrao sam korištenje virtualnog stroja Oracle VM VirtualBox sa sustavom Windows 10 (možete snimiti testnu sliku za preglednik Edge stoga). SQL Server 2016 je instaliran na virtualnom računalu i baza podataka aplikacije je vraćena iz sigurnosne kopije (nastava).

Konfiguriranje pristupa SQL Serveru na virtualnom računalu

Zatim je bilo potrebno poduzeti neke korake kako bi se pristupilo SQL Serveru izvana:

  1. Za vatrozid dodajte pravilo za preskakanje zahtjeva za priključak 1433.
  2. Poželjno je da pristup poslužitelju ne ide kroz Windows autentifikaciju, već kroz SQL uz pomoć prijave i lozinke (lakše je postaviti pristup). Međutim, u ovom slučaju morate zapamtiti da omogućite SQL autentifikaciju u svojstvima SQL Servera.
  3. U korisničkim postavkama na SQL Serveru na kartici Mapiranje korisnika navedite korisničku ulogu za obnovljenu bazu podataka db_sigurnosniadmin.

Prijenos podataka

Zapravo, sam prijenos podataka sastoji se od dvije faze:

  1. Prijenos sheme podataka (tablice, pogledi, pohranjene procedure itd.)
  2. Prijenos samih podataka

Prijenos sheme podataka

Izvodimo sljedeće operacije:

  1. odabrati Zadaci -> Generiraj skripte za prijenosnu bazu.
  2. Odaberite objekte koje trebate prenijeti ili ostavite zadanu vrijednost (u ovom slučaju, skripte će biti stvorene za sve objekte baze podataka).
  3. Odredite postavke za spremanje skripte. Najprikladnije je spremiti skriptu u jednu Unicode datoteku. Zatim, u slučaju neuspjeha, ne morate ponovno ponavljati sve korake.

Nakon što se skripta spremi, može se pokrenuti na izvornom SQL Serveru (staroj verziji) kako bi se stvorila potrebna baza.

Upozorenje: Nakon izvršavanja skripte potrebno je provjeriti podudarnost između postavki baze podataka iz sigurnosne kopije i baze koju je kreirala skripta. U mom slučaju u skripti nije bilo postavke za COLLATE, što je dovelo do kvara prilikom prijenosa podataka i plesa s tamburinom za ponovno stvaranje baze podataka pomoću dopunjene skripte.

Prijenos podataka

Prije prijenosa podataka morate onemogućiti provjeru svih ograničenja na bazi podataka:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Prijenos podataka provodi se pomoću čarobnjaka za uvoz podataka Zadaci -> Uvoz podataka na SQL Serveru, gdje se nalazi baza podataka stvorena skriptom:

  1. Navedite postavke veze s izvorom (SQL Server 2016 na virtualnom računalu). Koristio sam izvor podataka Izvorni klijent SQL poslužitelja i gore spomenutu SQL provjeru autentičnosti.
  2. Navedite postavke veze za odredište (SQL Server 2014 na glavnom računalu).
  3. Zatim postavite mapiranje. Svi moraju biti odabrani nije samo za čitanje objekata (primjerice, pogledi ne moraju biti odabrani). Kao dodatne opcije odaberite "Dopusti umetanje u stupce identiteta"ako se takvi koriste.
    Upozorenje: ako, kada pokušavate odabrati nekoliko tablica i postaviti njihovo svojstvo "Dopusti umetanje u stupce identiteta" ako je svojstvo već postavljeno za barem jednu od odabranih tablica, dijaloški okvir će pokazati da je svojstvo već postavljeno za sve odabrane tablice. Ova činjenica može biti zbunjujuća i dovesti do pogrešaka pri migraciji.
  4. Započinjemo prijenos.
  5. Vraćanje provjere ograničenja:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Ako se pojave greške, provjeravamo postavke, brišemo bazu podataka napravljenu s greškama, ponovno je kreiramo iz skripte, vršimo ispravke i ponavljamo prijenos podataka.

Zaključak

Ovaj zadatak je prilično rijedak i pojavljuje se samo zbog gore navedenih ograničenja. Najčešće rješenje je nadogradnja SQL Servera ili povezivanje s udaljenim poslužiteljem ako to arhitektura aplikacije dopušta. Međutim, nitko nije imun na naslijeđeni kod i krive ruke nekvalitetnog razvoja. Nadam se da vam ova uputa neće trebati, ali ako vam je još potrebna, pomoći će vam uštedjeti puno vremena i živaca. Hvala na pozornosti!

Popis korištenih izvora

Izvor: www.habr.com