2009-10-27 7 views
8

Ich habe diesen Fehler in meiner j2ee Web-Anwendung.ORA-00604 ORA-12705

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

oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145) 
oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) 
oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283) 
oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278) 
oracle.jdbc.driver.T4CTTIoauthenticate.receiveOauth(T4CTTIoauthenticate.java:785) 
oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:376) 
oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:441) 
oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165) 
oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35) 
oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:839) 
java.sql.DriverManager.getConnection(Unknown Source) 
java.sql.DriverManager.getConnection(Unknown Source) 
org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133) 
org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) 
org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142) 
org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85) 
org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353) 


org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85) 
org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353) 

Dieses Projekt arbeitet in meinen Kollegen PCs ... ich meine das Projekt für sie funktioniert, aber wenn ich für ihre Projektordner gefragt und importierte es auf meiner Finsternis, wenn ich es laufen treffe ich diesen Fehler. Die JAR-Dateien sind bereits im Projektordner enthalten.

Ich habe auch ein einfaches j2ee Projekt mit Hibernate erstellt, aber ich hatte den gleichen Fehler. Ich versuchte, den DB-Server pingen und durchsuchen es PL/SQL-Entwickler verwendet, und ich habe kein Problem mit ihm

Antwort

5

Versuchen folgende:

  1. Überprüfen Sie, ob NLS_LANG-Einstellung korrekt ist. Auf Windows ist es in der Registrierung unter \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE.
  2. Überprüfen Sie, ob die Oracle-Clientsoftware korrekt installiert ist.
  3. Überprüfen Sie, ob mehrere Oracle-Homes auf diesem Computer vorhanden sind. Suchen Sie in diesem Fall nach einem aktiven und prüfen Sie, ob es funktioniert.
  4. Testen Sie mit SQL * Plus, wenn eines installiert ist. Sql Developer funktioniert, weil es eine eigene Clientinstallation hat.

Edit:
bezüglich Treiber, überprüfen Sie diese Seite: Oracle Instant Client. Dort finden Sie die Dokumentation zur Installation von Mindesttreibern, die für den JDBC-Zugriff auf Oracle benötigt wird. Ich weiß nicht viel darüber, weil ich .Net benutze.

Edit 2:
diese Frage Siehe: NLS_LANG setting for JDBC thin driver. Es gibt denselben Fehler wie bei Ihnen, und das Problem war, dass das Standardgebietsschema für NLS LANG nicht definiert war. Quote:

Die NLS_LANG-Einstellungen sind von der java.util.Locale abgeleitet. Daher müssen Sie einen Anruf ähnlich wie dies machen vor dem Anschließen:

Locale.setDefault(Locale.<your locale here>); 
+0

Muss ich einen Oracle-Client für meine Web-App installieren, um eine Verbindung ? Ich dachte, ich brauche nur das odbc Treiberglas in meinem Projekt. – cedric

4

ich herausgefunden, dass Sie, dass zwei params auf Ihre Java-Anwendung passieren könnte das Problem zu beheben:

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

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

0

Ich fand Lösung, ändere ich nur die regionale und Sprache in meinem Betriebssystem (Windows 7), stellen Sie sicher, dass es mit dem Orakel Regional und Sprache übereinstimmt.

2

Ich hatte das gleiche Problem. Die Lösung war das Land und die Sprache zu sqldeveloper.conf

Bitte öffnen Sie die Datei hinzuzufügen:

\sqldeveloper\sqldeveloper\bin\sqldeveloper.conf 

und fügen Sie die folgenden Schritte aus:

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

Die oben funktioniert der Trick.

Referenz: http://forum.oradba.net/showthread.php?t=423&langid=1

+0

Arbeitete für mich. Aber das ist Raketenwissenschaft ... ich meine, wie würde ich es vermuten ... – nikita

0

Oracle JDBC-Treiber führt implizit folgende Anweisung nach neuen Verbindungsöffnung:

ALTER SESSION SET NLS_LANGUAGE='language' NLS_TERRITORY='territory' 

In unserem Fall hatten wir Probleme mit Oracle XE 11g und Standardsprache/Gebiet Zuordnungen in JDBC-Treiber eingebettet: ' ru 'locale wurde dem' CIS'-Gebiet zugeordnet, das nur von Oracle EE unterstützt wird, aber Oracle XE hatte nur 'RUSSIA'-Gebiet. Hier ist die Art, wie wir dieses Problem behoben:

-Doracle.jdbc.territoryMap="ru=RUSSIA;RU=RUSSIA" 

Es gibt Option für NLS_LANGUAGE (wir mit Ausfällen keine Probleme hatte):

-Doracle.jdbc.languageMap="ru=RUSSIA;RU=RUSSIA"