ORA-01882: часовой пояс не найден - PullRequest
83 голосов
/ 06 февраля 2012

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

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

Ответы [ 18 ]

59 голосов
/ 07 февраля 2012

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

33 голосов
/ 12 ноября 2013

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

C:\Program Files\sqldeveloper\sqldeveloper\bin

и добавьте

AddVMOption -Duser.timezone=CET

в файл sqldeveloper.conf.

23 голосов
/ 04 августа 2012

Ошибка, которую я получил:

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

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

21 голосов
/ 22 ноября 2013

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

oracle.jdbc.timezoneAsRegion=false
15 голосов
/ 31 марта 2014

В результате клиент JDBC отправляет идентификатор часового пояса на сервер. Сервер должен знать эту зону. Вы можете проверить с помощью

SELECT DISTINCT tzname FROM V$TIMEZONE_NAMES where tzname like 'Etc%';

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

11 голосов
/ 13 ноября 2012
  1. в затмении перейти запустить -> запустить конфигурацию

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

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

    -Duser.timezone=GMT

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

4 голосов
/ 28 октября 2014

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

4 голосов
/ 09 августа 2016

ОШИБКА:

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"
2 голосов
/ 22 марта 2013

В Netbeans,

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

Нажмите «ОК», а затем повторно запустите программу.

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

2 голосов
/ 21 марта 2015

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

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

select TZNAME from V$TIMEZONE_NAMES;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...