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.
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; |
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; |
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; |
Aunque la longitud se mide en bytes con las codificaciones habituales para el español los caracteres usan un solo byte.
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; |