Transfiera datos de respaldo de una nueva versión de MS SQL Server a una versión anterior

Antecedentes


Una vez, para reproducir un error, necesitaba una copia de seguridad de la base de producción.

Para mi sorpresa, me encontré con las siguientes limitaciones:

  1. La copia de seguridad de la base de datos se realizó en la versión de SQL Server 2016 y no era compatible con mi SQL Server 2014 .
  2. En mi computadora en funcionamiento, Windows 7 se usaba como SO, por lo que no pude actualizar SQL Server a la versión 2016
  3. El producto admitido era parte de un sistema más grande con una arquitectura Legacy sólida y también accedía a otros productos y bases, por lo que implementarlo en otra estación podría llevar mucho tiempo.

Dado lo anterior, llegué a la conclusión de que ha llegado el momento de las muletas de soluciones no estándar.

Recuperación de datos de respaldo


Decidí usar Oracle VM VirtualBox con Windows 10 (puede tomar una imagen de prueba para el navegador Edge desde aquí ). SQL Server 2016 se instaló en la máquina virtual y la base de datos de la aplicación se restauró desde la copia de seguridad ( instrucciones ).

Configurar el acceso a SQL Server en una máquina virtual


Además, fue necesario tomar algunas medidas para que sea posible acceder a SQL Server desde el exterior:

  1. Para un firewall, agregue una regla para omitir las solicitudes al puerto 1433 .
  2. Es deseable que el acceso al servidor no pase por la autenticación de Windows, sino a través de SQL con un nombre de usuario y contraseña (es más fácil configurar el acceso). Sin embargo, en este caso, debe recordar habilitar la autenticación de SQL en las propiedades de SQL Server.
  3. En la configuración de usuario en SQL Server, en la pestaña Asignación de usuario , especifique el rol de usuario db_securityadmin para la base de datos restaurada.

Transferencia de datos


En realidad, la transferencia de datos en sí consta de dos etapas:

  1. Transferencia de esquema de datos (tablas, vistas, procedimientos almacenados, etc.)
  2. Transferir datos en sí

Migración de esquema de datos


Realizamos las siguientes operaciones:

  1. Seleccione Tareas -> Generar secuencias de comandos para la base de datos portátil.
  2. Seleccionamos los objetos necesarios para transferir o dejamos el valor predeterminado (en este caso, se crearán scripts para todos los objetos en la base de datos).
  3. Especifique la configuración para guardar el script. Es más conveniente guardar el script en un único archivo codificado en Unicode. Luego, en caso de falla, no es necesario repetir todos los pasos nuevamente.

Después de guardar el script, puede ejecutarse en el SQL Server original (versión anterior) para crear la base de datos requerida.

Atención: después de ejecutar el script, debe verificar el cumplimiento de la configuración de la base de datos desde la copia de seguridad y la base de datos creada por el script. En mi caso, el script no tenía una configuración para COLLATE, lo que provocó un bloqueo al transferir datos y bailar con una pandereta para recrear la base de datos utilizando un script aumentado.

Transferencia de datos


Antes de transferir datos, debe desactivar la verificación de todas las restricciones en función de:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' 

Transferimos datos utilizando el asistente Tareas -> Importar datos de importación de datos en SQL Server, donde se encuentra la base de datos creada por el script:

  1. Especifique la configuración de conexión de origen (SQL Server 2016 en la máquina virtual). Utilicé Data Source SQL Server Native Client y la autenticación SQL antes mencionada.
  2. Especifique la configuración para conectarse al destino (SQL Server 2014 en la máquina host).
  3. A continuación, configure la asignación. Debe seleccionar todos los objetos que no sean de solo lectura (por ejemplo, no necesita seleccionar vistas). Como opciones adicionales, seleccione "Permitir inserción en columnas de identidad" , si se usa.
    Atención: si intenta seleccionar varias tablas y establece la propiedad "Permitir insertar en columnas de identidad" , la propiedad ya se ha establecido para al menos una de las tablas seleccionadas, el cuadro de diálogo indicará que la propiedad ya está establecida para todas las tablas seleccionadas. Este hecho puede ser confuso y provocar errores de transferencia.
  4. Comenzamos la transferencia.
  5. Restaurar verificación de restricciones:
     EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all' 

Si se produce algún error, verifique la configuración, elimine la base de datos creada con los errores, vuelva a crearla desde el script, realice correcciones y repita la transferencia de datos.

Conclusión


Esta tarea es bastante rara y surge solo debido a las limitaciones anteriores. La solución más común es actualizar SQL Server o conectarse a un servidor remoto si la arquitectura de la aplicación lo permite. Sin embargo, nadie está a salvo del código heredado y de las manos torcidas de desarrollo de baja calidad. Espero que no necesites esta instrucción, pero si aún la necesitas, te ayudará a ahorrar mucho tiempo y nervios. Gracias por su atencion!

Lista de fuentes utilizadas


Source: https://habr.com/ru/post/455934/


All Articles