Restaurando una copia de seguridad de base de datos SQL Server a una versión más antigua de SQL Server

Si usted alguna vez necesitó restaurar una copia de seguridad de base de datos SQL Server a una versión más antigua de SQL Server, usted era saludado con mensajes de error como:

Msg 3169, Level 16, State 1, Line 1
Msg 3013, Level 16, State 1, Line 1 RESTORE DATABASE is terminating abnormally.

O

Msg 3241, Level 16, State 7, Line 1
Msg 3013, Level 16, State 1, Line 1 RESTORE DATABASE is terminating abnormally.

Y el intento de restaurar la copia de seguridad fallaba.

La razón para este comportamiento es que por defecto SQL Server no permite la restauración de una copia de seguridad de una base de datos a una versión más antigua de SQL Server, a pesar del nivel de compatibilidad de la base de datos de la cual se sacó la copia de seguridad.

De todas maneras, hay una forma de restaurar una base de datos a una nueva versión de SQL Server.

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

  1. Inicie SQL Server Management Studio y conéctese a la instancia donde reside 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 de la base de datos y los datos serán codificados a un solo archivo o a múltiples archivos, así como la ruta y la codificación de los scripts generados
    3. Haga clic en Advanced
    4. En el diálogo Advanced Scripting Options que aparecerá:
      • Especifique la versión de SQL Server a la que necesita restaurar la base de datos en la opción Script for Server Version
      • 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
  6. Haga clic en Next
  7. En el paso Summary del asistente, haga clic en Next
  8. En el paso Save or Publish Scripts del asistente haga clic en Finish
  9. Ejecute los scripts SQL generados contra la instancia SQL más antigua

Aunque el procedimiento listado anteriormente debería funcionar:

  1. No migra todos los objetos de la base de datos (por ejemplo, secuencias o colas)
  2. Puede fallar si su base de datos contiene dependencias que SQL Server falla en reconocer (por ejemplo, dependencias a bases de datos que residen en servidores vinculados)

Para terminar, si usted no tiene acceso a la base de datos original por alguna razón (por ejemplo, usted está migrando la base de datos a una localización fuera del sitio sin conectividad de red), el procedimiento anterior es inaplicable para su escenario.

¿Significa eso que usted puede restaurar una copia de seguridad a una versión de SQL Server antigua? No, lejos de eso – es aquí donde ApexSQL Diff y ApexSQL Data Diff entran en juego.

ApexSQL Diff es una herramienta de comparación y sincronización de bases de datos SQL Server que detecta las diferencias entre objetos de bases de datos y los 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 sincronización y comparación de datos SQL Server que detecta diferencias en los datos y los 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 genera reportes exhaustivos acerca de las diferencias detectadas.

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

  1. En la instancia SQL objetivo cree una base de datos vacía para contener los datos y objetos restaurados desde 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 reside el archivo de la copia de seguridad
    • Seleccione la copia de seguridad y haga clic en Open
  5. En el panel Destination:
    • Seleccione Database desde el menú desplegable Type
    • Especifique la instancia SQL donde reside la base de datos a la que quiere recuperar los objetos desde el menú desplegable 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 donde 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 Sunchronize 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 la 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ú desplegable Type
    • Haga clic en Add file(s) y navegue a la carpeta donde reside el archivo de la copia de seguridad
    • Seleccione la copia de seguridad y haga clic en Open
  17. En el panel Destination:
    • Seleccione Database desde el menú desplegable Type
    • Especifique la instancia SQL donde está la base de datos a la cual quiere recuperar los datos desde el menú desplegable 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 cual quiere 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 los datos van a ser recuperados
  20. En el panel Data difference seleccione las filas a ser recuperadas
  21. Haga clic en Synchronize en la región Actions en la pestaña Home
  22. Haga clic en Next en el paso 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 la sincronización y los avisos si hubiera alguno y haga clic en Finish

Y eso es literalmente todo.

Traductor: Daniel Calbimonte

junio 18, 2015