Degradar de SQL Server 2008 a 2005

32

Los archivos de base de datos creados con SQL 2008 no son compatibles con 2005. ¿Existe alguna solución?

Sevki
fuente
No olvide exportar también los inicios de sesión del servidor.
StanleyJohns
¿Esto se debe a que está desarrollando en 2008 pero sus servidores de producción todavía son 2005? Cualquier solución que proporcione retrasará lo inevitable y al mismo tiempo hará que su vida sea miserable, ya que probablemente terminará haciendo estas rebajas de forma regular.
datagod

Respuestas:

16

No se necesitan herramientas de terceros. SQL Server 2008 Management Studio nos brindó una herramienta muy poderosa para convertir una base de datos a una versión anterior porque agregaron una opción de "Datos de script" al asistente de "Base de datos de script".

Simplemente haga clic derecho en la base de datos en SSMS SQL2008, vaya a Tareas, luego "Generar secuencias de comandos"

Recorra el asistente, asegúrese de elegir "Verdadero" para "Datos de script" en las opciones de tabla / vista. Elija todos los objetos, luego ejecute el script que crea en el servidor 2005. (¡Tenga en cuenta que el script creado podría ser masivo si la base de datos original es muy grande!)

Tenga en cuenta que incluso puede ejecutar el asistente en un servidor SQL2005 para convertir una base de datos SQL2005 a SQL2000 (por supuesto, necesitaría las herramientas de 2008 instaladas en su estación de trabajo).

BradC
fuente
44
Sin ofender, pero esto no puede ser una solución si la base de datos es grande. Pruebe esa técnica en cualquier tabla con pocos millones de filas (y piense en varchar (max) como el tipo de datos de una sola columna) y si Management Studio podrá abrir y analizar este archivo, estará contento, pero estoy contento Seguro que no se abrirá, se bloqueará. Lo sentimos, pero esa no es la solución a este problema, excepto si el db es realmente pequeño.
Marian
3
Claro, si la base de datos es demasiado grande, escriba solo la estructura de la base de datos, luego use su método favorito (SSIS, BCP, Asistente de importación) para enviar los datos.
BradC
En SSMS 11.0 parece que no hay opción para guiar datos junto con la estructura. i.imgur.com/SGkG8oZ.png
jcollum
Ah OK, ahora está en "Tipos de datos para script" justo arriba de Opciones de tabla / vista
jcollum
16

Puede BCP los datos de una instancia de SQL Server a otra instancia. Esa sería la forma más rápida de copiar los datos de una versión a otra. Dependiendo del volumen de datos, puede llevar mucho tiempo.

Jeremías Peschka
fuente
2
Dependiendo del volumen de datos, casi siempre tomará mucho tiempo
jcolebrand
Sí, seguro que lo hará. Mover una base de datos grande a una versión anterior de SQL Server no es una tarea fácil.
mrdenny
2
La ventaja de BCP es que será más rápido que usar datos de script. Sí, es lento, pero es más rápido que muchas alternativas.
Jeremiah Peschka
15

Lamentablemente, no hay una manera directa, que yo sepa, de degradar un DB del formato de 2008 al 2005.

La forma en que lo hice en el pasado (en realidad con versiones anteriores de SQL Server, pero el proceso será el mismo) es:

  1. Restaurar la base de datos en una instancia de SQL2008 si aún no lo ha hecho
  2. Cree una base de datos vacía con las estructuras correctas (tablas, índices, restricciones, vistas, procesos, disparadores, ...) en una instancia de SQL2005. Esperemos que pueda hacer esto desde su procedimiento de compilación existente y / o código fuente, pero si no puede usar el Administrador de SQL Server para crear scripts para todo en la base de datos 2005 y ejecutar el resultado en blanco en la instancia de 2008.
  3. Asegúrese de que las dos instancias puedan verse entre sí (es decir, que no haya firewalls que bloqueen las conexiones si las instancias se encuentran en máquinas diferentes) y vincúlelas utilizando sp_addlinkedserver .
  4. Copie todos los datos de un DB a otro. Si no hay restricciones de claves externas y problemas similares en los desencadenantes de los que preocuparse, puede vincular los DB juntos y pasar por la lista de tablas (seleccionándolos de sys.objects) y ejecutar
    INSERT destinationserver.destinationdb.schema.table SELECT * FROM sourcedb.schema.table
    (o INSERT schema.table SELECT * FROM sourceserver.sourcedb.schema.tablesi ha vinculado las instancias de esa manera) )
    para cada mesa. Si tiene constricciones y desencadenantes que imponen coherencia entre tablas, por supuesto necesitará ser un poco más inteligente sobre el orden de estas operaciones, especialmente si tiene restricciones cíclicas como una tabla con una restricción basada en sí misma (una jerarquía de retención datos, como un posible ejemplo).

Puede ser más eficiente simplemente copiar los datos primero y agregar todas las demás estructuras (índices, procesos, desencadenantes, ...) después del paso 3. Esto evita problemas de orden de inserción de filas causados ​​por restricciones y desencadenantes, y la construcción de los índices en el En teoría, el final debería ser más rápido que crearlos, ya que se agregan todos los datos, aunque si tiene algún índice agrupado en sus tablas, créelos antes de agregar los datos, ya que no sería más rápido crearlos después del hecho.

Por supuesto, todo esto supone que ninguno de sus objetos usa características específicas de SQL 2008; si lo hacen, con suerte descubrirá y arreglará esas cosas cuando las cosas tengan un error al reconstruir el esquema. Si alguno de sus códigos se basa en un comportamiento oficialmente indefinido que puede haber variado entre las versiones de SQL Server, es posible que tenga errores mucho más sutiles y esquivos para buscar y resolver más tarde.

David Spillett
fuente
1
-1 porque esto es realmente ineficiente (seleccionar * en de) en comparación con los gustos de BCP.
jcolebrand
@jcolebrand lo suficientemente justo en eficiencia. Aunque la técnica es una que he tenido trabajo.
David Spillett el
es un sistema justo, solo pensé que incluiría eso a causa de futuros lectores aquí. Tienes los votos positivos actualmente para que no sea un problema. ;)
jcolebrand
1

Primero tiene que hacer un script de la base de datos y asegurarse de que en la versión que especifique el tipo al que desea bajar la calificación. Y copiar los datos de la versión superior a la versión inferior de SQL Data compare le hará el truco por usted.

¡Buena suerte!

Mbongeni
fuente