Árbol de páginas

Aquí se encuentra la documentación de los cambios realizados en función de las distintas bases de datos que se han testado.1. La ordenación y las búsquedas no tienen que ser sensibles a los acentos ni distinguir entre mayúsculas y minúsculas.

Oracle:

Hay que modificar las variables de sesion NLS_SORT para que use un collation como SPANISH_AI (tiene que tener sufijo AI que indica que no es sensible a acentos ni mayúsculas) y  NLS_COMP a LINGUISTIC para que las comparaciones se hagan de forma acorde a lo indicado en NLS_SORT. 

Para aplicar esta configuración usar un trigger que cambie en la sesion estos valores como el siguiente: 

CREATE OR REPLACE TRIGGER SYS.ALTER_COLLATION_FOR_SGI

AFTER LOGON on DATABASE

BEGIN

    IF ( user like '%_SGI' ) THEN

        execute immediate 'ALTER SESSION SET NLS_SORT=SPANISH_AI';

        execute immediate 'ALTER SESSION SET NLS_COMP=LINGUISTIC';

    END IF;

END;


SQL Server:

Al crear la base de datos indicar un collation con los sufijos CI (case-insensitive) y AI (accent-insensitive) como Modern_Spanish_100_CI_AI.

CREATE DATABASE SGI COLLATE Modern_Spanish_100_CI_AI;


2. La longitud de las columnas de texto se debe de medir en caracteres, en lugar de en bytes.

Oracle:

Para que se defina el tamaño en caracteres la propiedad NLS_LENGTH_SEMANTIC tiene que tener el valor CHAR, para hacerlo hay que usar un trigger que cambie en la sesion estos valores como el siguiente: 

CREATE OR REPLACE TRIGGER SYS.ALTER_NLS_FOR_SGI

AFTER LOGON on DATABASE

BEGIN

    IF ( user like '%_SGI' ) THEN

        execute immediate 'ALTER SESSION SET NLS_LENGTH_SEMANTICS="CHAR"';

    END IF;

END;


SQL Server:

Aunque la longitud se mide en bytes con las codificaciones habituales para el español los caracteres usan un solo byte.

3. (SQL Server) Nivel de aislamiento READ_COMMITTED_SNAPSHOT si se producen dead locks

Tanto en Oracle como en SQL Server el nivel por defecto es READ_COMMITTED pero aunque el nombre sea el mismo no se comportan del mismo modo y SQL Server realiza bloqueos también en las lecturas  lo que puede producir dead locks con mayor probabilidad (https://www.dbi-services.com/blog/how-sql-server-mvcc-compares-to-oracle-and-postgresql/), en el caso de detectarlos se debería de configurar como READ_COMMITTED_SNAPSHOT que tiene un comportamiento más similar al comportamiento por defecto de postgres y oracle.

ALTER DATABASE SGI SET READ_COMMITTED_SNAPSHOT ON;


  • Sin etiquetas