Restauración de la copia de seguridad de la base de datos de SQL Server en una versión inferior

185

¿Cómo restaurar un archivo de copia de seguridad de la base de datos SQL Server de una versión superior en un SQL Server de versión inferior?

Con SQL Server 2008 R2 (10.50.1600) , hice un archivo de copia de seguridad y ahora quiero restaurarlo en el servidor SQL Server 2008 de mi servidor en vivo (10.00.1600) .

Cuando intenté restaurar la copia de seguridad en SQL Server 2008, aparece un error, es decir, Restore Failedporque:

Se realizó una copia de seguridad de la base de datos en un servidor que ejecuta la versión 10.50.1600. Esa versión es incompatible con este servidor, que ejecuta la versión 10.00.1600.

¿Cómo restauro el archivo de respaldo en este servidor?

Oreo
fuente
2
No puedes hacer esto, simplemente no es posible. SQL Server no permite degradación *" una base de datos a partir de una versión superior a uno inferior.
marc_s
18
Microsoft sabe todo sobre el servidor SQL (desde que lo crearon) y, sin embargo, es imposible mover datos entre 2 versiones. Simplemente no entiendo por qué algún tipo de modo de compatibilidad no está disponible en la exportación. ¿Qué tan difícil puede ser?
dvdmn
1
@dvdmn tan duro como cualquier episodio de Top Gear donde dicen eso: diferentes tipos, diferentes declaraciones, diferentes diseños de bloques. Mover datos entre bases de datos es muy fácil, sin importar las versiones involucradas. Degradar, aunque no lo es .
Panagiotis Kanavos
2
@PanagiotisKanavos No estoy de acuerdo, en mysql puede exportar db como comandos sql y puede restaurarlo en cualquier versión de mysql (hacia abajo o hacia arriba). Sí, también puede exportar sql db como script, pero restaurarlo no es fácil si tiene algunas funciones / procedimientos almacenados que dependen unos de otros. Básicamente no es útil / solución.
dvdmn
3
@dvdmn exportar los scripts de una base de datos es completamente diferente de la copia de seguridad. Me doy cuenta de que algunos productos no ofrecen funcionalidad de copia de seguridad / restauración o, lo que es peor, confunden los dos conceptos. Esto sucede a menudo debido a razones históricas: falta de respaldo en el pasado, algunos productos se llaman exportación / scripting con ese nombre. Ahora que lo hacen , tienen que seguir resolviendo conflictos de términos, hablando de copias de seguridad físicas y lógicas, y luego confundirse cuando hablan de secuencias de comandos
Panagiotis Kanavos

Respuestas:

78

No, no es posible degradar una base de datos. 10.50.1600 es la versión de SQL Server 2008 R2 . No hay absolutamente ninguna manera de restaurar o adjuntar esta base de datos a la instancia de SQL Server 2008 en la que está intentando restaurar (10.00.1600 es SQL Server 2008). Sus únicas opciones son:

  • actualizar esta instancia a SQL Server 2008 R2 o
  • restaure la copia de seguridad que tiene en una instancia de SQL Server 2008 R2, exporte todos los datos e impórtelos en una base de datos de SQL Server 2008.
Remus Rusanu
fuente
No puedo actualizar el servidor en vivo de los clientes debido a restricciones de permisos. y el tamaño de mi base de datos es superior a 2.5 GB, por lo que no pude crear un script de datos debido a un error de excepción de memoria.
9
@Gaurav No escriba los datos; en su lugar, escriba la base de datos completa (tablas, procesos, desencadenantes, restricciones, etc.) sin datos, cree la nueva base de datos, luego haga clic derecho en la base de datos de origen, vaya a "Herramientas", luego "Exportar datos" para transferir el contenido de las tablas a su base de datos.
Jim McLeod
17
Sospecho mucho de una respuesta "no hay manera posible", eso solo significa que aún no has encontrado la manera. Puede haber muchas razones por las que desea hacer esto, por lo que esta no es una respuesta útil.
Jay Imerman el
66
No estoy de acuerdo, @Jay, a veces "no puedes" es la respuesta perfecta, aunque es más útil ofrecer soluciones alternativas cuando estén disponibles.
Russell Fox
1
@Zhang si tiene preguntas, hágalas como preguntas, no como comentarios.
Remus Rusanu
83

Puede usar la funcionalidad llamada Exportar aplicación de nivel de datos que genera un .bacpacarchivo que consiste en un esquema de base de datos y datos.

En el servidor de destino, puede usar la opción Importar aplicación de nivel de datos que crea y llena una nueva base de datos a partir de un .bacpacarchivo creado previamente

Si solo desea transferir el esquema de la base de datos, puede usar Extraer la aplicación de nivel de datos para crear el archivo e Implementar la aplicación de nivel de datos para implementar el esquema de base de datos creado.

He intentado este proceso en diferentes versiones de SQL Server desde SQL 2014 a SQL 2012 y desde SQL 2014 a SQL 2008R2 y funcionó bien.

veljasije
fuente
8
Esta es una respuesta que merece más atención. Realmente funciona solo para la mayoría de los casos. Sin embargo, si tiene usuarios de SQL huérfanos, las operaciones de exportación fallarán. Siempre puede eliminar / agregar esos bits manualmente para trascender las versiones SQL.
Doctor Blue
3
Acabo de intentar esto, para crear una base de datos creada en MSSQLEX2014 (V12) en mi MSSQLEX2012 (V11). Acabo de recibir un error "Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider no es válido" sin forma de cambiarlo.
Craig
55
Importar desde SQL Server 2014 a 2012 utilizando un .bakpac sí funciona, pero requiere la versión correcta de SSMS. Por ejemplo, uso SSMS 2016 CTP3 y funcionó a la perfección. NO funcionó para mí usando SSMS 2012. No he probado SSMS 2014.
Greg Gum
1
¿Alguien sabe si se puede ejecutar este procedimiento en T-SQL? ACTUALIZACIÓN (respondiéndome después de buscar un poco en Google): puede automatizar esto a través de la sqlpackage.exelínea de comandos. Google para más.
Alex
1
Esta es la única solución que funcionó para mí para degradar SQL2017 bastante grande / complicado a SQL2016. Rendimiento también muy bueno.
Keith Blows
35

No necesariamente funcionará

Trabajará

  • Generación de guiones - Tareas -> Generar guiones . Asegúrese de establecer la versión deseada de SQL Server de destino en la página Establecer opciones de secuencias de comandos -> Avanzado . También puede elegir allí si copiar el esquema, los datos o ambos. Tenga en cuenta que en la secuencia de comandos generada, es posible que deba cambiar la carpeta DATA para los archivos mdf / ldf si cambia de no expreso a expreso o viceversa.

  • Servicios de publicación de bases de datos de Microsoft SQL Server : creo que viene con SQL Server 2005 y superior. Descargue la última versión desde aquí . Prerrequisitos: sqlncli.msi/ sqlncli_x64.msi/ sqlncli_ia64.msi, SQLServer2005_XMO.msi/ SQLServer2005_XMO_x64.msi/ SQLServer2005_XMO_ia64.msi(descargar aquí ).

Ohad Schneider
fuente
77
La generación de scripts no es confiable para bases de datos sustanciales, evite si es posible.
Chris
Ambos enlaces en la parte inferior son 404.
Sнаđошƒаӽ
29

Aquí están mis 2 centavos en diferentes opciones para completar esto:

Herramientas de terceros : Probablemente la forma más fácil de hacer el trabajo es crear una base de datos vacía en una versión inferior y luego usar herramientas de terceros para leer la copia de seguridad y sincronizar la nueva base de datos recién creada con la copia de seguridad.

Red Gate es uno de los más populares, pero hay muchos otros como ApexSQL Diff , ApexSQL Data Diff , Adept SQL , Idera ... Todas estas son herramientas premium, pero puedes hacer el trabajo en modo de prueba;)

Generación de scripts : como otros ya mencionaron, siempre puede estructurar scripts y datos utilizando SSMS, pero debe tener en cuenta el orden de ejecución. Por defecto, los scripts de objetos no están ordenados correctamente y tendrá que ocuparse de las dependencias. Esto puede ser un problema si la base de datos es grande y tiene muchos objetos.

Asistente de importación y exportación : esta no es una solución ideal, ya que no restaurará todos los objetos, sino solo las tablas de datos, pero puede considerarlo para soluciones rápidas y sucias cuando sea necesario.

Ken Williams
fuente
1
Red Gate Sql Clone no admite la clonación entre diferentes versiones del servidor SQL, informando exactamente el mismo error que obtengo al intentar hacer esto manualmente.
DarkDeny
29

No puede restaurar la base de datos (o adjuntar) creada en la versión superior a la versión inferior. La única forma es crear un script para todos los objetos y usar el script para generar la base de datos.

ingrese la descripción de la imagen aquí

seleccione "Esquema y datos" : si desea incorporar ambas cosas al archivo de script de copia de seguridad,
seleccione Solo esquema : si solo se necesita un esquema.

ingrese la descripción de la imagen aquí

Sí, ahora ha terminado con Crear script con esquema y datos de la base de datos.

Smit Patel
fuente
16

Otra forma de hacer esto es usar la función "Copiar base de datos":

Busque haciendo clic derecho en la base de datos de origen> "Tareas"> "Copiar base de datos".

Puede copiar la base de datos a una versión inferior de la instancia de SQL Server. Esto funcionó para mí desde un SQL Server 2008 R2 (SP1) - 10.50.2789.0 a Microsoft SQL Server 2008 (SP2) - 10.0.3798.0

Joy Walker
fuente
3
Tenga en cuenta que esto no funcionará si el destino es SQL Server express "El servidor de destino no puede ser una instancia Express de SQL Server 2005 o posterior". social.msdn.microsoft.com/Forums/en-US/sqlgetstarted/thread/…
Ohad Schneider
2
Tampoco es posible copiar una base de datos de SQL Server 2012 a SQL Server 2008 de esta manera.
Twinkles
1
Copiar base de datos es una operación de Separar / Adjuntar
Panagiotis Kanavos
1
Gracias por esta pista! Eso me ayudó mucho. Copié los datos de SQL 2008 R2 a SQL 2008.
dns_nx
8

Puedes probar esto.

  1. Cree una base de datos en SQL Server 2008.
  2. Con la función Importar datos, importe datos de SQL Server R2 (o cualquier versión superior)
  3. use "RedGate SQLCompare" para sincronizar el script.
Ishtiyaq Khan
fuente
6

Vaya a Tarea-> Generar guiones ...

En Avanzado en "Tipos de datos para script", seleccione "Schema and data"e intente ejecutar este script en su versión inferior.

mathewsun
fuente
55
Esta es una muy buena solución, pero funciona muy mal con bases de datos más grandes.
veljasije
5

No es bonito, pero así es como lo hice, te garantizo que tienes esta opción instalada en tu instalación de SQL 2008 R2.

1) Haga clic con el botón derecho en la base de datos en SQL Server 2008 R2 "Tareas" .. "Generar secuencias de comandos" en el asistente, seleccione toda la base de datos y los objetos en el primer paso. En el paso "Establecer opciones de secuencias de comandos" debería ver un botón "Avanzado", seleccione esto y asegúrese de seleccionar "Script para la versión del servidor" = SQL Server 2008 "no la versión R2. Este es un paso crucial, porque" importar datos " por sí solo no trae todas las claves primarias, constriants y otros objetos como procedimientos almacenados ".

2) Ejecute el script SQL generado en la nueva instalación o instancia de la base de datos SQL Express o SQL Server 2008 usando la ventana de consulta o abra el script .sql guardado y ejecute y debería ver la nueva base de datos.

3) Ahora haga clic derecho en la nueva base de datos y seleccione "Tareas" ... "Importar datos ...", elija el origen como la base de datos R2 y el destino como la nueva base de datos. "Copie datos de una o más tablas o vistas", seleccione la casilla de verificación superior para seleccionar todas las tablas y luego el siguiente paso, ejecute el paquete y debería tener todo en una versión anterior. Esto debería funcionar para volver a una versión 2005 también. Espero que esto ayude a alguien.

motogeek
fuente
hola @motogeek, tengo el mismo problema, pero tengo el R2 en el servidor de producción y 2008 en el local, en este caso no puedo usar los datos de importación y exportación. ¿Cuál sería la solución ideal para esto?
Abbas
2

puede usar BCP dentro y fuera para tablas pequeñas.

Comando BCP OUT: -

BCP "SELECT *  FROM [Dinesh].[dbo].[Invoices]" QUERYOUT C:\av\Invoices1.txt -S MC0XENTC -T -c -r c:\error.csv

Comando BCP IN: - Crear estructura de tabla para Invoicescopy1.

BCP [Dinesh].[dbo].[Invoicescopy1] IN C:\av\Invoices.txt -S MC0XENTC -T -c
arnav
fuente
0

Aprecio que esta es una publicación antigua, pero puede ser útil para las personas saber que el Asistente de migración de Azure (disponible en Codeplex, no se puede vincular como lo es Codeplex en el momento en que estoy escribiendo esto) lo hará fácilmente.

tony.wiredin
fuente
Esa herramienta ha sido reemplazada por el Asistente de migración de datos de SQL Server. Ver: stackoverflow.com/questions/46517060/…
ahwm
0

Tendría que usar los asistentes de Importar / Exportar en SSMS para migrar todo

No es posible "rebajar" el uso de la copia de seguridad / restauración o la separación / conexión. Por lo tanto, lo que tienes que hacer es:

  1. Haga una copia de seguridad de la base de datos desde el servidor que ejecuta la nueva versión SSMS / SQL.
  2. Importe datos del archivo .bak generado, expandiendo el menú "Tareas" (después de hacer clic con el botón derecho en la base de datos de destino) y seleccionando la opción "Importar datos".
tonderaimuchada
fuente