В 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 ответов
попробуйте следующее:
- проверьте правильность настройки NLS_LANG. На windows он находится в реестре под
\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
. - проверьте правильность установки программного обеспечения клиента Oracle.
- проверьте, есть ли на этом компьютере несколько домов Oracle. В этом случае найдите активный и проверьте, работает ли он.
- тест с 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
вы также можете настроить значения на уровне переменных среды (зависит от вашей ОС).
у меня была та же проблема. Решение состояло в том, чтобы добавить страну и язык к 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 региональный и язык. Измените регион и язык в ОС, оба должны совпадать.