primera - ORACLE 11g no distingue entre mayúsculas y minúsculas por defecto
substr oracle (4)
Simplemente podría establecer los parámetros NLS_SORT
, NLS_COMP
mencionados en el artículo como los valores en el archivo de inicio de Oracle utilizando el alter system set <parameter> = <value>;
cláusula.
Puede encontrar información sobre el uso de los comandos del sistema alternativo aquí .
Aquí hay un buen enlace sobre el uso correcto de los parámetros NLS_*
. Tenga en cuenta que algunas configuraciones del parámetro NLS_SORT pueden / podrían causar problemas de rendimiento, especialmente cuando no está configurado como BINARIO. El estado de los documentos de Oracle:
Establecer NLS_SORT en cualquier otra cosa que no sea BINARY hace que una ordenación use una exploración de tabla completa, independientemente de la ruta elegida por el optimizador. BINARY es la excepción porque los índices se crean de acuerdo con un orden binario de claves. Por lo tanto, el optimizador puede usar un índice para satisfacer la cláusula ORDER BY cuando NLS_SORT se establece en BINARY. Si NLS_SORT se establece en cualquier clasificación lingüística, el optimizador debe incluir una exploración de tabla completa y una clasificación completa en el plan de ejecución.
En este artículo encontré que, desde ORACLE 10g, hay una manera de hacer que una sesión de conexión en particular compare cadenas sin distinción de mayúsculas y minúsculas, sin necesidad de funciones locas de SQL, usando ALTER SESSION
.
¿Alguien sabe si, en 11g, podría haber una manera de hacer que la base de datos siempre opere en este modo por defecto para todas las nuevas sesiones de conexión, eliminando así la necesidad de ejecutar ALTER SESSION
s cada vez que se conecte?
¿O tal vez, un parámetro adicional que podría especificar en su cadena de conexión que activaría lo mismo?
¡Seguro que puede!
Obtenga su amigable DBA para establecer estos parámetros:
ALTER SYSTEM SET NLS_COMP = LINGUISTIC SCOPE SPFILE;
ALTER SYSTEM SET NLS_SORT = BINARY_AI SCOPE SPFILE;
Esto está tomado de mi breve artículo sobre Cómo hacer que Oracle no sea sensible a las mayúsculas y minúsculas
¡Encontré el mismo problema de rendimiento con inserts y nls en 11g r2! Afortunadamente para mí, el golpe de rendimiento no fue lo suficientemente significativo como para requerir un cambio de aplicación.
Si puedes prescindir de binary_ci para INSERT, haré una sesión alternativa justo antes de la inserción y después, para que no tengas que soltar el disparador
Intenté usar un logon trigger
para emitir estos comandos y obtener consultas que no distingan entre mayúsculas y minúsculas:
execute immediate ''alter session set NLS_SORT=BINARY_CI'';
execute immediate ''alter session set NLS_COMP=LINGUISTIC'';
Y aunque eso me dio CI, también me dio problemas de rendimiento increíblemente malos. Tenemos una tabla en particular que, sin esas configuraciones, las inserciones tardan 2 milisegundos. Con esas configuraciones en su lugar, las inserciones tomaron 3 segundos . Lo he confirmado creando y soltando el disparador varias veces.
No sé si hacerlo a nivel del sistema, a diferencia del nivel de sesión con un disparador, hace la diferencia o no.