ORA-12705: Zugriff auf NLS-Datendateien oder ungültige Umgebung nicht möglich

7

Beim Versuch, einen Verbindungspool in meiner Oracle-Datenbank Oracle 10gR2 zu erstellen, wird dieser Fehler angezeigt.

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

Ich kann über den sqlplus & iSQLPlus-Client eine Verbindung zur Datenbank herstellen. Wenn ich jedoch versuche, eine Verbindung mit diesem Java-Programm herzustellen, wird dieser Fehler nur angezeigt, wenn der Verbindungspool initialisiert werden soll und der Verbindungspool nicht initialisiert wird.

Kann mir bitte jemand bei der Lösung helfen?


DB-Version: Oracle version 10.2.0.1

Betriebssystem: RHEL 4.0


Hier ist ein Barebone-Java-Code, der diesen Fehler beim Herstellen einer Verbindung zu meiner Datenbank auslöst.

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

}
MN
quelle

Antworten:

11

Ich habe herausgefunden, dass Sie diese beiden Parameter an Ihre Java-App übergeben können, um das Problem zu beheben:

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

Sie können die Werte auch auf der Ebene der Umgebungsvariablen konfigurieren (abhängig von Ihrem Betriebssystem).

FoxyBOA
quelle
Ich habe den gleichen Fehler in SQLDeveloper erhalten. Hinzufügen AddVMOption -Duser.language=en AddVMOption -Duser.region=uszu sqldeveloper\sqldeveloper\bin\sqldeveloper.confhilft. (Dies als Kommentar
posten,
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);

quelle
1

Was ist

NLS_LANG

auf dem Computer einstellen, auf dem Sie das Java-Programm ausführen möchten? Wenn Sie dies noch nicht getan haben, sollten Sie zuerst NLS_LANG deaktivieren und dies versuchen. Wenn dies nicht funktioniert, setzen Sie es auf den Zeichensatz Ihrer spezifischen Datenbank und prüfen Sie, ob das Problem dadurch behoben wird.

Keith
quelle
0

In Dokument Nr. 158654.1 in Metalink wird erläutert, wie diese Art von Fehlern behoben werden.

Dies kann ein einfacher Fehler in Ihrer Umgebung sein (siehe die Umgebungsvariablen $ NLS_ *) oder eine Berechtigung für Rechte (Haben Sie Rechte für $ ORACLE_HOME / ocommon / nls / admin / data?)

Benoit
quelle
Es wird versucht, nur mit Oracle-Benutzern eine Verbindung mit Berechtigungen herzustellen.
MN
Vielleicht hat ein Skript oder ein Tool, das Sie verwendet haben, die Variable NLS_ * auf einen falschen Wert gesetzt. Was sagt "env | grep NLS"? Das Recht hätte durch eine falsche Manipulation geändert werden können. Was sagt "ls -l $ ORACLE_HOME / ocommon / nls / admin / data"?
Benoit
Wo soll man nach dem Verzeichnis $ ORACLE_HOME / ocommon / nls / admin / data suchen? auf dem Client-System, wenn die Anwendung auf j2ee basiert oder auf dem Datenbankserver.
Viky