2009-10-27 25 views
8

Mam ten błąd w mojej aplikacji sieci web j2ee.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) 

Projekt ten działa w komputerach moich kolegów ... Znaczy ten projekt pracuje dla nich, ale kiedy poprosiłem o ich folderze projektu i importowanych go na moim zaćmienia, kiedy go uruchomić i zrealizować ten błąd. Pliki jar są już spakowane wraz z folderem projektu.

Stworzyłem również prosty projekt j2ee, używając hibernacji, ale miałem ten sam błąd. Próbowałem pingować serwer DB i przeglądać go za pomocą PL/SQL Developer i nie mam żadnych problemów z nim

Odpowiedz

5

Try następujący:

  1. Sprawdź, czy ustawienie NLS_LANG jest poprawna. W przypadku okien jest rejestrowany pod numerem \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE.
  2. Sprawdź, czy oprogramowanie klienta Oracle jest poprawnie zainstalowane.
  3. Sprawdź, czy na tym komputerze znajduje się wiele domów Oracle. W takim przypadku znajdź aktywny i sprawdź, czy działa.
  4. Test z SQL * Plus, jeśli jest zainstalowany. Programista Sql działa, ponieważ ma własną instalację klienta.

Edit:
dotyczących sterowników, sprawdź w witrynie: Oracle Instant Client. Znajdziesz tam dokumentację dotyczącą minimalnej instalacji sterowników potrzebnych do uzyskania dostępu JDBC do Oracle. Nie wiem zbyt wiele o tym, ponieważ używam .Net.

Edit 2:
Zobacz na to pytanie: NLS_LANG setting for JDBC thin driver. Jest taki sam błąd, jaki masz i problem polegał na tym, że domyślne ustawienia narodowe dla NLS LANG nie zostały zdefiniowane. Cytat:

Ustawienia NLS_LANG pochodzą z java.util.Locale. Dlatego trzeba będzie wykonać połączenie podobny do tego przed podłączeniem:

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

muszę zainstalować klienta Oracle dla mojej aplikacji internetowej, aby połączyć ? Myślałem, że po prostu potrzebuję słoika sterownika ODBC dołączonego do mojego projektu. – cedric

4

zorientowali się, że można przejść, że dwa params do aplikacji Java, aby rozwiązać ten problem:

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

Można również skonfigurować wartości na poziomie zmiennych środowiskowych (zależy od systemu operacyjnego).

0

Znalazłem rozwiązanie, po prostu zmieniłem regionalny i język w moim systemie operacyjnym (Windows 7), upewnij się, że pasuje do regionalnego i języka oracle.

2

Miałem ten sam problem. Rozwiązaniem było dodać kraj i język sqldeveloper.conf

Proszę otworzyć plik:

\sqldeveloper\sqldeveloper\bin\sqldeveloper.conf 

i dodaj następujący:

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

Powyższy załatwia sprawę.

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

+0

Pracowałem dla mnie. Ale to jest rakieta ... Chodzi mi o to, jak bym to odgadł ... – nikita

0
kierowca

Oracle JDBC domyślnie wykonuje następujące oświadczenie po otwarciu nowego połączenia:

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

W naszym przypadku mieliśmy problemy z Oracle XE odwzorowań 11g i domyślny język/terytorium wbudowanych w sterownik JDBC: ' ru 'locale zostało zmapowane na terytorium' CIS ', które jest obsługiwane tylko przez Oracle EE, ale Oracle XE miał tylko terytorium "ROSJA". Oto nasz sposób ustalony w ten sposób:

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

Istnieje opcja dla NLS_LANGUAGE (mieliśmy żadnych problemów z domyślnych):

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