Transferència de dades de còpia de seguretat d'una versió nova de MS SQL Server a una versió anterior

prehistòria

Una vegada, per reproduir un error, necessitava una còpia de seguretat de la base de dades de producció.

Per a la meva sorpresa, em vaig trobar amb les següents limitacions:

  1. La còpia de seguretat de la base de dades es va fer a la versió SQL Server 2016 i no era compatible amb la meva SQL Server 2014.
  2. Al meu ordinador de treball, el sistema operatiu utilitzat era Windows 7així que no he pogut actualitzar SQL Server fins a la versió 2016
  3. El producte compatible formava part d'un sistema més gran amb una arquitectura heretada estretament vinculada i també parlava amb altres productes i bases, de manera que podria trigar molt de temps a desplegar-lo a una altra estació.

Tenint en compte l'anterior, vaig arribar a la conclusió que ha arribat el moment de les crosses de solucions no estàndard.

Restauració de dades d'una còpia de seguretat

Vaig optar per utilitzar una màquina virtual Oracle VM VirtualBox amb Windows 10 (podeu fer una imatge de prova per al navegador Edge per tant). SQL Server 2016 es va instal·lar a la màquina virtual i la base de dades de l'aplicació es va restaurar des de la còpia de seguretat (instrucció).

Configuració de l'accés a SQL Server en una màquina virtual

A continuació, calia fer alguns passos per poder accedir a SQL Server des de l'exterior:

  1. Per al tallafoc, afegiu una regla per ometre les sol·licituds de port 1433.
  2. És desitjable que l'accés al servidor no passi per l'autenticació de Windows, sinó per SQL mitjançant un inici de sessió i una contrasenya (és més fàcil configurar l'accés). Tanmateix, en aquest cas, cal que recordeu habilitar l'autenticació SQL a les propietats del servidor SQL.
  3. A la configuració de l'usuari a SQL Server a la pestanya Mapes d'usuaris especifiqueu la funció d'usuari per a la base de dades restaurada db_securityadmin.

Transferència de dades

De fet, la transferència de dades en si consta de dues etapes:

  1. Transferència d'esquemes de dades (taules, vistes, procediments emmagatzemats, etc.)
  2. Transferència de les dades en si

Transferència d'esquemes de dades

Realitzem les següents operacions:

  1. seleccionar Tasques -> Generar scripts per a una base portàtil.
  2. Seleccioneu els objectes que necessiteu per transferir o deixeu el valor predeterminat (en aquest cas, es crearan scripts per a tots els objectes de la base de dades).
  3. Especifiqueu la configuració per desar l'script. El més convenient és desar l'script en un sol fitxer Unicode. Aleshores, en cas de fallada, no cal que torneu a repetir tots els passos.

Un cop desat l'script, es pot executar a l'SQL Server original (versió antiga) per crear la base necessària.

Advertència: Després d'executar l'script, heu de comprovar la correspondència entre la configuració de la base de dades de la còpia de seguretat i la base de dades creada per l'script. En el meu cas, no hi havia cap configuració per COLLATE al guió, cosa que va provocar un error en transferir dades i ballar amb un tamborí per recrear la base de dades mitjançant el guió complementat.

Transferència de dades

Abans de transferir dades, heu de desactivar la comprovació de totes les restriccions a la base de dades:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

La transferència de dades es realitza mitjançant l'assistent d'importació de dades Tasques -> Importa dades a SQL Server, on es troba la base de dades creada per l'script:

  1. Especifiqueu la configuració de connexió a la font (SQL Server 2016 en una màquina virtual). Vaig utilitzar la font de dades Client natiu de SQL Server i l'autenticació SQL esmentada anteriorment.
  2. Especifiqueu la configuració de connexió per a la destinació (SQL Server 2014 a la màquina amfitrió).
  3. A continuació, configureu el mapatge. S'han de seleccionar tots no només de lectura objectes (per exemple, no cal seleccionar vistes). Com a opcions addicionals, seleccioneu "Permet la inserció a les columnes d'identitat"si s'utilitzen.
    Advertència: si, quan intenteu seleccionar diverses taules i establir-ne la propietat "Permet la inserció a les columnes d'identitat" la propietat ja s'ha establert per almenys una de les taules seleccionades, el diàleg indicarà que la propietat ja s'ha establert per a totes les taules seleccionades. Aquest fet pot ser confús i provocar errors de migració.
  4. Comencem el trasllat.
  5. Restauració de la comprovació de restriccions:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Si es produeix algun error, comprovem la configuració, suprimim la base de dades creada amb errors, la tornem a crear a partir de l'script, fem correccions i repetim la transferència de dades.

Conclusió

Aquesta tasca és força rara i només es produeix a causa de les limitacions anteriors. La solució més habitual és actualitzar SQL Server o connectar-se a un servidor remot si l'arquitectura de l'aplicació ho permet. Tanmateix, ningú és immune al codi heretat i a les mans tortes del desenvolupament de mala qualitat. Espero que no necessiteu aquesta instrucció, però si encara la necessiteu, us ajudarà a estalviar molt de temps i nervis. Gràcies per la vostra atenció!

Llista de fonts utilitzades

Font: www.habr.com