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:
- Inicie SQL Server Management Studio y conéctese a la instancia donde reside la base de datos
- En el menú contextual de la base de datos navegue a Tasks | Generate Scripts…. Esto invocará el asistente Generate and Publish Scripts
- En el paso Introduction del asistente haga clic en Next
- 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
- En el paso Set Scripting options del asistente:
- Seleccione la opción Save scripts to a specific location
- 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
- Haga clic en Advanced
- 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
- 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 los scripts SQL generados contra la instancia SQL más antigua
Aunque el procedimiento listado anteriormente debería funcionar:
- No migra todos los objetos de la base de datos (por ejemplo, secuencias o colas)
- 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:
- En la instancia SQL objetivo cree una base de datos vacía para contener los datos y objetos restaurados desde la copia de seguridad
- Inicie ApexSQL Diff
- Haga clic en New en el diálogo Project management
- 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
- 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
- Haga clic en Compare
- Seleccione todos los objetos listados en la Cuadrícula Principal
- Haga clic en Sunchronize en la región Actions de la pestaña Home
- Haga clic en Next en el paso Synchronization direction del Synchronization wizard
- Haga clic en Next en el paso Dependencies del Synchronization wizard
- Revise el resumen de la sincronización y los avisos si hubiera alguno y haga clic en Next
- En el paso Output options del Synchronization wizard seleccione Synchronize a database
- Haga clic en Finish
- Inicie ApexSQL Data Diff
- Haga clic en New en el diálogo Project management
- 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
- 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
- Haga clic en Compare
- En la Cuadrícula Principal seleccione las tablas de la base de datos a las que los datos van a ser recuperados
- En el panel Data difference seleccione las filas a ser recuperadas
- Haga clic en Synchronize en la región Actions en la pestaña Home
- Haga clic en Next en el paso Synchronization direction del Synchronization wizard
- En el paso Output options del Synchronization wizard seleccione Synchronize a database
- Haga clic en Next
- 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
- En el panel Source: