ORA-01882: регион часового пояса не найден


103

Я получаю доступ к базе данных Oracle из приложения Java, когда я запускаю свое приложение, я получаю следующую ошибку:

java.sql.SQLException: ORA-00604: ошибка на рекурсивном уровне SQL 1 ORA-01882: регион часового пояса не найден


Расскажите нам о своей среде, как вы запускаете Java?
ABCade

Я запускаю приложение Java из командной строки. 64-разрядная версия Windows 7, но Oracle DB работает на удаленном сервере Unix.
ndalama

9
попробуйте добавить "-Duser.timezone = <YOUR_GMT>" к вашей команде, не забудьте заменить <YOUR_GMT> на ваше время по Гринвичу, т.е. -Duser.timezone = "+ 05:30"
ABCade

Ответы:


87

Вы также можете попробовать проверить версию драйвера 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в файлы конфигурации, которые используют эту нотацию


24
Мне также удалось подключить ojdbc6.jar версии 11.2.0.3.0 без ошибок, добавив oracle.jdbc.timezoneAsRegion = false в файл oracle / jdbc / defaultConnectionProperties.properties (внутри банки). Нашел это решение здесь: forum.oracle.com/forums/thread.jspa?threadID=1095807
Matteo Steccolini

33
Наконец, можно добавить -Doracle.jdbc.timezoneAsRegion = false в командную строку или AddVMOption -Doracle.jdbc.timezoneAsRegion = false в файлы конфигурации, которые используют эту нотацию.
Маттео Стекколини

Спасибо stmsat. У меня это сработало. Я изменил свою банку ojdbc на версию 11.1.0.7.0 в каталоге tomcat / lib, и она начала работать :).
mdev

1
Я использую maven для создания и упаковки (войны) моего проекта и развертывания в Cloud Flare, можно ли каким-либо образом установить это свойство из файла application.properties или из maven.
Исмаил

41

В простой установке SQL-Developer под Windows перейдите в каталог

C:\Program Files\sqldeveloper\sqldeveloper\bin

и добавить

AddVMOption -Duser.timezone=CET

в файл sqldeveloper.conf.


Используя Jetbrains DataGrip и столкнувшись с той же проблемой после добавления этой опции виртуальной машины, проблема была решена
latsha

Спасибо, это действительно очень помогло!
Quinton

27

Я получил ошибку:

Ошибка из 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;
}

теперь он работает !!


Спасибо, это именно то, что мне было нужно!
Алан Томпсон,

Я не знаю, почему ему не понравился часовой пояс по умолчанию «Европа / Мадрид». Установка часового пояса по умолчанию на «GMT» работает.
fgui

22

Обновите файл oracle / jdbc / defaultConnectionProperties.properties в любой версии библиотеки (например, внутри вашей банки), чтобы он содержал следующую строку:

oracle.jdbc.timezoneAsRegion=false

19

Что происходит, так это то, что клиент 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. Я предполагаю, что это связано с некоторой нормализацией, но я не понял, что именно.


14
  1. в eclipse go runзапустить конфигурацию

  2. там перейдите на вкладку JRE на правой боковой панели

  3. в разделе аргументов виртуальной машины вставьте это

    -Duser.timezone=GMT

  4. затем Применить -> Выполнить


8

У меня возникла эта проблема при запуске автоматических тестов с сервера непрерывной интеграции. Я попытался добавить аргумент виртуальной машины " -Duser.timezone=GMT" к параметрам сборки, но это не решило проблему. Однако добавление переменной окружения " TZ=GMT" помогло мне это исправить.


2
У меня тоже работала переменная окружения "TZ = GMT". У меня возникли проблемы со сценарием оболочки, который настраивал среду для запуска отдельного инструмента, который, в свою очередь, обращался к Oracle.
Дэвид Кинер,

1
Имея ту же проблему, мне тоже пришлось использовать «TZ = Europe / Zurich» при использовании «ant». Это сработало!
Christof Kälin

2
Это должен быть главный ответ. Все остальные ответы не сработали.
Alex

4

ОШИБКА :

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"

3

В Netbeans,

  1. Щелкните правой кнопкой мыши свой проект -> Свойства
  2. Перейти к запуску (в разделе "Категории")
  3. Введите -Duser.timezone = UTC или -Duser.timezone = GMT в параметрах виртуальной машины.

Щелкните ОК, затем повторно запустите вашу программу.

Примечание. Вы также можете установить другие временные интервалы, кроме UTC и GMT.


2

Я столкнулся с этой проблемой с Tomcat. Установка следующих параметров $CATALINA_BASE/bin/setenv.shрешила проблему:

JAVA_OPTS=-Doracle.jdbc.timezoneAsRegion=false

Я уверен, что использование одного из предложений параметра Java из других ответов будет работать таким же образом.


2

Я также столкнулся с аналогичной проблемой.

Окружающая среда:

Linux, проект гибернации, драйвер ojdbc6 при запросе базы данных oracle 11g.

разрешение

Параметр TZ не был установлен в Linux-машине, что в основном сообщает оракулу о часовом поясе. Итак, после добавления статуса экспорта «экспорт TZ = UTC» на момент запуска приложения моя проблема была решена.

UTC -> изменить в соответствии с вашим часовым поясом.


2

Если эта проблема в JDeveloper: измените свойства проекта как для модели, так и для проекта просмотра -> запустить / отладить -> профиль по умолчанию -> изменить, добавьте следующий параметр запуска: -Duser.timezone = Asia / Calcutta

Убедитесь, что указанное выше значение часового пояса получено из вашей базы данных следующим образом:

select TZNAME from V$TIMEZONE_NAMES;

Наряду с этим вы захотите проверить настройки часового пояса в вашем jdev.conf, а также в JDeveloper -> Меню приложения -> Свойства проекта по умолчанию -> Выполнить / Отладка -> Профиль по умолчанию -> Параметры запуска.


1

У меня тоже была такая же проблема, когда я пытался создать соединение в 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".


1

В моем случае я мог заставить запрос работать, изменив "TZR" на "TZD" ..

String query = "select * from table1 to_timestamp_tz(origintime,'dd-mm-yyyy hh24:mi:ss TZD') between ?  and ?";

1

Мне удалось решить ту же проблему, установив часовой пояс в своей системе Linux (Centos6.5).

Репост из

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html

  1. установить часовой пояс, /etc/sysconfig/clockнапример, установить ZONE = "America / Los_Angeles"

  2. sudo ln -sf / usr / share / zoneinfo / America / Phoenix / etc / localtime

Чтобы узнать значение часового пояса, попробуйте

ls /usr/share/zoneinfo

и найдите файл, который представляет ваш часовой пояс.

После того, как вы установили их, перезагрузите компьютер и попробуйте снова.


2
Для меня проверка правильности установки / etc / sysconfig / clock и ссылки / etc / localtime была в основном предварительным условием для решения проблемы ORA-01882.
Дэвид Кинер,

1

У меня была такая же проблема при попытке установить соединение OBIEE с Oracle db. Я изменил часовой пояс Windows с (GMT + 01: 00) Западно-Центральная Африка на (GMT + 01: 00) Брюссель, Копенгаген, Мадрид, Париж. Затем я перезагрузил свой компьютер, и он работал нормально. Похоже, Oracle не смог распознать часовой пояс Западной и Центральной Африки.


1

Эта проблема возникает из-за того, что код, который пытается подключиться к базе данных, имеет часовой пояс, которого нет в базе данных. Эту проблему также можно решить, установив часовой пояс, как показано ниже, или любой действительный часовой пояс, доступный в oracle db. действительный часовой пояс, который можно найти, выберите * из версии v $;

System.setProperty ("user.timezone", "Америка / Нью-Йорк"); TimeZone.setDefault (ноль);


0

Столкнувшись с той же проблемой при использовании Eclipse и удаленной базы данных Oracle, изменение часового пояса моей системы в соответствии с часовым поясом сервера базы данных устранило проблему. После изменения часового пояса системы перезапустите машину .

Я надеюсь это может кому-то помочь


0

java.sql.SQLException: ORA-00604: ошибка на рекурсивном уровне SQL 1 ORA-01882: регион часового пояса не найден

Для этого типа ошибки просто измените системное время на стандартный для вашей страны формат GMT.

например, часовой пояс Индии - ченнаи, калькутта.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.