2012-02-06 2 views
72

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

java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1 ORA-01882: timezone region not found

+0

Расскажите о своей среде, как вы управляете своей Java? –

+0

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

+7

попробуйте добавить «-Duser.timezone = » в вашу команду, не забудьте заменить на ваш GMT, т.е. -Duser.timezone = «+ 05:30» –

ответ

48

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

+19

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

+24

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

+0

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

20

Ошибки я получил:

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

произошла ошибка при рекурсивной уровне SQL 1ORA-01882::

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

Prev код:

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; 
} 

новый C ode:

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» работает. – fgui

8
  1. в затмении идти запустить ->конфигурации запуска

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

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

    -Duser.timezone=GMT

  4. затем Применить -> Run

2

В Netbeans,

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

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

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

28

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

C:\Program Files\sqldeveloper\sqldeveloper\bin 

и добавить

AddVMOption -Duser.timezone=CET 

в файл sqldeveloper.conf.

+0

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

+0

работал как шарм! благодаря! :) – Antariksh

15

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

oracle.jdbc.timezoneAsRegion=false 
15

Что происходит в том, что Клиент 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].

Похоже, что это также зависит от операционной системы клиента, скорее всего, с Ubuntu с ошибкой Etc/UTC, чем с RHEL или Windows. Я предполагаю, что это связано с некоторой нормализацией, но я не понял, что именно.

0

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

ORA-00604: error occurred at recursive SQL level 1 

ORA-01882: timezone region not found 

я говорил много форумов, которые просили включить часовой пояс в опции Java (Run/Debug/профиль) свойств проекта и свойств по умолчанию проекта как -Duser.timezone="+02:00" bBut это не сработало для меня. Наконец, для меня работало следующее решение.

Добавьте следующую конфигурацию в конфигурационный файл JDeveloper (jdev.conf).

AddVMOption -Duser.timezone=UTC+02:00 

Файл находится в "< корневого каталога установки оракул > \ Middleware \ JDeveloper \ jdev \ Bin \ jdev.conf".

3

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

+1

Среда переменная окружения «TZ = GMT» также работала для меня. У меня возникли проблемы со сценарием оболочки, который настраивал среду для запуска отдельного инструмента, который, в свою очередь, обращался к Oracle. –

2

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

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

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

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

1

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

перепроведении от

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

(1) установить часовой пояс в/и т.д./sysconfig/часы, например, установлен в положение ZONE = "Америка/Los_Angeles"

(2) Судо пер -sf/USR/доли/ZoneInfo/Америка/Phoenix/и т.д./LocalTime

Чтобы выяснить значение часового пояса пытаются

ls/usr/share/zoneinfo

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

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

+0

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

1

В моем случае я мог бы получить запрос работает путем изменения «ТЗР» с «TZD» ..

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

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

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

3

ОШИБКИ: ORA-00604: произошла ошибка при рекурсивной уровне SQL 1 ORA-01882: часовой пояс региона не найден

Решения: установки CIM в Centos.

/opt/oracle/product/ATG/ATG11.2/home/bin/dynamoEnv.sh

Добавьте это ява аргументы:

JAVA_ARGS = "$ {} JAVA_ARGS -Duser.timezone = EDT "

1

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

JAVA_OPTS=-Doracle.jdbc.timezoneAsRegion=false 

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

0

java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1 ORA-01882: timezone region not found

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

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

Смежные вопросы