Migre una base de datos SQL Server a una nueva versión de SQL Server

Los Administradores de Bases de Datos están muy conscientes que bajar de versión a una base de datos SQL Server no se puede hacer con las opciones por defecto. Incluso cuando el nivel de compatibilidad de la base de datos que desea migrar a una versión más antigua de SQL coincide con esa versión, usted no puede simplemente restaurar la copia de seguridad. Lo que probablemente no esperaba es que actualizar también puede ser un problema.

Restaurar una copia de seguridad de una base de datos creada en un SQL Server 2008 R2 a una instancia SQL Server 2012 funciona bien. Pero si usted trata de restaurar una copia de seguridad SQL Server 2000 a un SQL Server 2012, usted obtendrá el siguiente error:

Una de las soluciones es:

  1. Restaurar la copia de seguridad SQL Server 2000 sobre SQL Server 2008
  2. Establecer el nivel de compatibilidad a 100
  3. Crear una copia de seguridad de la base de datos en SQL Server 2008
  4. Restaurarla copia de seguridad SQL Server 2008 en SQL Server 2012
  5. Establecer el nivel de compatibilidad a 110

La desventaja de esta solución es que usted necesita 3 versiones de SQL Server instaladas y necesita remover manualmente las características T-SQL discontinuadas y deprecadas.

Si usted tiene acceso a la base de datos en vivo de la cual se tomó la copia de seguridad:

  1. Inicie SQL Server Management Studio y conéctese a la instancia que contiene la base de datos
  2. En el menú contextual de la base de datos, navegue a Tasks | Generate Scripts…. Esto invocará el asistente Generate and Publish Scripts
  3. En el paso Introduction del asistente haga clic en Next
  4. En el paso Choose Objects del asistente asegúrese de que la opción Script entire database and all database objects está seleccionada y haga clic en Next
  5. En el paso Set Scripting Options del asistente:
    1. Seleccione la opción Save scripts to a specific location
    2. Especifique si los objetos y datos de la base de datos serán codificados en un solo o múltiples archivos, así como la ruta y codificación de los scripts generados
    3. Haga clic en Advanced
    4. En el diálogo Advanced Scripting Options que aparecerá:
      • En la opción Script for Server Version, especifique Schema and data
      • Establezca las siguientes opciones a True:
        • Script Logins
        • Script Full-Text Indexes
        • Script Triggers
      • Haga clic en OK
  • Haga clic en Next
  • En el paso Summary del asistente haga clic en Next
  • En el paso Save or Publish Scripts del asistente haga clic en Finish
  • Ejecute el/los script(s) SQL contra la instancia SQL más antigua

Aunque el procedimiento listado anteriormente debería funcionar:

  1. Usted tiene que remover manualmente las características T-SQL discontinuadas o deprecadas
  2. Puede fallar si su base de datos contiene dependencias, a las cuales SQL Server falla en reconocer (por ejemplo, dependencias a bases de datos localizadas en servidores vinculados)

Si usted no tiene acceso a la base de datos original por alguna razón (por ejemplo, usted está migrando una base de datos a una localización fuera del sitio sin conectividad de red), los procedimientos anteriores no son aplicables.

Es aquí donde ApexSQL Diff y ApexSQL Data Diff pueden ayudar

ApexSQL Diff es una herramienta de comparación y sincronización de bases de datos SQL Server que detecta diferencias entre objetos de bases de datos y las resuelve sin errores. Genera reportes exhaustivos acerca de las diferencias encontradas y puede automatizar el proceso de sincronización entre bases de datos en vivo y versionadas, copias de seguridad, snapshots y carpetas de scripts.

ApexSQL Data Diff es una herramienta de comparación y sincronización de datos de SQL Server que detecta diferencias en los datos y las resuelve sin errores. Puede comparar y sincronizar bases de datos en vivo y copias de seguridad de bases de datos nativas o nativamente comprimidas y generar reportes exhaustivos acerca de las diferencias detectadas.

Para restaurar la copia de seguridad a una versión más nueva de SQL Server:

  1. En la instancia SQL objetivo, cree una base de datos vacía para contener los datos y objetos restaurados de la copia de seguridad
  2. Inicie ApexSQL Diff
  3. Haga clic en New en el diálogo Project management

  4. En el panel Source:
    • Seleccione Backup desde el menú desplegable Type
    • Haga clic en Add file(s) y navegue a la carpeta donde la copia de seguridad está localizada
    • Seleccione la copia de seguridad y haga clic en Open
  5. En el panel Destination:
    • Seleccione Database desde el menú contextual Type
    • Especifique la instancia SQL donde está localizada la base de datos a la que quiere recuperar los objetos, desde el menú contextual Server
    • Especifique el método de autenticación para esa instancia SQL (y un conjunto válido de credenciales si eligió la autenticación SQL Server)
    • Especifique el nombre de la base de datos a la que desea recuperar los objetos, en el menú desplegable Database
  6. Haga clic en Compare
  7. Seleccione todos los objetos listados en la Cuadrícula Principal

  8. Haga clic en Synchronize en la región Actions de la pestaña Home
  9. Haga clic en Next en el paso Synchronization direction del Synchronization wizard
  10. Haga clic en Next en el paso Dependencies del Synchronization wizard

  11. Revise el resumen de sincronización y los avisos, si hubiera alguno, y haga clic en Next

  12. En el paso Output options del Synchronization wizard, seleccione Synchronize a database
  13. Haga clic en Finish
  14. Inicie ApexSQL Data Diff
  15. Haga clic en New en el diálogo Project management

  16. En el panel Source:
    • Seleccione Backup desde el menú contextual Type
    • Haga clic en Add file(s) y navegue a la carpeta donde el archivo de copia de seguridad se encuentra localizado
    • Seleccione la copia de seguridad y haga clic en Open
  17. En el panel Destination:
    • Seleccione Database desde el menú contextual Type
    • Especifique la instancia SQL donde está localizada la base de datos a la que desea recuperar los datos, desde el menú contextual Server
    • Especifique el método de autenticación para esa instancia SQL (y un conjunto válido de credenciales si usted eligió autenticación de SQL Server)
    • Especifique el nombre de la base de datos a la que desea recuperar los datos en el menú desplegable Database
  18. Haga clic en Compare

  19. En la Cuadrícula Principal, seleccione las tablas de la base de datos a las que se van a recuperar los datos
  20. En el panel Data difference, seleccione las filas a ser recuperadas
  21. Haga clic en Synchronize en la región Actions de la pestaña Home
  22. Haga clic en Next en el paso de Synchronization direction del Synchronization wizard
  23. En el paso Output options del Synchronization wizard, seleccione Synchronize a database
  24. Haga clic en Next

  25. Revise el resumen de sincronización y los avisos, si hubiera alguno, y haga clic en Finish

De esta manera, migrar una versión antigua de una base de datos SQL Server a una versión más nueva es hecho vía la sincronización del esquema de la copia de seguridad de la base de datos original y una base de datos en vivo vacía primeramente, y sincronización de datos posteriormente. ApexSQL Diff y ApexSQL Data Diff se encargarán de todas las características deprecadas y discontinuadas por usted.

Traductor: Daniel Calbimonte

Junio 12, 2015