Я получаю доступ к базе данных 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 (внутри банки). Нашел это решение здесь
Наконец, можно добавить -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 версии 18), но другие знают только UTC (tz версии 11).
SELECT FILENAME,VERSION from V$TIMEZONE_FILE;
На стороне клиента JDBC также существует другое поведение. Начиная с версии 11.2, драйвер будет отправлять идентификаторы зон, если они «известны» Oracle, тогда как перед отправкой смещения времени. Проблема с этой «отправкой известных идентификаторов» заключается в том, что клиент не проверяет, какая версия / контент часового пояса присутствует на сервере, но имеет свой собственный список.
Это объясняется в статье поддержки Oracle [ID 1068063.1].
Кажется, это также зависит от клиентской ОС, более вероятно, что Etc / UTC не сработает с Ubuntu, чем с RHEL или Windows. Я предполагаю, что это связано с некоторой нормализацией, но я не понял, что именно.
в eclipse go run → запустить конфигурацию
там перейдите на вкладку JRE на правой боковой панели
в разделе аргументов виртуальной машины вставьте это
-Duser.timezone=GMT
затем Применить -> Выполнить
У меня возникла эта проблема при запуске автоматических тестов с сервера непрерывной интеграции. Я попытался добавить аргумент виртуальной машины " -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.
Я также столкнулся с аналогичной проблемой.
Linux, проект гибернации, драйвер ojdbc6 при запросе базы данных oracle 11g.
Параметр TZ не был установлен в Linux-машине, что в основном сообщает оракулу о часовом поясе. Итак, после добавления статуса экспорта «экспорт TZ = UTC» на момент запуска приложения моя проблема была решена.
UTC -> изменить в соответствии с вашим часовым поясом.
Если эта проблема в JDeveloper: измените свойства проекта как для модели, так и для проекта просмотра -> запустить / отладить -> профиль по умолчанию -> изменить, добавьте следующий параметр запуска: -Duser.timezone = Asia / Calcutta
Убедитесь, что указанное выше значение часового пояса получено из вашей базы данных следующим образом:
select TZNAME from V$TIMEZONE_NAMES;
Наряду с этим вы захотите проверить настройки часового пояса в вашем jdev.conf, а также в JDeveloper -> Меню приложения -> Свойства проекта по умолчанию -> Выполнить / Отладка -> Профиль по умолчанию -> Параметры запуска.
У меня тоже была такая же проблема, когда я пытался создать соединение в JDeveloper. Наш сервер расположен в другом часовом поясе, поэтому он вызвал следующие ошибки:
ORA-00604: error occurred at recursive SQL level 1
ORA-01882: timezone region not found
Я сослался на многие форумы, которые просили включить часовой пояс в параметры Java (Run / Debug / Profile) свойств проекта и свойства проекта по умолчанию, как -Duser.timezone="+02:00"
b, но это не сработало для меня. Наконец, для меня сработало следующее решение.
Добавьте следующую строку в файл конфигурации JDeveloper ( jdev.conf ).
AddVMOption -Duser.timezone=UTC+02:00
Файл находится в "<корень установки oracle> \ Middleware \ jdeveloper \ jdev \ bin \ jdev.conf".
В моем случае я мог заставить запрос работать, изменив "TZR" на "TZD" ..
String query = "select * from table1 to_timestamp_tz(origintime,'dd-mm-yyyy hh24:mi:ss TZD') between ? and ?";
Мне удалось решить ту же проблему, установив часовой пояс в своей системе Linux (Centos6.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 / America / Phoenix / etc / localtime
Чтобы узнать значение часового пояса, попробуйте
ls /usr/share/zoneinfo
и найдите файл, который представляет ваш часовой пояс.
После того, как вы установили их, перезагрузите компьютер и попробуйте снова.
У меня была такая же проблема при попытке установить соединение OBIEE с Oracle db. Я изменил часовой пояс Windows с (GMT + 01: 00) Западно-Центральная Африка на (GMT + 01: 00) Брюссель, Копенгаген, Мадрид, Париж. Затем я перезагрузил свой компьютер, и он работал нормально. Похоже, Oracle не смог распознать часовой пояс Западной и Центральной Африки.
Эта проблема возникает из-за того, что код, который пытается подключиться к базе данных, имеет часовой пояс, которого нет в базе данных. Эту проблему также можно решить, установив часовой пояс, как показано ниже, или любой действительный часовой пояс, доступный в oracle db. действительный часовой пояс, который можно найти, выберите * из версии v $;
System.setProperty ("user.timezone", "Америка / Нью-Йорк"); TimeZone.setDefault (ноль);
Столкнувшись с той же проблемой при использовании Eclipse и удаленной базы данных Oracle, изменение часового пояса моей системы в соответствии с часовым поясом сервера базы данных устранило проблему. После изменения часового пояса системы перезапустите машину .
Я надеюсь это может кому-то помочь
java.sql.SQLException: ORA-00604: ошибка на рекурсивном уровне SQL 1 ORA-01882: регион часового пояса не найден
Для этого типа ошибки просто измените системное время на стандартный для вашей страны формат GMT.
например, часовой пояс Индии - ченнаи, калькутта.