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){}
            }
    }

}
M.N
  • 337
  • 3
  • 7
  • 15

4 Answers4

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

FoxyBOA
  • 417
  • 1
  • 6
  • 12
  • 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 '15 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.

Keith
  • 352
  • 3
  • 11
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 ?)

Benoit
  • 3,499
  • 1
  • 18
  • 17
  • Trying to connect with oracle user only, with permissions. – M.N Sep 11 '09 at 06: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 '09 at 08: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 05 '09 at 13:25