2009-10-27 17 views
8

J'ai cette erreur dans mon application 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) 

Ce projet fonctionne dans les PC de mes collègues ... Je veux dire que ce projet fonctionne pour eux, mais quand je leur ai demandé dossier du projet et importé sur mon éclipse, quand je le lance je rencontre cette erreur. Les fichiers jar sont déjà empaquetés avec le dossier du projet.

J'ai également créé un projet j2ee simple utilisant hibernate mais j'ai eu la même erreur. J'ai essayé de ping le serveur DB et parcourir à l'aide de PL/SQL Developer et je n'ai pas de problème avec elle

Répondre

5

Essayez suivante:

  1. Vérifiez que paramètre NLS_LANG est correct. Sur les fenêtres il est dans le registre sous \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE.
  2. Vérifiez que le logiciel client Oracle est correctement installé.
  3. Vérifiez s'il existe plusieurs maisons Oracle sur cet ordinateur. Dans ce cas, trouvez-en un actif et vérifiez si cela fonctionne.
  4. Testez avec SQL * Plus s'il y en a un installé. Sql Developer fonctionne car il possède sa propre installation client.

Edit:
pilotes En ce qui concerne, vérifier ce site: Oracle Instant Client. Vous y trouverez la documentation sur l'installation minimale des pilotes requise pour l'accès JDBC à Oracle. Je ne sais pas grand-chose à ce sujet parce que j'utilise .Net.

Edit 2:
Voir cette question: NLS_LANG setting for JDBC thin driver. La même erreur s'est produite et le problème était que les paramètres régionaux par défaut pour NLS LANG n'étaient pas définis. Quote:

Les paramètres NLS_LANG sont dérivés de java.util.Locale. Par conséquent, vous devrez faire un appel similaire à celui avant la connexion:

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

Dois-je installer un client Oracle pour mon application Web pour se connecter ? Je pensais que j'avais juste besoin du pot de pilote odbc inclus dans mon projet. – cedric

4

je me suis dit que vous pourriez passer que deux params à votre application Java pour résoudre le problème:

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

Vous pouvez également configurer les valeurs au niveau de la variable d'environnement (dépend de votre système d'exploitation).

0

J'ai trouvé la solution, je viens de changer le régional et la langue dans mon OS (Windows 7), assurez-vous qu'il correspond à l'oracle régional et la langue.

2

J'ai eu le même problème. La solution a été d'ajouter le pays et la langue à sqldeveloper.conf

S'il vous plaît ouvrir le fichier:

\sqldeveloper\sqldeveloper\bin\sqldeveloper.conf 

Et ajouter ce qui suit:

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

Ce qui précède l'affaire.

Référence: http://forum.oradba.net/showthread.php?t=423&langid=1

+0

A travaillé pour moi. Mais c'est une science de fusée ... Je veux dire comment je le devinerais ... – nikita

0

pilote Oracle JDBC exécute implicitement la déclaration suivante après l'ouverture nouvelle connexion:

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

Dans notre cas nous avons eu des problèmes avec Oracle XE 11g et la langue par défaut/correspondances de territoire embarqués dans pilote JDBC: ' ru 'locale a été mappée sur le territoire' CIS 'qui n'est supporté que par Oracle EE, mais Oracle XE ne possédait que le territoire' RUSSIA '. Voici la façon dont nous avons fixé ceci:

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

Il est l'option pour NLS_LANGUAGE (nous avons eu aucun problème avec les valeurs par défaut):

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