Trasferendu dati di salvezza da una nova versione di MS SQL Server à una versione più vechja

Pristoria

Una volta, per ripruduce un bug, avia bisognu di una copia di salvezza di a basa di dati di produzzione.

À a mo sorpresa, aghju scontru i seguenti limitazioni:

  1. A copia di salvezza di a basa di dati hè stata fatta nantu à a versione Servidor SQL 2016 è ùn era micca cumpatibile cù u mio Servidor SQL 2014.
  2. In u mo computer di travagliu, u SO era Windows 7dunque ùn pudia aghjurnà Servidor SQL finu à a versione 2016
  3. U pruduttu supportatu era parte di un sistema più grande cù una architettura legata strettamente accoppiata è accede ancu à altri prudutti è basi, cusì puderia piglià assai tempu per implementà in un'altra stazione.

Cunsiderendu u sopra, aghju ghjuntu à a cunclusione chì u tempu hè ghjuntu per e crutches di suluzioni non standard.

Risturà dati da a copia di salvezza

Aghju decisu di utilizà una macchina virtuale Oracle VM VirtualBox cù Windows 10 (pudete piglià una maghjina di prova per u navigatore Edge da quì). SQL Server 2016 hè statu stallatu nantu à a macchina virtuale è a basa di dati di l'applicazione hè stata restaurata da una copia di salvezza (manuale).

Configurazione di l'accessu à SQL Server in una macchina virtuale

Dopu, era necessariu piglià qualchi passi per fà pussibule accede à SQL Server da l'esternu:

  1. Per u firewall, aghjunghje una regula per permette à e dumande di portu di passà 1433.
  2. Hè cunsigliatu chì l'accessu à u servitore ùn si faci micca per l'autentificazione di Windows, ma per SQL utilizendu un login è password (hè più faciule per cunfigurà l'accessu). Tuttavia, in questu casu, devi ricurdà di attivà l'autentificazione SQL in e proprietà di SQL Server.
  3. In i paràmetri di l'utilizatori nantu à SQL Server nantu à a tabulazione Mappatura di l'utilizatori specificà u rolu d'utilizatore per a basa di dati restaurata db_securityadmin.

Trasferimentu di dati

In realtà, u trasferimentu di dati stessu hè custituitu di duie tappe:

  1. Trasferimentu di schema di dati (tabelle, viste, prucedure almacenate, etc.)
  2. Trasferendu i dati stessu

Trasferimentu Schema Dati

Facemu e seguenti operazioni:

  1. Scegli Tasks -> Genera Scripts per una basa portable.
  2. Selezziunate l'uggetti chì avete bisognu di trasferimentu o lascià u valore predeterminatu (in questu casu, scripts seranu creati per tutti l'uggetti di basa di dati).
  3. Specificate i paràmetri per salvà u script. U modu più convenientu hè di salvà u script in un unicu fugliale in codificazione Unicode. Allora, se ci hè un fallimentu, ùn avete micca bisognu di ripetiri tutti i passi.

Una volta chì u script hè salvatu, pò esse eseguitu nantu à a fonte SQL Server (versione antica) per creà a basa di dati necessaria.

Attenti: Dopu avè eseguitu u script, avete bisognu di verificà a coherenza di i paràmetri di a basa di dati da a copia di salvezza è a basa di dati creata da u script. In u mo casu, u script ùn hà micca avutu un paràmetru per COLLATE, chì hà purtatu à un fallimentu quandu u trasferimentu di dati è ballà cù un tamburinu per ricreà a basa di dati cù u script aumentatu.

Trasferimentu di dati

Prima di trasferimentu di dati, duvete disattivà a verificazione di tutte e restrizioni nantu à a basa di dati:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

U trasferimentu di dati hè realizatu cù l'Assistente di Importazione di Dati Tasks -> Import Data in SQL Server, induve si trova a basa di dati creata da u script:

  1. Specificate i paràmetri di cunnessione à a fonte (SQL Server 2016 nantu à una macchina virtuale). Aghju utilizatu Data Source Cliente nativu di SQL Server è l'autentificazione SQL sopra citata.
  2. Specificemu i paràmetri di cunnessione à a destinazione (SQL Server 2014 nantu à a macchina host).
  3. Dopu avemu stabilitu a mappatura. Vi tocca à sceglie tutti micca solu lettura l'uggetti (per esempiu, vede ùn deve esse sceltu). Opzioni supplementari deve esse sceltu "Permette l'inserimentu in e colonne d'identità", se tali sò usati.
    Attenti: se pruvate à selezziunà parechje tavule è assignà a pruprietà per elli "Permette l'inserimentu in e colonne d'identità" a pruprietà hè digià stata stabilita per almenu una di e tavule selezziunate, u dialogu indicà chì a pruprietà hè digià stata stabilita per tutte e tavule selezziunate. Stu fattu pò esse cunfusu è portanu à l'errore di trasferimentu.
  4. Cuminciamu u trasferimentu.
  5. Ripristina u cuntrollu di limitazione:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

In casu d'errore, verificate i paràmetri, sguassate a basa di dati creata cù l'errori, ricreate da u script, fate correzioni è ripetite u trasferimentu di dati.

cunchiusioni

Stu compitu hè abbastanza raru è nasce solu per via di e limitazioni sopra. A suluzione più cumuna hè di aghjurnà SQL Server o cunnette à un servitore remoto se l'architettura di l'applicazione permette. In ogni casu, nimu hè salvu da u codice legatu è e mani storte di u sviluppu di scarsa qualità. Spergu chì ùn avete micca bisognu di sti struzzioni, è se ne avete bisognu, vi aiutanu à salvà assai tempu è nervi. Grazie per a vostra attenzione!

Lista di fonti utilizati

Source: www.habr.com