2009-10-27 9 views
8

Ho riscontrato questo errore nella mia applicazione 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) 

Questo progetto funziona nei PC dei miei colleghi ... voglio dire questo progetto funziona per loro, ma quando ho chiesto per la loro cartella del progetto e importato sul mio eclissi, quando l'eseguo che incontro questo errore. I file jar sono già inclusi nella cartella del progetto.

Ho anche creato un semplice progetto j2ee usando Hibernate ma ho avuto lo stesso errore. Ho cercato di eseguire il ping al server DB e navigare utilizzando PL/SQL di sviluppo e non hanno alcun problema con esso

risposta

5

Prova seguente:

  1. Controllare che NLS_LANG sia corretta. Su Windows è nel registro sotto \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE.
  2. Verificare che il software client Oracle sia installato correttamente.
  3. Controllare se ci sono più case Oracle su quel computer. In tal caso, trova uno attivo e controlla se funziona.
  4. Test con SQL * Plus se ne è installato uno. Sql Developer funziona perché ha una propria installazione client.

Edit:
driver Per quanto riguarda, controllare questo sito: Oracle Instant Client. Qui troverete la documentazione sull'installazione minima dei driver necessaria per l'accesso JDBC a Oracle. Non ne so molto perché io uso .Net.

Edit 2:
Vai a questa domanda: NLS_LANG setting for JDBC thin driver. C'è lo stesso errore che hai e il problema era che la locale predefinita per NLS LANG non era definita. Codice:

Le impostazioni di NLS_LANG sono derivate da java.util.Locale. Pertanto, è necessario effettuare una chiamata simile a questo prima di collegare:

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

devo installare un client Oracle per la mia web app per collegare ? Pensavo di aver solo bisogno del barattolo del driver odbc incluso nel mio progetto. – cedric

4

ho capito che che si poteva passare che due params per la vostra applicazione Java per risolvere il problema:

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

È possibile configurare i valori anche a livello di variabile di ambiente (dipende dal sistema operativo).

0

Ho trovato la soluzione, ho appena cambiato la lingua e la lingua nel mio sistema operativo (Windows 7), assicurarsi che corrisponda all'oracolo regionale e lingua.

2

Ho avuto lo stesso problema. La soluzione era quella di aggiungere il paese e la lingua da sqldeveloper.conf

Si prega di aprire il file:

\sqldeveloper\sqldeveloper\bin\sqldeveloper.conf 

e aggiungere il seguente:

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

È possibile che questo fa il trucco.

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

+0

Ha funzionato per me. Ma questa è scienza missilistica ... Voglio dire come potrei immaginarlo ... – nikita

0
conducente

Oracle JDBC esegue implicitamente dichiarazione seguente dopo l'apertura nuova connessione:

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

Nel nostro caso abbiamo avuto problemi con Oracle XE mappature 11g e lingua predefinita/territorio incorporati nel driver JDBC: ' La localizzazione di ru è stata mappata al territorio di 'CIS' che è supportato solo da Oracle EE, ma Oracle XE aveva solo territorio 'RUSSIA'. Ecco il modo in cui abbiamo fissato questo:

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

C'è un'opzione per NLS_LANGUAGE (non abbiamo avuto problemi con le impostazioni predefinite):

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