Я обращаюсь к базе данных Oracle из Java-приложения, когда я запускаю свое приложение, я получаю следующую ошибку:
java.sql.SQLException: ORA-00604: ошибка произошла на рекурсивном уровне SQL 1 ORA-01882: область часового пояса не найдена
Я обращаюсь к базе данных Oracle из Java-приложения, когда я запускаю свое приложение, я получаю следующую ошибку:
java.sql.SQLException: ORA-00604: ошибка произошла на рекурсивном уровне SQL 1 ORA-01882: область часового пояса не найдена
Вы также можете попробовать проверить версию драйвера Oracle jdbc и базы данных Oracle. Только сегодня у меня возникла эта проблема при использовании ojdbc6.jar (версия 11.2.0.3.0) для подключения к серверу Oracle 9.2.0.4.0. Замена его на ojdbc6.jar версии 11.1.0.7.0 решила проблему.
Мне также удалось подключить ojdbc6.jar версии 11.2.0.3.0 без ошибок, добавив oracle.jdbc.timezoneAsRegion=false
в файл oracle/jdbc/defaultConnectionProperties.properties (внутри jar). Нашел это решение здесь
Наконец, можно добавить -Doracle.jdbc.timezoneAsRegion=false
в командную строку или AddVMOption -Doracle.jdbc.timezoneAsRegion=false
в файлах конфигурации, использующих эту запись
В простой установке SQL-Developer под Windows перейдите в каталог
C:\Program Files\sqldeveloper\sqldeveloper\bin
и добавьте
AddVMOption -Duser.timezone=CET
в файл sqldeveloper.conf
.
Ошибка:
Ошибка из db_connection.java → > java.sql.SQLException: ORA-00604: ошибка на рекурсивном уровне SQL 1 ORA-01882: область часового пояса не найдена
ORA-00604: ошибка на рекурсивном уровне SQL 1ORA-01882: область часового пояса не найдена
Предыдущий код:
public Connection getOracle() throws Exception {
Connection conn = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:tap", "username", "pw");
return conn;
}
новый Код:
public Connection getOracle() throws Exception {
TimeZone timeZone = TimeZone.getTimeZone("Asia/Kolkata");
TimeZone.setDefault(timeZone);
Connection conn = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:tap", "username", "pw");
return conn;
}
теперь он работает!!
Обновите файл oracle/jdbc/defaultConnectionProperties.properties в любой версии библиотеки (т.е. внутри вашей банки), которую вы используете, чтобы содержать следующую строку:
oracle.jdbc.timezoneAsRegion=false
Что происходит, клиент JDBC отправляет идентификатор часового пояса на Сервер. Сервер должен знать эту зону. Вы можете проверить с помощью
SELECT DISTINCT tzname FROM V$TIMEZONE_NAMES where tzname like 'Etc%';
У меня есть некоторые серверы db, которые знают о "Etc/UTC" и "UTC" (tzfile version 18), но другие знают только "UTC" (версия tz 11).
SELECT FILENAME,VERSION from V$TIMEZONE_FILE;
На стороне клиента JDBC существует и другое поведение. Начиная с 11.2, драйвер отправляет идентификаторы зон, если он "известен" Oracle, тогда как перед этим он отправил временное смещение. Проблема с этой "отправкой известных идентификаторов" заключается в том, что клиент не проверяет, какая версия/содержимое часового пояса присутствует на сервере, но имеет свой собственный список.
Это объясняется в статье поддержки Oracle [ID 1068063.1].
Похоже, что это также зависит от клиентской ОС, более вероятно, что с помощью Ubuntu сработает Etc/UTC, чем RHEL или Windows. Я предполагаю, что это связано с некоторой нормализацией, но я не понял, что именно.
в eclipse go запустить → выполнить конфигурацию
перейдите на вкладку JRE в правой панели
в разделе Аргументы VM вставьте это
-Duser.timezone=GMT
затем Apply → Run
У меня возникла эта проблема при запуске автоматических тестов с сервера непрерывной интеграции. Я попытался добавить аргумент VM "-Duser.timezone=GMT
" к параметрам сборки, но это не решило проблему. Однако добавление переменной окружения "TZ=GMT
" действительно исправить для меня.
ОШИБКА:
ORA-00604: ошибка произошла на уровне рекурсивного SQL 1 ORA-01882: область часового пояса не найдена
Решение: настройка CIM в Centos.
/opt/oracle/product/ATG/ATG11.2/home/bin/dynamoEnv.sh
Добавьте эти аргументы Java:
JAVA_ARGS="${JAVA_ARGS} -Duser.timezone=EDT"
В Netbeans
Нажмите "ОК", а затем запустите программу.
Примечание. Вы можете также установить другие временные единицы, кроме UTC и GMT.
Если эта проблема в JDeveloper: Измените свойства проекта как для модели, так и для проекта представления → run/debug → профиль по умолчанию → edit и добавьте следующий параметр запуска: -Duser.timezone = Asia/Calcutta
Убедитесь, что вышеуказанное значение часового пояса выбрано из вашей базы данных следующим образом:
select TZNAME from V$TIMEZONE_NAMES;
Наряду с этим вы захотите проверить настройки часового пояса в вашем jdev.conf, а также в JDeveloper → Меню приложений → Свойства проекта по умолчанию → Выполнить/Отладить → Профиль по умолчанию → Параметры запуска.
Я столкнулся с этой проблемой с Tomcat. Установка следующего в $CATALINA_BASE/bin/setenv.sh
решила проблему:
JAVA_OPTS=-Doracle.jdbc.timezoneAsRegion=false
Я уверен, что использование одного из предложений параметров Java из других ответов будет работать одинаково.
У меня тоже была такая же проблема, когда я пытался создать соединение в JDeveloper. Наш сервер находился в разных часовых поясах, и поэтому он вызывал следующие ошибки:
ORA-00604: error occurred at recursive SQL level 1
ORA-01882: timezone region not found
Я сослался на многие форумы, в которых было предложено включить часовой пояс в параметры Java (запуск/отладка/профиль) свойств проекта и свойства проекта по умолчанию как -Duser.timezone="+02:00"
b, но это не сработало для меня. Наконец, для меня работало следующее решение.
Добавьте следующую строку в конфигурационный файл JDeveloper (jdev.conf).
AddVMOption -Duser.timezone=UTC+02:00
Файл находится в папке "< oracle install root > \Middleware\jdeveloper\jdev\bin\jdev.conf".
Я смог решить ту же проблему, установив часовой пояс в моей системе Linux (Centos 6.5).
Репостинг от
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html
установите часовой пояс в /etc/sysconfig/clock
например, установите ZONE = "America/Los_Angeles"
sudo ln -sf/usr/share/zoneinfo/Америка/Феникс/etc/localtime
Чтобы выяснить значение часового пояса, попробуйте
ls /usr/share/zoneinfo
и найдите файл, который представляет ваш часовой пояс.
После настройки перезагрузите компьютер и попробуйте снова.
В моем случае я мог бы заставить запрос работать, изменив "TZR" на "TZD"..
String query = "select * from table1 to_timestamp_tz(origintime,'dd-mm-yyyy hh24:mi:ss TZD') between ? and ?";
Я тоже с такой же проблемой сталкивался.
Linux, проект hibernate, драйвер ojdbc6 при запросе базы данных oracle 11g.
Параметр TZ не был установлен на машине Linux, что в основном говорит оракулу о часовом поясе. Итак, после добавления экспортной статистики "export TZ = UTC" во время запуска приложения моя проблема решена.
UTC--> Изменение в соответствии с вашим часовым поясом.
Опираясь на ту же проблему, используя Eclipse и удаленную базу данных Oracle, меняя системный часовой пояс , чтобы соответствовать часовому поясу сервера базы данных, была устранена проблема. Заново запустите машину после изменения системного часового пояса.
Надеюсь, это поможет кому-то.
java.sql.SQLException: ORA-00604: ошибка при рекурсивном SQL уровень 1 ORA-01882: область часового пояса не найдена
Для этого типа ошибки просто измените свое системное время на формат вашей страны по умолчанию GMT
например. Индийский часовой пояс - chennai, kolkata.
У меня была такая же проблема при попытке установить соединение на OBIEE с Oracle db. Я изменил свой часовой пояс Windows с (GMT + 01: 00) Западной Центральной Африки на (GMT + 01: 00) Брюссель, Копенгаген, Мадрид, Париж. Затем я перезагрузил компьютер, и он работал нормально. Похоже, что Oracle не смог распознать часовой пояс западной и центральной Африки.