Error de Oracle ORA-12705 (Cannot access NLS data files or invalid environment specified)

Hay veces que al conectarnos a una base Oracle, nos retorna un error ORA-12705 con el mensaje “ORA-12705:Cannot access NLS data files or invalid environment specified”, o en un ambiente en español “ORA-12705: No se puede acceder a los archivos de datos NLS o se ha especificado un entorno no válido”.

Un stack trace típico de este error en una aplicación Java es algo parecido a esto:

Caused by: java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278)
	at oracle.jdbc.driver.T4CTTIoauthenticate.receiveOauth(T4CTTIoauthenticate.java:785)
	at oracle.jdbc.driver.
T4CConnection.logon(T4CConnection.java:362)
	at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:414)
	at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
	at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
	at java.sql.DriverManager.getConnection(DriverManager.java:582)
	at java.sql.DriverManager.getConnection(DriverManager.java:185)
	at org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:65)
	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:294)
	at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:840)
	at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
	... 7 more

O algo parecido a esto, en español:

ORA-12705: No se puede acceder a los archivos de datos NLS o se ha especificado un entorno no válido); nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ORA-00604: se ha producido un error a nivel 1 de SQL recursivo ORA-12705: No se puede acceder a los archivos de datos NLS o se ha especificado un entorno no válido)

En mi caso, el problema se da cuando tengo el sistema operativo -y el conjunto de caracteres- configurado para Uruguay. Para solucionarlo en las aplicaciones Java, podemos agregar opciones para configurar el locale que queremos que la JVM utilice, de forma que no tome el del sistema operativo. Esto se hace agregando las siguientes opciones al ejecutar el comando java:

-Duser.region=us -Duser.language=en

Con user.region configurada para ‘us’ y user.language para ‘en’ no falla, eso es seguro. La configuración para México (-Duser.region=mx -Duser.language=es) o España (-Duser.region=es -Duser.
language=es) también funciona bien.

Otra opción es setear la variable de entorno NLS_LANG con un valor de tres partes: _.. Ejemplos de NLS_LANG pueden ser “AMERICAN_AMERICA.WE8ISO8859P1” o “AMERICAN_AMERICA.UTF8”. Podemos ver todos los valores válidos para el lenguaje, territorio y conjunto de caracteres en la vista llamada V$NLS_VALID_VALUES, mediante la consulta

SELECT parameter, value FROM V$NLS_VALID_VALUES

Una tercer opción, válida en Windows es cambiar la configuración regional y de idioma para algún país que Oracle soporte (Estados Unidos, España, México, etc.). Hay que tener en cuenta sin embargo que esta configuración nos puede afectar otros programas, especialmente en la configuración de moneda, formato de fecha o de separación de miles.

Los siguientes links tienen buena información al respecto, aunque no muy orientadas a resolver el problema para lenguajes o sets de caractedes “raros” para Oracle:
http://ora-12705.ora-code.com/
http://www.dba-oracle.com/t_nls_lang.htm
http://www.dba-oracle.com/t_ora_12705_error.htm
http://oraclespin.wordpress.com/2008/05/01/setting-nls_lang-for-oracle/

Etiquetado , , . Bookmark the permalink.

8 respuestas a Error de Oracle ORA-12705 (Cannot access NLS data files or invalid environment specified)

  1. Juan Jose says:

    aqui tb les dejo otra opcion…
    http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html
    entren a esta pagina y acualizen su Conector o Driver… a uno mas reciente, y correra sin problemas

  2. Fernando Rodriguez says:

    funciono para sqldeveloper y oracle 11.1.0.6 mdifique
    sqldeveloper.conf, en versiones 11.2.. y 12c, no era necesario el cambio

  3. Axel says:

    Me funcionó, muchas gracias.

    Quería usar Oracle DB y SQL Developer en español, el problema es que soy de Honduras y me daba el error al conectarse por la configuración de la zona horaria.

    Gracias en serio.

  4. gerardo says:

    sale muy caro oracle para perder tiempo con esto

  5. Pedro Tournier says:

    jose! Siempre llego a este post y me salva. Abrazo valor!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *