Compatibilidad con versiones anteriores de SQL Server 2012 para copias de seguridad con 2008


14

Tengo varios clientes con SQL Server 2008 y eso es lo que tengo aquí también en mi servidor. Utilizo archivos de respaldo para enviar bases de datos entre clientes y en mi oficina.

He leído que cuando crea una copia de seguridad desde SQL Server 2012 no hay forma de restaurarla en una instancia de 2008. Supuse que el nivel de compatibilidad solucionaría este problema, pero no lo hace. Por lo tanto, no sé cómo actualizar. Aparte de actualizar todos mis clientes a la vez, lo cual es imposible, no se me ocurre ninguna forma limpia de hacerlo.

Tengo la necesidad de enviar una base de datos a un cliente, así como recibir una base de datos de un cliente. Esta es mi primera actualización de versión en SQL Server, así que soy nuevo en este problema. Alguna idea de cómo proceder?


44
Puede tener instaladas una instancia de SQL Server 2008 y una instancia de SQL Server 2012 instaladas en su servidor al mismo tiempo con diferentes nombres de instancia. ¿Quizás eso resolvería sus problemas con los clientes en diferentes versiones?
Mikael Eriksson

Pregunta similar sobre SO: stackoverflow.com/q/1744808/95710
DForck42

Respuestas:


16

Aquí hay dos cosas involucradas: el número de versión del archivo y el nivel de compatibilidad. Cuando adjunta una base de datos a una versión principal más nueva (como de 2008 a 2008R2 o 2008R2 a 2012), la versión de la base de datos cambia permanentemente y no puede volver a adjuntar esa base de datos a una versión anterior.

El nivel de compatibilidad es para analizar T-SQL obsoleto de la vieja escuela que solía funcionar en versiones anteriores de SQL Server. No cambia cómo se almacenan los datos en el disco.

Para entregar la base de datos a alguien en una versión anterior de SQL Server, deberá exportar los datos e importarlos a otra base de datos. Herramientas como la Comparación de datos de Red Gate son útiles para esto.


Sí, he tenido exactamente el mismo problema antes. Terminé creando secuencias de comandos de toda la base de datos y luego creando secuencias de comandos de todos los datos. SQL Gate y Data Compare de Red Gate vinieron al rescate ese día.
DForck42

@ DForck42: en mi caso, la base de datos era demasiado grande para escribir con datos, así que terminé escribiendo el esquema y luego moviendo los datos bcp.
ivan_pozdeev

@ivan_pozdeev, ¿está diciendo que exportó con SQL Server 2012 BCP e importó con SQL Server 2008R2 BCP? Sé genial saber que los formatos de archivo son compatibles, gracias.
Chris

2
@Chris msdn.microsoft.com/en-us/library/ms162802.aspx "En SQL Server 2014, la utilidad bcp admite archivos de datos nativos compatibles con SQL Server 2000, SQL Server 2005, SQL Server 2008, SQL Server 2008 R2 y SQL Server 2012. "
ivan_pozdeev

Gracias @ivan_posdeev, esto ha sido una revelación. He documentado mis pasos a continuación. en caso de que ayude a alguien más.
Chris

6

SQL Server utiliza la configuración del nivel de compatibilidad para determinar cómo se deben manejar ciertas características nuevas. De esta forma, una base de datos podría migrarse a una versión más nueva de SQL sin tener problemas con la aplicación. El nivel de compatibilidad se puede cambiar de un lado a otro.

Desafortunadamente, los archivos de respaldo no son compatibles con versiones anteriores. Un método sería usar la importación / exportación para mover sus datos de su base de datos actual a su instancia de versión anterior.


3

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 copia masiva. Hay una versión de GUI y línea de comandos (Batch) disponible 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.


2

He encontrado que BCP es más efectivo que algunas de las herramientas para obtener datos en una versión anterior de SQL Server y para extraer datos de RDS. (Gracias @ivan_posdeev.)

Primero genero el esquema haciendo clic derecho en la base de datos en SQL Server Management Studio, Tareas, Generar scripts. Marque todos los objetos, en los objetos avanzados, asegúrese de que todo lo que necesita se guionará (estadísticas, índices, etc.), desmarque "USAR base de datos" si su base de datos de destino tiene un nombre diferente, configure la compatibilidad con la versión de su base de datos de destino y genere un archivo que crea su esquema. Cree una base de datos en su destino y ejecute este archivo en ella (usando osql, sqlcmdo la GUI).

Para mover los datos, ejecute la siguiente consulta dos veces en la base de datos de origen , primero comentando la segunda columna para generar el archivo por lotes para extraer datos, luego comentando la primera columna para generar el archivo por lotes de importación para ejecutar en su destino. (Debe agregar sus servidores de origen y destino, nombres de instancia, directorios de archivos de salida y entrada, nombres de usuario y contraseñas. Para usar la seguridad integrada, reemplace las opciones -Uy -Pcon solo-T ).

Esto es compatible con Unicode, si no lo necesita, cambie el -Ninterruptor en ambas declaraciones a -n.

SELECT 
   'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME  + ' out d:\dbdump\' + s.Name + '.' + t.NAME  + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
--    'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME  + ' in d:\dbdump\' + s.Name + '.' + t.NAME  + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME  + '.ERRORS.dat'
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
ORDER BY 
    s.Name, t.NAME

Después de ejecutar, compruebe los archivos llamados schema.tablename.ERRORS.dat: incluirá las filas que fallaron, vacías si no lo hizo.

Referencia de MSDN para BCP aquí , recorrido más amigable de las opciones de BCP aquí .

He encontrado esto muy superior a la generación de scripts, y cualquiera de las herramientas que he probado. También se ejecuta en bases de datos RDS (que no permiten copias de seguridad). Los archivos de datos generados tienen un 30% del tamaño de los scripts SQL, su ejecución lleva una fracción del tiempo y es mucho más confiable. (Las secuencias de comandos generadas por SQL Server para los datos de secuencias de comandos siempre se dispararon, a veces de manera predecible a veces no, el SQL generado no era compatible con 2008R2 (por ejemplo, usado nvarchar(0), a menudo no se completó sin razón aparente, etc. BCP también replica cualquier violación de restricciones , como la integridad referencial).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.