Metodología sqlserver2000 de migración de base de datos Sybase
Recientemente participé en un proyecto para migrar una base de datos Sybase a Microsoft SQLServer
2000. La experiencia que adquirí en este proyecto ayudará a los administradores de bases de datos Sybase a migrar bases de datos Sybase a Microsoft SQL Server. 2000. Migrar a plataforma SQLServer2000.
Si bien algunas diferencias entre los dos son considerables, como el hecho de que los procedimientos almacenados en el sistema de administración de bases de datos Sybase no se pueden compilar en SQL
Server, otras diferencias son menos obvias. Antes de completar la conversión, es necesario probar el comportamiento y los resultados de la lógica de programación en los archivos de script y los procedimientos almacenados.
En las siguientes secciones, analizaremos algunas de las principales diferencias entre estos dos sistemas de bases de datos, que es importante estudiar detenidamente durante las etapas de planificación de la migración.
Modo de compatibilidad de datos
Una solución alternativa para resolver algunas diferencias de compatibilidad entre SQLServer2000 y Sybase es cambiar el nivel de compatibilidad de la base de datos en SQL
Server y combinarlo con el de Sybase. nivel de compatibilidad de la base de datos. Para ello podemos utilizar el procedimiento almacenado sp_dbcmptlevel.
Las declaraciones y resultados de la siguiente tabla muestran las diferencias entre las diferentes versiones de la base de datos:
(Untitled-1)
Nota:
1. Cuando el modo de compatibilidad está configurado en 70, las siguientes palabras no se pueden usar como nombres e identificadores de objetos: BACKUP, DENY, PRECENT, RESTORE
2. Cuando el modo de compatibilidad está configurado en 65 , las siguientes palabras Las palabras no se pueden utilizar como nombres e identificadores de objetos: autorización, cascase, cruz, distribuido, escape, completo, interno, unión, izquierda, externo, privilegios, restringir, descansar, descansar, restaurar.
La siguiente es la sintaxis de sp_dbcmptlevel:
sp_dbcmptlevel[[@dbname=]nombre][,[@new_cmptlevel=]versión]
@ dbname es usado Verifique y cambie el nivel de compatibilidad del nombre de la base de datos.
@new_cmptlevel determina el nivel de compatibilidad de la base de datos (establecido en 70, 65, 60, el valor predeterminado es NULL).
Por ejemplo:
sp_dbcmptlevelpubs
El resultado devuelto por esta línea de código es el siguiente:
El nivel de compatibilidad actual es 70.
Si DBCC Se muestra un mensaje de error y debe comunicarse con el administrador del sistema. Podemos usar rerunsp_dbcmptlevel para verificar que la base de datos de pubs se haya modificado correctamente:
sp_dbcmptlevelpubs
Nos devolverá la siguiente información:
El nivel de compatibilidad actual es 65 (el nivel de compatibilidad actual es 65 )
El nivel de compatibilidad actual es 65.
Además de los ejemplos anteriores, las diferencias en los niveles de compatibilidad se extienden a las palabras reservadas; tanto Sybase como SQL
Server tienen muchas palabras reservadas que no se pueden usar como nombres para objetos en la base de datos. , y this Las palabras reservadas en ambos productos son similares, pero no idénticas.
Este problema dificulta la migración de Sybase a SQL
Server porque los objetos que están disponibles en Sybase pueden no estar disponibles en SQL Server.
La siguiente es una lista de términos que son palabras reservadas en SQL
Server pero que no son palabras reservadas en Sybase.
Nota: Al migrar a una base de datos de
Server SQL, se debe cambiar el nombre de los objetos de la base de datos Sybase cuyos nombres contengan palabras de la siguiente lista.
BACKUPCOLUMNCOMMITTEDCONTAINSCONTAINSTABLE
CROSSCURRENT_DATE
CURRENT_TIMECURRENT_TIMESTAMPCURRENT_USER
DENYDISTRIBUTEDFILEFLOPPY
FREETEXT
FREETEXTTABLEFULLIDENTITYCOLINNERJOIN p> p>
Modo de gestión de transacciones
SybaseSQLServer
Setchained[on:off]Setimplicit_transactions
[on:
Usar el siguiente código determina el modo de transacción en Sybase:
SELECT@@tranchained
GO
Se pueden devolver los siguientes resultados:
0 significa en progreso Utilice el modo de transacción no encadenado
1 significa que la conexión se está ejecutando en modo encadenado
Utilice el siguiente código para determinar el modo de transacción en SQL Server:
SI(@@ opciones&2)>0
IMPRIMIR
activado
ELSE
IMPRIMIR desactivado
Los siguientes son posibles valores de retorno:
0off
>0on
Nivel de aislamiento
En aplicaciones multiproceso, como bases de datos relacionales, el motor de base de datos gestiona el aislamiento entre procesos en ejecución. El aislamiento de datos es muy importante. La siguiente tabla muestra las diferencias entre Sybase y SQL Server al expresar los niveles de aislamiento.
SybaseSQL
Servidor
0READUNCOMMITTED
1READCOMMITTED
2REPEATABLEREAD
3 p>
SERIALIZABLE
Sintaxis del cursor
La creación y ejecución de procedimientos almacenados en los dos productos son básicamente similares, pero hay algunas excepciones en la instrucción del cursor, que deberíamos Aviso. Aquí hay un ejemplo:
CREATEPROCEDUREsql_cursorAS
DECLARE@lnamechar(20),@fname
char(20)
DECLAREmycursorCURSORFOR p> p>
SELECTau_lname,au_fnameFROM
autores
OPENmycursor
FETCHFROMmycursorINTO@lname,@fname
WHILE@@
FETCH_ STATUS=0
/*La base de datos Sybase usa @SQLSTATUS en lugar de @@FETCH_STATUS*/
BEGIN
FETCHFROMmycursorINTO@lname, @fname
/*
**
**
debe hacerse aquí.
p>
Aquí se debe realizar algo de lógica empresarial
*/
END
CLOSEmycursor
DEALLOCATE / *
La base de datos Sybase necesita usar la palabra CURSOR aquí*/mycursor
SybaseSQLServer
El comando de recuperación se ejecutó correctamente 00
Ejecución del comando de recuperación falló 1-2
No hay más registros accesibles 2
-1
Activador de retorno
Este comando está en SQLServer y no existe. así que no lo use al migrar a SQL
En Server, se debe modificar el procedimiento almacenado de Sybase que usa el comando ROLLBACKTRIGGER. Al modificar datos en una tabla de base de datos con disparadores, usar el comando ROLLBACK
TRIGGER puede ser engañoso; el comando ROLLBACK
TRIGGER solo devuelve el disparador y las modificaciones a los datos del disparador, si el La transacción se ha confirmado, el resto de la transacción continuará escribiéndose en la base de datos. Por lo tanto, es posible que todas las declaraciones de la transacción no se hayan completado correctamente, pero los datos se han confirmado.
El siguiente es un ejemplo de un activador que utiliza ROLLBACK
TRIGGER en la base de datos Sybase:
CREATETABLEtable1(aint, bint)
GO
p>
CREATETRIGGERtrigger1ontable1
FORINSERT
COMO
IFEXISTS(SELECT1FROMinsertedWHEREa=
100)
BEGIN
ROLLBACKTRIGGERconRAISERROR50000Valor no válido para la columna
a
END
INSERTINTOtable2
SELECTa, GETDATE () de
insertado
RETURN
GO
En el código anterior, a menos que a=100, todos los datos insertados en la tabla 1 también se insertará en la tabla como filas de auditoría 2; si a = 100, se activará el comando ROLLBACK
TRIGGER, pero no se activará el comando INSERT. El resto del comando por lotes continuará. se ejecutará y aparecerá un mensaje de error indicando que algo sucedió en el error del comando INSERT. Los siguientes son todos los comandos INSERT:
BEGINTRAN
INSERTINTOtable1VALUES(1,1)
INSERTINTOtable1VALUES
(100,2) p >
INSERTINTOtable1VALUES(3,3)
GO
SELECT*FROMtable1
Después de ejecutar estos comandos, debido al uso de ROLLBACK
comando TRIGGER, el segundo comando INSERT no se ejecutó los valores en la Tabla2 son 1, (fecha actual) y 3, (fecha actual), porque ROLLBACK se activa cuando a=100
TRIGGER, 100 no se inserta en la tabla Table2 y se cancela todo el procesamiento en el disparador. Tabla 2 Tabla.
Simulación de esta operación en SQL
Se requiere más código y se deben usar transacciones externas junto con puntos de guardado de la siguiente manera:
CREATEtrigger1ontable1FOR
INSERT
COMO
SAVETRANtrigger1
IFEXISTS(SELECT*FROMinsertedWHEREa
=100)
BEGIN p>
ROLLBACKTRANTrigger1
RAISERROR50000
Al migrar, todas las declaraciones de impresión que usan sintaxis de sustitución deben cambiarse a declaraciones RAISERROR.
Conclusión
Convertir una base de datos Sybase a una base de datos SQL
Server no es imposible, pero existen algunas diferencias entre los dos productos que debes tener en cuenta. de al convertir. Dependiendo del tamaño de la aplicación, esta conversión puede llevar una cantidad de tiempo significativa. Si bien no será necesario reescribir todas las aplicaciones, todavía queda mucho trabajo por hacer.
En este momento no he encontrado una manera más fácil de convertir entre las dos bases de datos. Dado que los dos productos son muy similares en muchos aspectos, convertir con éxito una base de datos Sybase a datos de SQL Server es muy fácil.