8

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 10.2.0.1

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";

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

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

            System.out.println("Success!");

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

}

4 Answers 4

12

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).

1
  • 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
3

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);
1

What is

NLS_LANG

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.

0

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 ?)

3
  • 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.