Transferir datos de copia de seguridade dunha nova versión de MS SQL Server a unha versión anterior

prehistoria

Unha vez, para reproducir un erro, necesitaba unha copia de seguridade da base de datos de produción.

Para a miña sorpresa, atopeime coas seguintes limitacións:

  1. A copia de seguridade da base de datos realizouse na versión SQL Server 2016 e non era compatible co meu SQL Server 2014.
  2. No meu ordenador de traballo, o sistema operativo utilizado foi fiestras 7polo que non puiden actualizar SQL Server ata a versión 2016
  3. O produto compatible formaba parte dun sistema máis amplo cunha arquitectura herdada estreitamente acoplada e tamén falaba con outros produtos e bases, polo que podía levar moito tempo implementalo noutra estación.

Tendo en conta o anterior, cheguei á conclusión de que chegou o momento das muletas de solucións non estándar.

Restaurar datos dunha copia de seguridade

Elixín usar unha máquina virtual Oracle VM VirtualBox con Windows 10 (podes facer unha imaxe de proba para o navegador Edge por iso). Instalouse SQL Server 2016 na máquina virtual e restaurouse a base de datos da aplicación desde a copia de seguridade (educación).

Configurando o acceso a SQL Server nunha máquina virtual

A continuación, foi necesario dar algúns pasos para poder acceder a SQL Server desde o exterior:

  1. Para o firewall, engade unha regra para omitir as solicitudes de porto 1433.
  2. É desexable que o acceso ao servidor non pase a través da autenticación de Windows, senón a través de SQL mediante un inicio de sesión e un contrasinal (é máis fácil configurar o acceso). Non obstante, neste caso, cómpre lembrar activar a autenticación SQL nas propiedades de SQL Server.
  3. Na configuración do usuario en SQL Server na pestana Mapeo de usuarios especifique o rol de usuario para a base de datos restaurada db_securityadmin.

Transferencia de datos

En realidade, a propia transferencia de datos consta de dúas etapas:

  1. Transferencia de esquemas de datos (táboas, vistas, procedementos almacenados, etc.)
  2. Transferencia dos propios datos

Transferencia de esquema de datos

Realizamos as seguintes operacións:

  1. seleccionar Tarefas -> Xerar scripts para unha base portátil.
  2. Seleccione os obxectos que precisa transferir ou deixe o valor predeterminado (neste caso, crearanse scripts para todos os obxectos da base de datos).
  3. Especifique a configuración para gardar o script. É máis conveniente gardar o script nun único ficheiro Unicode. Entón, en caso de falla, non é necesario repetir todos os pasos de novo.

Unha vez gardado o script, pódese executar no servidor SQL orixinal (versión antiga) para crear a base necesaria.

Внимание: Despois de executar o script, cómpre comprobar a correspondencia entre a configuración da base de datos da copia de seguridade e a base de datos creada polo script. No meu caso, non había ningunha configuración para COLLATE no script, o que provocou un fallo ao transferir datos e bailar cunha pandeireta para recrear a base de datos usando o script complementado.

Transferencia de datos

Antes de transferir datos, debes desactivar a comprobación de todas as restricións da base de datos:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

A transferencia de datos realízase mediante o asistente de importación de datos Tarefas -> Importar datos en SQL Server, onde se atopa a base de datos creada polo script:

  1. Especifique a configuración de conexión á fonte (SQL Server 2016 nunha máquina virtual). Usei a fonte de datos Cliente nativo de SQL Server e a mencionada autenticación SQL.
  2. Especifique a configuración de conexión para o destino (SQL Server 2014 na máquina host).
  3. A continuación, configure o mapeo. Todos deben ser seleccionados non só de lectura obxectos (por exemplo, non é necesario seleccionar vistas). Como opcións adicionais, seleccione "Permitir a inserción en columnas de identidade"se tales se usan.
    Внимание: se, ao tentar seleccionar varias táboas e establecer a súa propiedade "Permitir a inserción en columnas de identidade" a propiedade xa se estableceu para polo menos unha das táboas seleccionadas, o diálogo indicará que a propiedade xa se estableceu para todas as táboas seleccionadas. Este feito pode ser confuso e provocar erros de migración.
  4. Comezamos a transferencia.
  5. Restaurando a comprobación de restricións:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Se se produce algún erro, comprobamos a configuración, eliminamos a base de datos creada con erros, recreámola a partir do script, facemos correccións e repetimos a transferencia de datos.

Conclusión

Esta tarefa é bastante rara e ocorre só polas limitacións anteriores. A solución máis común é actualizar SQL Server ou conectarse a un servidor remoto se a arquitectura da aplicación o permite. Non obstante, ninguén é inmune ao código legado e ás mans tortas dun desenvolvemento de mala calidade. Espero que non necesites esta instrución, pero se aínda a necesitas, axudarache a aforrar moito tempo e nervios. Grazas pola súa atención!

Lista de fontes utilizadas

Fonte: www.habr.com