Prenošenje rezervnih podataka sa nove verzije MS SQL Servera na stariju verziju

prapovijest

Jednom mi je, da bih reprodukovao grešku, bila potrebna rezervna kopija proizvodne baze podataka.

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

  1. Backup baze podataka je napravljen na verziji SQL Server 2016 i nije bio kompatibilan sa mojim SQL Server 2014.
  2. Na mom radnom računaru korišteni OS je bio Windows 7pa nisam mogao ažurirati SQL Server do verzije 2016
  3. Podržani proizvod je bio dio većeg sistema sa čvrsto povezanom naslijeđenom arhitekturom i također je razgovarao s drugim proizvodima i bazama, tako da je 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 da koristim virtuelnu mašinu Oracle VM VirtualBox sa Windows 10 (možete uzeti probnu sliku za Edge pretraživač odavde). SQL Server 2016 je instaliran na virtuelnoj mašini i baza podataka aplikacije je vraćena iz rezervne kopije (manuelno).

Konfigurisanje pristupa SQL Serveru na virtuelnoj mašini

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

  1. Za zaštitni zid dodajte pravilo za preskakanje zahtjeva za portovima 1433.
  2. Poželjno je da pristup serveru ne ide kroz windows autentifikaciju, već preko SQL-a koristeći login i lozinku (lakše je podesiti 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_securityadmin.

Prijenos podataka

Zapravo, sam prijenos podataka sastoji se od dvije faze:

  1. Prijenos šeme podataka (tabele, pogledi, pohranjene procedure, itd.)
  2. Sam prijenos podataka

Prijenos šeme podataka

Vršimo sledeće operacije:

  1. Odaberite Zadaci -> Generiraj skripte za prenosivu bazu.
  2. Odaberite objekte koje trebate prenijeti ili ostavite zadanu vrijednost (u ovom slučaju, skripte će biti kreirane za sve objekte baze podataka).
  3. Odredite postavke za spremanje skripte. Najpogodnije je sačuvati skriptu u jednoj Unicode datoteci. Zatim, u slučaju neuspjeha, ne morate ponovo ponavljati sve korake.

Nakon što je skripta sačuvana, može se pokrenuti na originalnom SQL Serveru (stara verzija) kako bi se stvorila potrebna baza.

Upozorenje: Nakon izvršavanja skripte, potrebno je provjeriti korespondenciju između postavki baze podataka iz sigurnosne kopije i baze podataka kreirane skriptom. U mom slučaju nije bilo postavke za COLLATE u skripti, što je dovelo do neuspjeha pri prijenosu podataka i plesu s tamburom da se rekreira baza 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 se vrši pomoću čarobnjaka za uvoz podataka Zadaci -> Uvoz podataka na SQL Serveru, gdje se nalazi baza podataka kreirana skriptom:

  1. Odredite postavke veze sa izvorom (SQL Server 2016 na virtuelnoj mašini). Koristio sam izvor podataka Nativni klijent SQL Servera i gore spomenutu SQL autentifikaciju.
  2. Odredite postavke veze za odredište (SQL Server 2014 na glavnom računalu).
  3. Zatim postavite mapiranje. Svi moraju biti odabrani nije samo za čitanje objekti (na primjer, pogledi ne moraju biti odabrani). Kao dodatne opcije odaberite "Dozvoli umetanje u kolone identiteta"ako se takvi koriste.
    Upozorenje: if, kada pokušavate odabrati nekoliko tabela i postaviti njihovo svojstvo "Dozvoli umetanje u kolone identiteta" svojstvo je već postavljeno za barem jednu od odabranih tablica, dijalog će pokazati da je svojstvo već postavljeno za sve odabrane tablice. Ova činjenica može biti zbunjujuća i dovesti do grešaka u migraciji.
  4. Počinjemo sa transferom.
  5. Vraćanje provjere ograničenja:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Ukoliko dođe do greške, provjeravamo postavke, brišemo bazu podataka kreiranu s greškama, ponovo je kreiramo iz skripte, vršimo ispravke i ponavljamo prijenos podataka.

zaključak

Ovaj zadatak je prilično rijedak i javlja se samo zbog gore navedenih ograničenja. Najčešće rješenje je nadogradnja SQL Servera ili povezivanje na udaljeni poslužitelj ako arhitektura aplikacije to dozvoljava. Međutim, niko nije imun od naslijeđenog koda i krivih ruku nekvalitetnog razvoja. Nadam se da vam ova instrukcija neće trebati, ali ako vam je i dalje potrebna, pomoći će vam da uštedite mnogo vremena i živaca. Hvala vam na pažnji!

Spisak korištenih izvora

izvor: www.habr.com