Uzyskuję dostęp do bazy danych Oracle z aplikacji Java, po uruchomieniu aplikacji pojawia się następujący błąd:
java.sql.SQLException: ORA-00604: wystąpił błąd na rekurencyjnym poziomie 1 SQL ORA-01882: nie znaleziono regionu strefy czasowej
Uzyskuję dostęp do bazy danych Oracle z aplikacji Java, po uruchomieniu aplikacji pojawia się następujący błąd:
java.sql.SQLException: ORA-00604: wystąpił błąd na rekurencyjnym poziomie 1 SQL ORA-01882: nie znaleziono regionu strefy czasowej
Odpowiedzi:
Możesz także spróbować sprawdzić wersję sterownika Oracle jdbc i bazy danych Oracle. Właśnie dzisiaj miałem ten problem podczas używania ojdbc6.jar (wersja 11.2.0.3.0) do łączenia się z serwerem Oracle 9.2.0.4.0. Zastąpienie go wersją ojdbc6.jar 11.1.0.7.0 rozwiązało problem.
Udało mi się również bezbłędnie połączyć ojdbc6.jar w wersji 11.2.0.3.0, dodając oracle.jdbc.timezoneAsRegion=false
plik oracle / jdbc / defaultConnectionProperties.properties (wewnątrz jar). Znalazłem to rozwiązanie tutaj
Na koniec można dodać -Doracle.jdbc.timezoneAsRegion=false
do wiersza poleceń lub AddVMOption -Doracle.jdbc.timezoneAsRegion=false
w plikach konfiguracyjnych, które używają tej notacji
W zwykłej instalacji SQL-Developer pod Windows przejdź do katalogu
C:\Program Files\sqldeveloper\sqldeveloper\bin
i dodaj
AddVMOption -Duser.timezone=CET
do pliku sqldeveloper.conf
.
Otrzymałem błąd:
Błąd z db_connection.java - >> java.sql.SQLException: ORA-00604: wystąpił błąd na rekurencyjnym poziomie 1 SQL ORA-01882: nie znaleziono regionu strefy czasowej
ORA-00604: wystąpił błąd na rekurencyjnym poziomie SQL 1ORA-01882: nie znaleziono regionu strefy czasowej
Poprzedni kod:
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;
}
nowy kod:
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;
}
teraz działa!!
Zaktualizuj plik oracle / jdbc / defaultConnectionProperties.properties w dowolnej wersji biblioteki (tj. W pliku jar), którego używasz, aby zawierał poniższą linię:
oracle.jdbc.timezoneAsRegion=false
Dzieje się tak, że klient JDBC wysyła identyfikator strefy czasowej do serwera. Serwer musi znać tę strefę. Możesz to sprawdzić
SELECT DISTINCT tzname FROM V$TIMEZONE_NAMES where tzname like 'Etc%';
Mam kilka serwerów db, które wiedzą o „Etc / UTC” i „UTC” (tzfile wersja 18), ale inne znają tylko „UTC” (tz wersja 11).
SELECT FILENAME,VERSION from V$TIMEZONE_FILE;
Inne zachowanie występuje także po stronie klienta JDBC. Począwszy od wersji 11.2 kierowca wysyła identyfikatory stref, jeśli jest „znany” Oracle, podczas gdy przed wysłaniem przesunięcia czasu. Problem z tym „wysyłaniem znanych identyfikatorów” polega na tym, że klient nie sprawdza, jaka wersja / zawartość strefy czasowej jest obecna na serwerze, ale ma własną listę.
Wyjaśniono to w artykule pomocy technicznej Oracle [ID 1068063.1].
Wygląda na to, że zależy to również od systemu operacyjnego klienta, było bardziej prawdopodobne, że Etc / UTC zawodzi z Ubuntu niż RHEL lub Windows. Myślę, że jest to spowodowane pewną normalizacją, ale nie wiem, co dokładnie.
w eclipse go run -> uruchom konfigurację
tam przejdź do zakładki JRE w prawych panelach bocznych
w sekcji VM Arguments wklej to
-Duser.timezone=GMT
następnie Zastosuj -> Uruchom
Miałem ten problem podczas uruchamiania testów automatycznych z serwera ciągłej integracji. Próbowałem dodać argument VM -Duser.timezone=GMT
do parametrów kompilacji, ale to nie rozwiązało problemu. Jednak dodanie zmiennej środowiskowej „ TZ=GMT
” rozwiązało problem.
BŁĄD:
ORA-00604: wystąpił błąd na rekurencyjnym poziomie 1 SQL ORA-01882: nie znaleziono regionu strefy czasowej
Rozwiązanie: konfiguracja CIM w Centos.
/opt/oracle/product/ATG/ATG11.2/home/bin/dynamoEnv.sh
Dodaj te argumenty java:
JAVA_ARGS="${JAVA_ARGS} -Duser.timezone=EDT"
W Netbeans,
Kliknij OK, a następnie ponownie uruchom program.
Uwaga: możesz również ustawić inne kamienie czasowe poza UTC i GMT.
Ja też miałem podobny problem.
Linux, projekt hibernacji, sterownik ojdbc6 podczas odpytywania bazy danych oracle 11g.
Parametr TZ nie został ustawiony na komputerze z systemem Linux, co w zasadzie mówi Oracle o strefie czasowej. Tak więc, po dodaniu informacji o eksporcie „export TZ = UTC” w momencie składania wniosku rozpoczęło się rozwiązanie mojego problemu.
UTC -> Zmień według strefy czasowej.
Jeśli ten problem występuje w JDeveloper: Zmień właściwości projektu zarówno dla modelu, jak i widoku projektu -> uruchom / debuguj -> domyślny profil -> edytuj dodaj następującą opcję uruchamiania: -Duser.timezone = Asia / Calcutta
Upewnij się, że powyższa wartość strefy czasowej została pobrana z bazy danych w następujący sposób:
select TZNAME from V$TIMEZONE_NAMES;
Oprócz tego chciałbyś sprawdzić ustawienia strefy czasowej w swoim jdev.conf, a także w JDeveloper -> Menu aplikacji -> Domyślne właściwości projektu -> Uruchom / Debuguj -> Profil domyślny -> Opcje uruchamiania.
Ja też miałem ten sam problem, kiedy próbowałem stworzyć połączenie w JDeveloper. Nasz serwer znajdował się w innej strefie czasowej i dlatego podniósł poniższe błędy:
ORA-00604: error occurred at recursive SQL level 1
ORA-01882: timezone region not found
Odniosłem się do wielu forów, które prosiły o uwzględnienie strefy czasowej w Opcjach Java (Uruchom / Debugowanie / Profil) we właściwościach projektu i Właściwościach domyślnego projektu jako -Duser.timezone="+02:00"
b, ale to nie zadziałało. W końcu zadziałało następujące rozwiązanie.
Dodaj następujący wiersz do pliku konfiguracyjnego JDevelopera ( jdev.conf ).
AddVMOption -Duser.timezone=UTC+02:00
Plik znajduje się w lokalizacji „<katalog instalacyjny oracle> \ Middleware \ jdeveloper \ jdev \ bin \ jdev.conf”.
W moim przypadku mogłem uruchomić zapytanie zmieniając „TZR” na „TZD” ..
String query = "select * from table1 to_timestamp_tz(origintime,'dd-mm-yyyy hh24:mi:ss TZD') between ? and ?";
Udało mi się rozwiązać ten sam problem, ustawiając strefę czasową w moim systemie linux (Centos6.5).
Ponowne publikowanie z
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html
ustaw strefę czasową w /etc/sysconfig/clock
np. ustaw na ZONE = "America / Los_Angeles"
sudo ln -sf / usr / share / zoneinfo / America / Phoenix / etc / localtime
Spróbuj obliczyć wartość strefy czasowej
ls /usr/share/zoneinfo
i poszukaj pliku reprezentującego Twoją strefę czasową.
Po ustawieniu tych ustawień uruchom ponownie komputer i spróbuj ponownie.
Miałem ten sam problem, gdy próbowałem nawiązać połączenie na OBIEE z bazą danych Oracle. Zmieniłem strefę czasową systemu Windows z (GMT + 01: 00) Afryka Środkowo-Zachodnia na (GMT + 01: 00) Bruksela, Kopenhaga, Madryt, Paryż. Następnie zrestartowałem komputer i wszystko działało dobrze. Wygląda na to, że Oracle nie był w stanie rozpoznać strefy czasowej w zachodniej Afryce.
Ten problem występuje, ponieważ kod, który próbuje połączyć się z bazą danych, ma strefę czasową, której nie ma w bazie danych. Można to również rozwiązać, ustawiając strefę czasową jak poniżej lub dowolną poprawną strefę czasową dostępną w oracle db. poprawna strefa czasowa, którą można znaleźć wybierz * z wersji v $;
System.setProperty ("user.timezone", "America / New_York"); TimeZone.setDefault (null);
W obliczu tego samego problemu podczas korzystania z Eclipse i odległej bazy danych Oracle, zmiana strefy czasowej systemu w celu dopasowania do strefy czasowej serwera bazy danych rozwiązała problem. Uruchom ponownie maszynę po zmianie strefy czasowej systemu.
Mam nadzieję, że to komuś pomoże
java.sql.SQLException: ORA-00604: wystąpił błąd na rekurencyjnym poziomie 1 SQL ORA-01882: nie znaleziono regionu strefy czasowej
W przypadku tego typu błędu po prostu zmień czas systemowy na standardowy format GMT swojego kraju
np. strefa czasowa Indii to Chennai, Kalkuta.