Domanda

Ho riscontrato questo errore nella mia applicazione web j2ee.

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 la cartella del progetto e l'ho importato sulla mia eclissi, quando lo eseguo ho riscontrato questo errore. I file jar sono già impacchettati con la cartella del progetto.

Ho anche creato un semplice progetto j2ee usando l'ibernazione ma ho avuto lo stesso errore. Ho provato a eseguire il ping del server DB e sfogliarlo utilizzando lo sviluppatore PL / SQL e non ho alcun problema con esso

È stato utile?

Soluzione

Prova a seguire:

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

Modifica
Per quanto riguarda i driver, controlla questo sito: Oracle Instant Client . Qui troverai la documentazione sull'installazione dei driver minimi necessaria per l'accesso JDBC a Oracle. Non ne so molto perché uso .Net.

Modifica 2:
Vedi questa domanda: Impostazione NLS_LANG per thin driver JDBC . C'è lo stesso errore che hai riscontrato e il problema era che la locale predefinita per LANG NLS non era definita. Citazione:

  

Le impostazioni NLS_LANG sono derivate da java.util.Locale. Pertanto, dovrai effettuare una chiamata simile a questa prima di connetterti:

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

Altri suggerimenti

Ho capito che potresti passare quei due parametri alla tua app Java per risolvere il problema:

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

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

Per Windows env, è necessario modificare le impostazioni internazionali di sistema e Formato di sistema in inglese / USA .

Come modificare le impostazioni internazionali del sistema?

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

Apri il file:

\sqldeveloper\sqldeveloper\bin\sqldeveloper.conf

E aggiungi quanto segue:

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

Quanto sopra fa il trucco.

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

Ho trovato la soluzione, cambio semplicemente la lingua e la lingua nel mio sistema operativo (Windows 7), assicurandomi che corrisponda alla lingua e alla lingua dell'oracolo.

Prima esecuzione query:

select userenv('LANGUAGE') from dual;`

Questo darà l'oracolo regionale e lingua. Modifica la lingua e la lingua nel sistema operativo, entrambe devono corrispondere.

Il driver JDBC Oracle esegue implicitamente la seguente istruzione dopo l'apertura di una nuova connessione:

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

Nel nostro caso abbiamo avuto problemi con Oracle XE 11g e mappature di lingua / territorio predefinite incorporate nel driver JDBC: la localizzazione 'ru' era mappata sul territorio 'CIS' che è supportato solo da Oracle EE, ma Oracle XE aveva 'RUSSIA' solo territorio. Ecco come l'abbiamo risolto:

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

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

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

Risolto: costante ru = RUSSO tratto dalla classe oracle.sql.converter.CharacterSetMetaData del driver java jdbc.

controlla la variabile di sistema JAVA_HOME e verifica che sia la stessa versione che stai usando nei tuoi progetti e programmi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top