miércoles, 12 de diciembre de 2007

Error 3205:Restaurar bbdd de SQL 2005 a SQL 2000

Cuando se intenta restaurar desde SQL 2005 a 2000 se produce el siguiente error:

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

Too many backup devices specified for backup or restore; only 64 are allowed.
RESTORE HEADERONLY is terminating abnormally. (Microsoft SQL Server, Error: 3205)

Si se intenta hacer un 'attach' de la base de datos aparece el siguiente error:

Error 602 Severity Level 21
Could not find row in sysindexes for database ID %d, object ID %ld, index ID %d. Run DBCC CHECKTABLE on sysindexes

Estos errores se deben a que SQL 2005 tiene una estructura interna diferente de versiones anteriores, haciéndolo inteligible a versiones previas. Esto es común a todos los sistemas de bbdd; una nueva versión suele conllevar cambios estructurales.

Por el momento, la única manera posible es crear una bbdd vacía en SQL 2000, crear los objetos y luego exportar los datos bien por bcp o SSIS

En este foro, aparece un tutorial muy bueno ( en inglés) que indica los pasos a seguir

Simplificando y de modo rápido :

En Managment Studio, boton derecho en bbdd , tareas, genera scripts. Esto abririá un asistente.
Seleccionar bbd, siguiente.
En General seleccionar:

a. Script Collation , a TRUE

b. Script Database Create, a TRUE

c. Script of SQL Version, a SQL SERVER 2000

d. Script foreign keys, a FALSE

e. Script Triggers, a FALSE


Seleccionar siguiente y elegir cómo queréis salvar los scripts y finalizar.
con los scripts ya creados, usando el QA crearlos en la version 2000. Revisad los script que SQL genera porque podréis encontraros las vistas, en el caso que las tengáis puestas sin ningún orden.

El paso siguiente, para mover los datos, de nuevo botón derecho- tareas- exportar. Seguir las instrucciones del asistente (origen-destino). El tutorial advierte de un posibles problemas cuando se trata de transferir más de 12 elementos a la vez (personalmente no me ha pasado, igual era en SP1) Si os pasa, no queda más remedio que hacerlo en varias veces.

Por último, habrá que generar los scripts para los Triggers y las claves foráneas. Volved al Managment Studio, botón derecho en bbdd- tareas- Generar scripts. Aseguraros que el botón de 'Script todos los objetos' no está seleccionado, siguiente y


a. Incluir IF NOT EXISTS , a TRUE

b. Script Owner, a TRUE

c. Script of SQL Version, a SQL SERVER 2000

d. Script foreign keys, a TRUE

e. Script Triggers, a TRUE


Tras leer los elementos de la bbdd, aparece una nueva lista y un cuadro de diálogo. Seleccionar sólo las tablas y darle a siguiente. sólo queda seleccionar cómo queréis salvarlo.

Revisar los scripts y sustituir SYS.OBJECTS por SYSOBJECTS OBJECT_ID por ID

Ejemplo

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Account]') AND type in (N'U'))

sería entonces

IF NOT EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[dbo].[Account]') AND type in (N'U'))












No hay comentarios: