Я отримую доступ до бази даних 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. Я думаю, це пов'язано з деякою нормалізацією, але я не зрозумів, що саме.
у затемненні go run -> конфігурація запуску
там перейдіть на вкладку JRE у правій бічній панелі
у розділі « Аргументи В.М.» вставити це
-Duser.timezone=GMT
потім застосувати -> Виконати
У мене була ця проблема під час запуску автоматизованих тестів із сервера безперервної інтеграції. Я спробував додати аргумент VM -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, що в основному повідомляє oracle про часовий пояс. Тож, додавши експортну статтю, "експорт TZ = UTC" на момент запуску програми вирішив мою проблему.
UTC -> Зміна відповідно до свого часового поясу.
Якщо ця проблема в JDeveloper: Змініть властивості проекту як для моделі, так і для перегляду проекту -> run / debug -> профіль за замовчуванням -> редагування додайте наступний варіант запуску: -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 (Запуск / налагодження / профіль) властивостей проекту та властивостей проекту за замовчуванням як -Duser.timezone="+02:00"
bBut, але це не працювало для мене. Нарешті наступне рішення спрацювало для мене.
Додайте наступний рядок до файлу конфігурації 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 / тощо / localtime
Щоб визначити значення часового поясу, спробуйте
ls /usr/share/zoneinfo
і шукайте файл, який представляє ваш часовий пояс.
Як тільки ви встановите ці перезавантаження машини, спробуйте ще раз.
У мене була така ж проблема, коли я намагався встановити з'єднання OBIEE з Oracle db. Я змінив часовий пояс Windows з (GMT + 01: 00) Західно-Центральної Африки на (GMT + 01: 00) Брюссель, Копенгаген, Мадрид, Париж. Потім я перезавантажив комп’ютер, і він працював просто чудово. Схоже, Oracle не зміг розпізнати часовий пояс центральної Африки на заході.
Ця проблема трапляється, оскільки код, який намагається підключитися до db, має часовий пояс, який не знаходиться в db. Його також можна вирішити, встановивши часовий пояс як нижче, або будь-який дійсний часовий пояс, доступний в Oracle db. допустимий часовий пояс, який можна знайти, виберіть * з версії v $;
System.setProperty ("user.timezone", "America / New_York"); TimeZone.setDefault (null);
Зіткнувшись з тією ж проблемою за допомогою Eclipse та віддаленої бази даних Oracle, зміна мого часового поясу системи на відповідність часовому поясу сервера бази даних виправила проблему. Перезапустіть машину після зміни часового поясу системи.
Я сподіваюся, що це може комусь допомогти
java.sql.SQLException: ORA-00604: сталася помилка на рекурсивному рівні SQL 1 ORA-01882: область часового поясу не знайдена
Для цього типу помилок просто змініть свій системний час на стандартний формат GMT для вашої країни
наприклад, індійський часовий пояс - це Ченнаї, Колката.