В ORA-00604 В ORA-12705

У меня эта ошибка в моем веб-приложения 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)

этот проект работает на ПК моих коллег... Я имею в виду, что этот проект работает для них, но когда я попросил их папку проекта и импортировал ее на моем eclipse, когда я запускаю ее, я встречаю эту ошибку. Файлы jar уже упакованы в папку проекта.

Я также создал простой проект j2ee с помощью hibernate, но у меня была та же ошибка. Я попытался пинговать сервер БД и просматривать его с помощью PL / SQL developer и у меня нет никаких проблем с этим

7 ответов


попробуйте следующее:

  1. проверьте правильность настройки NLS_LANG. На windows он находится в реестре под \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE.
  2. проверьте правильность установки программного обеспечения клиента Oracle.
  3. проверьте, есть ли на этом компьютере несколько домов Oracle. В этом случае найдите активный и проверьте, работает ли он.
  4. тест с SQL * Plus, если он установлен. Sql Developer работает, потому что имеет собственную установку клиента.

Edit:
Что касается драйверов, проверьте этот сайт:Oracle Instant Client. Там вы найдете документацию по установке минимальных драйверов, необходимых для доступа JDBC к Oracle. Я не знаю об этом много, потому что я использую .Сеть.

Edit 2:
См. этот вопрос:настройка NLS_LANG для тонкого драйвера JDBC. Существует та же ошибка, что и у вас, и проблема заключалась в том, что локаль по умолчанию для NLS LANG была не определен. Цитата:

настройки NLS_LANG являются производными от java.утиль.Место действия. Поэтому перед подключением вам нужно будет сделать аналогичный вызов:

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

Я понял, что вы можете передать эти два параметра в свое Java-приложение, чтобы решить проблему:

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

вы также можете настроить значения на уровне переменных среды (зависит от вашей ОС).


для Windows env вам необходимо изменить языковой стандарт системы и System Format до English/US.

как изменить язык системы?


у меня была та же проблема. Решение состояло в том, чтобы добавить страну и язык к sqldeveloper.conf

пожалуйста, откройте следующий файл:

\sqldeveloper\sqldeveloper\bin\sqldeveloper.conf

и добавить следующее:

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

вышеизложенное делает трюк.

ссылка:http://forum.oradba.net/showthread.php?t=423&langid=1


Я нашел решение, я просто меняю региональный и язык в моей ОС (windows 7), убедитесь, что он соответствует региональному и языку oracle.


драйвер Oracle JDBC неявно выполняет следующий оператор после открытия нового соединения:

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

в нашем случае у нас были проблемы с Oracle XE 11g и сопоставлениями языка/территории по умолчанию, встроенными в драйвер JDBC: локаль " ru "была сопоставлена с территорией "СНГ", которая поддерживается только Oracle EE, но Oracle XE имела только территорию "Россия". Вот как мы это исправили:

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

есть опция для NLS_LANGUAGE(у нас не было проблем с по умолчанию):

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

сначала выполнить запрос:

select userenv('LANGUAGE') from dual;`

это даст oracle региональный и язык. Измените регион и язык в ОС, оба должны совпадать.