Opowiedz nam o swoim środowisku, jak uruchamiasz java?
ABCade
Uruchamiam aplikację Java w wierszu poleceń. Windows 7 64-bitowy, ale Oracle DB działa na zdalnym serwerze Unix.
ndalama
9
spróbuj dodać „-Duser.timezone = <YOUR_GMT>” do swojego polecenia, nie zapomnij zastąpić <YOUR_GMT> swoim GMT, tj. -Duser.timezone = „+ 05:30”
ABCade
Odpowiedzi:
87
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=falseplik oracle / jdbc / defaultConnectionProperties.properties (wewnątrz jar). Znalazłem to rozwiązanie tutaj
Na koniec można dodać -Doracle.jdbc.timezoneAsRegion=falsedo wiersza poleceń lub AddVMOption -Doracle.jdbc.timezoneAsRegion=falsew plikach konfiguracyjnych, które używają tej notacji
Udało mi się również połączyć ojdbc6.jar w wersji 11.2.0.3.0 bez błędów, dodając oracle.jdbc.timezoneAsRegion = false w pliku oracle / jdbc / defaultConnectionProperties.properties (wewnątrz jar). Znalazłem to rozwiązanie tutaj: forums.oracle.com/forums/thread.jspa?threadID=1095807
Matteo Steccolini
33
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.
Matteo Steccolini
Dzięki stmsat. U mnie to zadziałało. Zmieniłem mój jar ojdbc na wersję 11.1.0.7.0 w katalogu tomcat / lib i zaczęło działać :).
mdev
1
Używam mavena do budowania i pakowania (wojny) mojego projektu i wdrażania w Cloud Flare, czy istnieje jakikolwiek sposób ustawienia tej właściwości z pliku application.properties lub z maven.
Ismail
41
W zwykłej instalacji SQL-Developer pod Windows przejdź do katalogu
Używając Jetbrains DataGrip i napotkałem ten sam problem po dodaniu tej opcji maszyny wirtualnej, problem został rozwiązany
latsha
Dzięki, to naprawdę bardzo pomogło!
Quinton
27
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
Nie wiem, dlaczego nie podobała mu się domyślna strefa czasowa „Europa / Madryt”. Ustawienie domyślnej strefy czasowej na „GMT” działa.
fgui
22
Zaktualizuj plik oracle / jdbc / defaultConnectionProperties.properties w dowolnej wersji biblioteki (tj. W pliku jar), którego używasz, aby zawierał poniższą linię:
Dzieje się tak, że klient JDBC wysyła identyfikator strefy czasowej do serwera. Serwer musi znać tę strefę. Możesz to sprawdzić
SELECTDISTINCT 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.
Miałem ten problem podczas uruchamiania testów automatycznych z serwera ciągłej integracji. Próbowałem dodać argument VM -Duser.timezone=GMTdo parametrów kompilacji, ale to nie rozwiązało problemu. Jednak dodanie zmiennej środowiskowej „ TZ=GMT” rozwiązało problem.
Zmienna środowiskowa „TZ = GMT” również działała dla mnie. Miałem problemy ze skryptem powłoki, który konfigurował środowisko do uruchamiania oddzielnego narzędzia, które z kolei uzyskiwało dostęp do Oracle.
David Keener,
1
Mając ten sam problem, również musiałem użyć „TZ = Europe / Zurich” podczas używania „ant”. Zadziałało!
Christof Kälin
2
To powinna być najlepsza odpowiedź. Wszystkie inne odpowiedzi nie zadziałały.
Alex Dembo,
4
BŁĄD:
ORA-00604: wystąpił błąd na rekurencyjnym poziomie 1 SQL ORA-01882: nie znaleziono regionu strefy czasowej
Linux, projekt hibernacji, sterownik ojdbc6 podczas odpytywania bazy danych oracle 11g.
Rozkład
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.
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”.
Dla mnie upewnienie się, że / etc / sysconfig / clock i łącze / etc / localtime zostały ustawione poprawnie, było w zasadzie warunkiem rozwiązania problemu z ORA-01882.
David Keener
1
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 $;
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.
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 tutajNa 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źródło
W zwykłej instalacji SQL-Developer pod Windows przejdź do katalogu
i dodaj
do pliku
sqldeveloper.conf
.źródło
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:
nowy kod:
teraz działa!!
źródło
Zaktualizuj plik oracle / jdbc / defaultConnectionProperties.properties w dowolnej wersji biblioteki (tj. W pliku jar), którego używasz, aby zawierał poniższą linię:
źródło
Dzieje się tak, że klient JDBC wysyła identyfikator strefy czasowej do serwera. Serwer musi znać tę strefę. Możesz to sprawdzić
Mam kilka serwerów db, które wiedzą o „Etc / UTC” i „UTC” (tzfile wersja 18), ale inne znają tylko „UTC” (tz wersja 11).
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.
źródło
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
źródło
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.źródło
BŁĄD:
Rozwiązanie: konfiguracja CIM w Centos.
Dodaj te argumenty java:
źródło
W Netbeans,
Kliknij OK, a następnie ponownie uruchom program.
Uwaga: możesz również ustawić inne kamienie czasowe poza UTC i GMT.
źródło
Napotkałem ten problem z Tomcat. Ustawienie następujących elementów
$CATALINA_BASE/bin/setenv.sh
rozwiązało problem:Jestem pewien, że użycie jednej z propozycji parametrów Java z innych odpowiedzi zadziałałoby w ten sam sposób.
źródło
Ja też miałem podobny problem.
Środowisko:
Linux, projekt hibernacji, sterownik ojdbc6 podczas odpytywania bazy danych oracle 11g.
Rozkład
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.
źródło
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:
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.
źródło
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:
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 ).
Plik znajduje się w lokalizacji „<katalog instalacyjny oracle> \ Middleware \ jdeveloper \ jdev \ bin \ jdev.conf”.
źródło
W moim przypadku mogłem uruchomić zapytanie zmieniając „TZR” na „TZD” ..
źródło
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
i poszukaj pliku reprezentującego Twoją strefę czasową.
Po ustawieniu tych ustawień uruchom ponownie komputer i spróbuj ponownie.
źródło
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.
źródło
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);
źródło
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
źródło
W przypadku tego typu błędu po prostu zmień czas systemowy na standardowy format GMT swojego kraju
np. strefa czasowa Indii to Chennai, Kalkuta.
źródło