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

68

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

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

  • 0
    Расскажите нам о вашей среде, как вы работаете с Java?
  • 0
    Я запускаю приложение Java в командной строке. Windows 7 64bit, но Oracle DB работает на удаленном Unix-сервере.
Показать ещё 1 комментарий
Теги:
timezone
jdbc

16 ответов

45
Лучший ответ

Вы также можете проверить версию драйвера Oracle jdbc и базы данных Oracle. Только сегодня у меня возникла эта проблема при использовании ojdbc6.jar(версия 11.2.0.3.0) для подключения к серверу Oracle 9.2.0.4.0. Замена его на версию ojdbc6.jar версии 11.1.0.7.0 решила проблему.

  • 22
    Мне также удалось подключить ojdbc6.jar версии 11.2.0.3.0 без ошибок, добавив oracle.jdbc.timezoneAsRegion = false в файл oracle / jdbc / defaultConnectionProperties.properties (внутри jar). Нашел это решение здесь: forums.oracle.com/forums/thread.jspa?threadID=1095807
  • 30
    Наконец, можно добавить -Doracle.jdbc.timezoneAsRegion = false в командную строку или AddVMOption -Doracle.jdbc.timezoneAsRegion = false в файлах конфигурации, которые используют эту запись.
Показать ещё 1 комментарий
27

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

C:\Program Files\sqldeveloper\sqldeveloper\bin

и добавьте

AddVMOption -Duser.timezone=CET

в файл sqldeveloper.conf.

  • 0
    Используя Jetbrains DataGrip и столкнулся с той же проблемой после добавления этой опции VM проблема была решена
  • 0
    работал как шарм! Спасибо! :)
Показать ещё 1 комментарий
18

Ошибка:

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

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

  • 0
    Спасибо, это именно то, что мне было нужно!
  • 0
    Я не знаю, почему ему не понравился часовой пояс по умолчанию «Европа / Мадрид». Установка часового пояса по умолчанию «GMT» работает.
Показать ещё 1 комментарий
15

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

15

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

oracle.jdbc.timezoneAsRegion=false
7
  • в eclipse go запустить выполнить конфигурацию

  • перейдите на вкладку JRE в правой панели

  • в разделе Аргументы VM вставьте это

    -Duser.timezone=GMT

  • затем Apply → Run

2

ОШИБКА: 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"

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/Америка/Phoenix/etc/localtime

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

ls/usr/share/zoneinfo

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

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

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

Если эта проблема находится в JDeveloper: Измените свойства проекта как для модели, так и для проекта вида → run/debug → default profile → edit добавьте следующую опцию запуска: -Duser.timezone = Asia/Calcutta​​p >

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

выберите TZNAME из V $TIMEZONE_NAMES;

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

1

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

  • 1
    Переменная окружения "TZ = GMT" также работала для меня. У меня были проблемы со сценарием оболочки, который настраивал среду для запуска отдельного инструмента, который, в свою очередь, обращался к Oracle.
  • 0
    Имея ту же проблему, я тоже должен был использовать «TZ = Europe / Zurich» при использовании «муравей». Это сработало!
1

В Netbeans

  • Щелкните правой кнопкой мыши свой проект → Свойства
  • Перейдите в раздел "Выполнить" (в разделе "Категории" )
  • Введите -Duser.timezone = UTC или -Duser.timezone = GMT в разделе "Параметры VM".

Нажмите "ОК", а затем запустите программу.

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

0

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

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

например. Индийский часовой пояс - chennai, kolkata.

0

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

JAVA_OPTS=-Doracle.jdbc.timezoneAsRegion=false

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

0

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

Надеюсь, это поможет кому-то.

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню