Red de conocimiento informático - Problemas con los teléfonos móviles - Metodología sqlserver2000 de migración de base de datos Sybase

Metodología sqlserver2000 de migración de base de datos Sybase

Introducción

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>

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

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>

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)

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

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.