Mover la base de datos de SQL Server 2012 a 2008

29

Tengo una base de datos en una instancia de SQL Sever 2012 que me gustaría copiar en un servidor de 2008. El servidor de 2008 no puede restaurar las copias de seguridad creadas por un servidor de 2012 (lo he intentado).

No puedo encontrar ninguna opción en 2012 para crear una copia de seguridad compatible con 2008. ¿Me estoy perdiendo de algo?

¿Existe una manera fácil de exportar el esquema y los datos a un formato independiente de la versión que luego pueda importar en 2008?

La base de datos no utiliza ninguna característica específica de 2012. Contiene tablas, datos y procedimientos almacenados.

Esto es lo que he intentado hasta ahora.

Intenté TareasGenerar secuencias de comandos en el servidor 2012, y pude generar el esquema (incluidos los procedimientos almacenados) como una secuencia de comandos SQL. Sin embargo, esto no incluyó ninguno de los datos.

Después de crear ese esquema en mi máquina 2008, pude abrir el asistente "Exportar datos" en la máquina 2012, y después de configurar el 2012 como máquina de origen y el 2008 como máquina de destino, me presentaron una lista de tablas que podría copiar Seleccioné todas mis tablas (más de 300) e hice clic en el asistente. Desafortunadamente, pasa años generando sus scripts, luego falla con errores como "Error al insertar en la columna de solo lectura 'FOO_ID'".

También probé el "Asistente para copiar bases de datos", que afirmaba poder copiar "desde 2000 o posterior a 2005 o posterior". Tiene dos modos:

  1. "Separar y adjuntar", que falló con error:

    Message: Index was outside the bounds of the array.
    StackTrace:    at Microsoft.SqlServer.Management.Smo.PropertyBag.SetValue(Int32 index, Object value)
    ...
    at Microsoft.SqlServer.Management.Smo.DataFile.get_FileName()
    
  2. Método de objeto de administración de SQL que falló con error

    No se puede leer la propiedad IsFileStream. Esta propiedad no está disponible en SQL Server 7.0 ".

Rico
fuente
¿Eres capaz de exportar directamente? No sé qué tan grande es su base de datos, pero esto es lo que haría al trabajar con bases de datos más pequeñas.
Dave
2
Ninguna versión anterior de SQL Server puede restaurar copias de seguridad de versiones más recientes. Esto es por diseño. Use la función Exportar, escriba las tablas y los datos, y configure el objetivo del script en SQL 2008.
44
"Tratando de entender por qué alguien en su sano juicio migraría hacia atrás". - Tengo un servidor de producción que ejecuta 2012, pero mi máquina de desarrollo solo tiene 2008. Me gustaría una copia local de la base de datos para ayudar al desarrollo, pero no quiero instalar 2012 en mi máquina de desarrollo porque no lo he hecho. queda mucho espacio libre y no quiero pasar horas instalándolo. (Por lo tanto, paso horas tratando de migrar hacia atrás ... pero ese soy yo).
Rich
1
Ya casi has llegado. La sección Exportar que ingresó tiene una opción para incluir datos, así como el esquema.
1
Solo quería agregar para Ramhound: para un SQL 2008 R2 actualizado a SQL 2012 actualizado en mi entorno Dev y luego, después de cambiar muchos esquemas y datos en mi instancia actualizada, me di cuenta de que VS 2010 no puede comparar esquemas o datos con SQL 2012. SSDT para VS 2010 y VS 2012 puede comparar esquemas con SQL 2012 pero no son compatibles con los proyectos originales de la base de datos VS 2010 y no pueden comparar datos. Para resumir, prefiero volver a SQL 2008 R2 y esperar hasta que la empresa tome una decisión para avanzar a 2012. Pero me gustaría guardar mi nuevo esquema / datos. AFAIK Estoy en mi sano juicio.
GFK

Respuestas:

40

Haga clic derecho en la base de datos en 2012 SQL Management Studio y seleccione "Tareas -> Generar secuencias de comandos". Haga clic más allá de la pantalla de bienvenida, elija "script de la base de datos completa y todos los objetos de la base de datos". En la página "especificar cómo se deben guardar los scripts", haga clic en "avanzado". En "General" en la página de propiedades emergente, cambie "Tipos de datos a script" de "Solo esquema" a "Esquema y datos" y cambie "Script para la versión del servidor" de "2012" a "2008".

Luego tuve que encontrar alguna forma de editar el inicio de este archivo SQL masivo, para ajustar cómo se crearía la base de datos: vea esto q: https://stackoverflow.com/questions/102829/best-free-text-editor -supporting-more-than-4gb-files

Y finalmente tuve que encontrar alguna forma de ejecutar el script SQL, que era demasiado grande para abrirlo en SQL Management Studio; vea esto q: https://stackoverflow.com/questions/431913/how-do-you-run- a-300mb-ms-sql-sql-file

Rico
fuente
¿Qué retocaste al comienzo del archivo?
JonoRR
1
No puedo recordar exactamente, lo siento. Cosas específicas de la aplicación, creo. Quizás el nombre de la base de datos o algo así. Creo que lo habría agregado aquí si fuera relevante para las personas con el mismo problema.
Rico
3
@JonoRR Lo más probable es que desee editar la instrucción CREATE DATABASE y establecer las rutas de archivos de datos a lo que tenga sentido en el servidor de destino.
Igby Largeman
12

Para las migraciones de SQL, use el Asistente de migración de bases de datos SQL gratuito y de código abierto.

Tenía una base de datos de 5GB con un par de ~ 10 millones de registros e intenté la ruta a través de Generate Script y luego la ejecuté con sqlcmd.exe. En primer lugar, el script generado no siempre funcionaba correctamente. En segundo lugar, sqlcmd.exe también puede fallar en archivos grandes, quejándose de la memoria disponible. osql.exe funciona, pero solo lleva años (y tiene los mismos argumentos de línea de comandos).

Luego encontré una herramienta maravillosa para migrar SQL Server a bases de datos SQL Azure. Esto también funciona para SQL Server a SQL Server, por ejemplo, si desea migrar una base de datos SQL 2012 a 2008 R2. Utiliza bcp.exe, que usa una copia masiva. Hay disponible una versión de GUI y línea de comandos (Batch) y es de código abierto. Ver http://sqlazuremw.codeplex.com/ . En mi caso, la operación tomó 16 minutos.

En una pantalla avanzada, puede seleccionar que su objetivo sea SQL Server, no SQL Azure.

lvmeijer
fuente
1
¿Dónde configura el 2008 R2 en este asistente?
JonoRR
Sugerencia impresionante, he restaurado una base de datos de Express 2012 a Web 2008. Muy fácil.
rkawano
Puede confirmar que funciona como se anuncia. Hice un 2014-> 2012, dominio cruzado, servidores SQL locales. ¡Cómo ha evitado esta herramienta mis búsquedas durante tanto tiempo! Increíble incluso para uso no azul.
Gomibushi
3

Soy nuevo en SQL, pero logré migrar de 2012 a 2008. Para hacerlo, utilicé la utilidad de importación y exportación de SQL. Elegí el servidor SQL 2012 y la base de datos que quiero migrar y finalmente el servidor 2008 y creé una nueva base de datos como mi base de datos de destino. Funcionó.

Fernando
fuente
2

Prueba las herramientas APEXSQL . Tienen una herramienta que guiará la base de datos y también los datos.

Paul
fuente
"desde $ 299": ¿hay una alternativa gratuita?
Rico
1

Después de crear ese esquema en mi máquina 2008, pude abrir el asistente "Exportar datos" en la máquina 2012, y después de configurar el 2012 como máquina de origen y el 2008 como máquina de destino, me presentaron una lista de tablas que podría copiar Seleccioné todas mis tablas (más de 300) e hice clic en el asistente. Desafortunadamente, pasa años generando sus scripts, luego falla con errores como "Error al insertar en la columna de solo lectura 'FOO_ID'".

El problema es que no puede insertar las columnas de ID, así que:

  1. Seleccione todas las tablas marcándolas
  2. Seleccione todas las tablas (la forma de hacerlo es hacer clic en la primera y mantener presionada la tecla Mayús y hacer clic en la última tabla)
  3. Haga clic en "Editar asignaciones": puede ver eso justo encima del botón siguiente y al lado de la vista previa.
  4. Aparecerá una ventana, marque "Habilitar inserción de identidad" y luego haga clic en Siguiente y continúe, esto debería funcionar. Funcionó para mi.
Jaimee Jose
fuente
1

Seguí la solución de Rich https://superuser.com/a/469597/312310 anterior y funcionó muy bien. Gracias, ¡todavía no puedo votar aquí!

Los pasos adicionales que tuve que hacer para que esto funcione son:

  • Cambie los nombres de los archivos lógicos y asegúrese de que la ruta sea correcta. También tuve que cambiar el nombre del registro generado, de lo contrario, intentó sobrescribir el archivo mdf con el registro y luego arrojó este error https://stackoverflow.com/questions/7534664/sql-server-script-error-database-is- ya en uso

    CREAR BASE DE DATOS [xxxxx] EN PRIMARIO (NOMBRE = xxxxx ', NOMBRE DE ARCHIVO = N'C: \ Archivos de programa \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx.mdf', TAMAÑO = 14400KB, MAXSIZE = ILIMITADO, FILEGROWTH = 1024KB) INICIAR SESIÓN (NOMBRE = N'xxxxxldf ', FILENAME = N'C: \ Archivos de programa \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx_log.ldf', TAMAÑO = 18560KB, MAXSIZE = 2048GB, FILEGROWTH = 10 %) IR

  • Tuve que comentar la sección generada y agregar los permisos de usuario manualmente después

    USE [xxxxx]
    GO
    /****** Object:  User [xxxxx]    Script Date: 30/11/2014 12:44:07 ******/
    CREATE USER [xxxxx] FOR LOGIN [xxxxx] WITH DEFAULT_SCHEMA=[dbo]
    GO
    sys.sp_addrolemember @rolename = N'db_owner', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datareader', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datawriter', @membername = N'Umbraco'
    GO
    

Lo amplié, y he aquí que ahora puedo restaurar mi nueva base de datos Umbraco 7.1.2 a mi servidor web que solo tiene SQL Server 2008 R2.

ladygargar
fuente
0

Eche un vistazo a xSQL Schema Compare y xSQL Data Compare . Primero puede sincronizar el esquema con la comparación de esquema y luego copiar los datos.

Descargo de responsabilidad: estoy afiliado a xSQL.

Endi Zhupani
fuente