I am getting this error while trying to create a connection pool, on my Oracle database, Oracle 10gR2.

java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified

I am able to connect to the database over sqlplus & iSQLPlus client, but when I try to connect using this Java program, I get this error just when the connection pool is to be initialised and it does not initialise the connection pool.

Can someone please help me resolving it?

DB Version: Oracle version

OS: RHEL 4.0

Here is a barebone, java code which is throwing this error, while connecting to my database.

import java.sql.*;

public class connect{
    public static void main(String[] args) {
        Connection con = null;
        CallableStatement cstmt = null;

        String url = "jdbc:oracle:thin:@hostname:1521:oracle";
        String userName = "username";
        String password = "password";

            System.out.println("Registering Driver ...");
            DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());

            System.out.println("Creating Connection ...");
            con = DriverManager.getConnection(url, userName, password);


        } catch(Exception ex) {
          } finally {
            if(cstmt != null) try{cstmt.close();}catch(Exception _ex){}
            if(con != null) try{con.close();}catch(Exception _ex){}


4 Answers 4


I figured out that that you could pass that two params to your Java app to resolve the issue:

-Duser.country=en -Duser.language=en

You could configure the values at environment variable level as well (depends from your OS).

  • I was getting the same error in SQLDeveloper. Adding AddVMOption -Duser.language=en AddVMOption -Duser.region=us to sqldeveloper\sqldeveloper\bin\sqldeveloper.conf helps. (Posting this as comment because can't answer this protected question.)
    – Vadzim
    Jun 15, 2015 at 13:08

import java.util.*;

Locale.setDefault(Locale.ENGLISH); // use this for change NLS
   String URL = "jdbc:oracle:thin:@//"+khost+":"+kport+"/"+kbasename;

DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
   Connection con = DriverManager.getConnection(URL,kuser,kpassword);

What is


set to on the machine where you are trying to execute the java program from? If you haven't already, you should first unset NLS_LANG and try that. If that doesn't work, set it to the character set of your specific database and see if that fixes the issue.


Document #158654.1 in Metalink explains how to resolve this kind of errors.

It could be a simple error in your environnement (have a look at the $NLS_* environnement variables) or a rights permissions (Do you have rights on $ORACLE_HOME/ocommon/nls/admin/data ?)

  • Trying to connect with oracle user only, with permissions.
    – M.N
    Sep 11, 2009 at 6:09
  • Maybee a script or a tool you used set the NLS_* variable to a wrong value. What does "env | grep NLS" says? The right could have been changed by doing a wrong manipulation. What does "ls -l $ORACLE_HOME/ocommon/nls/admin/data" says?
    – Benoit
    Sep 11, 2009 at 8:55
  • where to look for the $ORACLE_HOME/ocommon/nls/admin/data directory. on the client system if the application is a j2ee based or on the database server.
    – Viky
    Oct 5, 2009 at 13:25

Not the answer you're looking for? Browse other questions tagged or ask your own question.