ORA-01882: wilayah zona waktu tidak ditemukan

102

Saya mengakses Database Oracle dari aplikasi java, ketika saya menjalankan aplikasi saya, saya mendapatkan kesalahan berikut:

java.sql.SQLException: ORA-00604: kesalahan terjadi pada SQL rekursif level 1 ORA-01882: wilayah zona waktu tidak ditemukan

ndalama
sumber
Ceritakan tentang lingkungan Anda, bagaimana Anda menjalankan java Anda?
ABCade
Saya menjalankan aplikasi Java pada baris perintah. Windows 7 64bit, tetapi Oracle DB berjalan di server Unix jarak jauh.
ndalama
9
coba tambahkan "-Duser.timezone = <YOUR_GMT>" ke perintah Anda, jangan lupa untuk mengganti <YOUR_GMT> dengan GMT Anda, yaitu -Duser.timezone = "+ 05:30"
ABCade

Jawaban:

87

Anda juga dapat mencoba memeriksa versi driver jdbc Oracle dan database Oracle. Baru hari ini saya mengalami masalah ini saat menggunakan ojdbc6.jar (versi 11.2.0.3.0) untuk terhubung ke server Oracle 9.2.0.4.0. Menggantinya dengan ojdbc6.jar versi 11.1.0.7.0 menyelesaikan masalah.

Saya juga berhasil membuat ojdbc6.jar versi 11.2.0.3.0 terhubung tanpa kesalahan, dengan menambahkan oracle.jdbc.timezoneAsRegion=falsefile oracle / jdbc / defaultConnectionProperties.properties (di dalam toples). Temukan solusi ini di sini

Terakhir, seseorang dapat menambahkan -Doracle.jdbc.timezoneAsRegion=falseke baris perintah, atau AddVMOption -Doracle.jdbc.timezoneAsRegion=falsedi file konfigurasi yang menggunakan notasi ini

Matteo Steccolini
sumber
24
Saya juga berhasil membuat ojdbc6.jar versi 11.2.0.3.0 terhubung tanpa kesalahan, dengan menambahkan oracle.jdbc.timezoneAsRegion = false di file oracle / jdbc / defaultConnectionProperties.properties (di dalam toples). Menemukan solusi ini di sini: forums.oracle.com/forums/thread.jspa?threadID=1095807
Matteo Steccolini
33
Terakhir, seseorang dapat menambahkan -Doracle.jdbc.timezoneAsRegion = false ke baris perintah, atau AddVMOption -Doracle.jdbc.timezoneAsRegion = false di file konfigurasi yang menggunakan notasi ini.
Matteo Steccolini
Terima kasih stmsat. Itu berhasil untuk saya. Saya mengubah jar ojdbc saya menjadi versi 11.1.0.7.0 di direktori tomcat / lib dan itu mulai bekerja :).
mdev
1
Saya menggunakan maven untuk membangun dan memaketkan (perang) proyek saya dan menerapkan di Cloud Flare, adakah cara untuk menyetel properti ini dapat dilakukan dari file application.properties atau dari maven.
Ismail
41

Secara sederhana, instalasi SQL-Developer di bawah Windows masuk ke direktori

C:\Program Files\sqldeveloper\sqldeveloper\bin

dan tambahkan

AddVMOption -Duser.timezone=CET

untuk mengajukan sqldeveloper.conf.

Marcus Rickert
sumber
Menggunakan Jetbrains DataGrip dan menghadapi masalah yang sama setelah menambahkan Opsi VM ini, masalah telah terpecahkan
latsha
Terima kasih, ini sangat membantu!
Quinton
27

Kesalahan yang saya dapatkan:

Kesalahan dari db_connection.java - >> java.sql.SQLException: ORA-00604: kesalahan terjadi pada SQL rekursif level 1 ORA-01882: wilayah zona waktu tidak ditemukan

ORA-00604: kesalahan terjadi pada tingkat SQL rekursif 1ORA-01882: wilayah zona waktu tidak ditemukan

Kode sebelumnya:

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

Kode baru:

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

sekarang bekerja !!

Waruna Sri Jayanth
sumber
Terima kasih, itulah yang saya butuhkan!
Alan Thompson
Saya tidak tahu mengapa tidak menyukai zona waktu default 'Eropa / Madrid'. Menyetel zona waktu default ke 'GMT' berfungsi.
fgui
22

Perbarui file oracle / jdbc / defaultConnectionProperties.properties dalam versi library apa pun (yaitu di dalam jar Anda) yang Anda gunakan untuk memuat baris di bawah ini:

oracle.jdbc.timezoneAsRegion=false
Babatunde Adeyemi
sumber
19

Apa yang terjadi adalah, klien JDBC mengirimkan ID zona waktu ke Server. Server perlu mengetahui zona itu. Anda bisa mengeceknya dengan

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

Saya memiliki beberapa server db yang tahu tentang 'Etc / UTC' dan 'UTC' (tzfile versi 18) tetapi yang lain hanya tahu 'UTC' (tz versi 11).

SELECT FILENAME,VERSION from V$TIMEZONE_FILE;

Ada juga perilaku yang berbeda di sisi klien JDBC. Dimulai dengan 11.2 driver akan mengirimkan ID zona jika "diketahui" ke Oracle, sedangkan sebelumnya mengirimkan offset waktu. Masalah dengan "pengiriman ID yang diketahui" ini adalah, bahwa klien tidak memeriksa versi / konten zona waktu yang ada di server tetapi memiliki daftarnya sendiri.

Ini dijelaskan dalam Artikel Dukungan Oracle [ID 1068063.1].

Sepertinya itu juga tergantung pada OS Klien, lebih mungkin Etc / UTC gagal dengan Ubuntu daripada RHEL atau Windows. Saya kira ini karena beberapa normalisasi tetapi saya belum tahu persis apa.

eckes
sumber
14
  1. di eclipse, jalankan -> jalankan konfigurasi

  2. di sana pergi ke tab JRE di panel sisi kanan

  3. di bagian Argumen VM tempelkan ini

    -Duser.timezone=GMT

  4. lalu Terapkan -> Jalankan

Priyan di Dialog
sumber
8

Saya mengalami masalah ini saat menjalankan tes otomatis dari server integrasi berkelanjutan. Saya mencoba menambahkan argumen VM " -Duser.timezone=GMT" ke parameter build, tetapi itu tidak menyelesaikan masalah. Namun, menambahkan variabel lingkungan " TZ=GMT" telah memperbaiki masalah saya.

Matt
sumber
2
Variabel lingkungan "TZ = GMT" juga berfungsi untuk saya. Saya mengalami masalah dengan skrip shell yang mengatur lingkungan untuk menjalankan alat terpisah yang, pada gilirannya, mengakses Oracle.
David Keener
1
Memiliki masalah yang sama, saya juga harus menggunakan "TZ = Europe / Zurich" saat menggunakan "ant". Berhasil!
Christof Kälin
2
Ini harus menjadi jawaban teratas. Semua jawaban lainnya tidak berhasil.
Alex Dembo
4

KESALAHAN:

ORA-00604: kesalahan terjadi pada SQL rekursif level 1 ORA-01882: wilayah zona waktu tidak ditemukan

Solusi: Pengaturan CIM di Centos.

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

Tambahkan argumen java ini:

JAVA_ARGS="${JAVA_ARGS} -Duser.timezone=EDT"
Guna Sekaran
sumber
3

Di Netbeans,

  1. Klik kanan proyek Anda -> Properties
  2. Pergi ke Jalankan (di bawah Kategori)
  3. Masukkan -Duser.timezone = UTC atau -Duser.timezone = GMT di bawah Opsi VM.

Klik Ok, lalu jalankan kembali program Anda.

Catatan: Anda juga dapat mengatur ke waktu lain selain UTC & GMT.

Babatunde Adeyemi
sumber
2

Saya mengalami masalah ini dengan Tomcat. Pengaturan berikut dalam $CATALINA_BASE/bin/setenv.shmemecahkan masalah:

JAVA_OPTS=-Doracle.jdbc.timezoneAsRegion=false

Saya yakin bahwa menggunakan salah satu saran parameter Java dari jawaban lain akan bekerja dengan cara yang sama.

bonh
sumber
2

Saya juga menghadapi masalah serupa.

Lingkungan Hidup:

Linux, proyek hibernasi, driver ojdbc6 saat menanyakan database oracle 11g.

Resolusi

Parameter TZ tidak diatur di mesin linux, yang pada dasarnya memberitahu oracle tentang zona waktu. Jadi, Setelah menambahkan pernyataan ekspor "ekspor TZ = UTC" pada saat aplikasi mulai memecahkan masalah saya.

UTC -> Ubah sesuai dengan zona waktu Anda.

pengguna3721248
sumber
2

Jika masalah ini ada di JDeveloper: Ubah properti proyek untuk model dan proyek tampilan -> run / debug -> profil default -> edit tambahkan opsi jalankan berikut: -Duser.timezone = Asia / Calcutta

Pastikan nilai zona waktu di atas diambil dari database Anda sebagai berikut:

select TZNAME from V$TIMEZONE_NAMES;

Bersamaan dengan itu Anda ingin memeriksa pengaturan zona waktu di jdev.conf Anda serta di JDeveloper -> Menu Aplikasi -> Properti Proyek Default -> Jalankan / Debug -> Profil Default -> Jalankan Opsi.

Mukul Rana
sumber
1

Saya juga mengalami masalah yang sama ketika saya mencoba membuat koneksi di JDeveloper. Server kami terletak di zona waktu yang berbeda dan karenanya memunculkan kesalahan di bawah ini sebagai:

ORA-00604: error occurred at recursive SQL level 1 

ORA-01882: timezone region not found

Saya merujuk banyak forum yang meminta untuk memasukkan zona waktu dalam Opsi Java (Jalankan / Debug / Profil) dari properti Proyek dan properti Proyek Default sebagai -Duser.timezone="+02:00"bTapi itu tidak berhasil untuk saya. Akhirnya solusi berikut berhasil untuk saya.

Tambahkan baris berikut ke file konfigurasi JDeveloper ( jdev.conf ).

AddVMOption -Duser.timezone=UTC+02:00

File tersebut terletak di "<oracle installation root> \ Middleware \ jdeveloper \ jdev \ bin \ jdev.conf".

Raj
sumber
1

Dalam kasus saya, saya bisa mendapatkan kueri yang berfungsi dengan mengubah "TZR" dengan "TZD" ..

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

Saya dapat menyelesaikan masalah yang sama dengan mengatur zona waktu di sistem linux saya (Centos6.5).

Memposting ulang dari

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

  1. setel zona waktu /etc/sysconfig/clockmisalnya setel ke ZONE = "America / Los_Angeles"

  2. sudo ln -sf / usr / share / zoneinfo / America / Phoenix / etc / localtime

Untuk mengetahui nilai zona waktu cobalah

ls /usr/share/zoneinfo

dan cari file yang mewakili zona waktu Anda.

Setelah Anda mengatur ini reboot mesin dan coba lagi.

adi-pradhan
sumber
2
Bagi saya, memastikan bahwa / etc / sysconfig / clock dan link / etc / localtime telah diatur dengan benar pada dasarnya adalah prasyarat untuk menyelesaikan masalah ORA-01882.
David Keener
1

Saya mengalami masalah yang sama ketika mencoba membuat koneksi di OBIEE ke Oracle db. Saya mengubah zona waktu Windows saya dari (GMT + 01: 00) Afrika Tengah Barat menjadi (GMT + 01: 00) Brussel, Kopenhagen, Madrid, Paris. Kemudian saya me-reboot komputer saya dan bekerja dengan baik. Sepertinya Oracle tidak bisa mengenali zona waktu barat tengah Afrika.

yushaa yave
sumber
1

Masalah ini terjadi karena kode yang mencoba menyambung ke db, memiliki zona waktu yang tidak dalam db. Ini juga dapat diselesaikan dengan mengatur zona waktu seperti di bawah ini atau zona waktu valid yang tersedia di oracle db. zona waktu yang valid yang dapat ditemukan pilih * dari v $ versi;

System.setProperty ("user.timezone", "America / New_York"); TimeZone.setDefault (null);

Uday Singh
sumber
0

Menghadapi masalah yang sama menggunakan Eclipse dan Database Oracle yang jauh, mengubah zona waktu sistem saya agar sesuai dengan zona waktu server database memperbaiki masalah. Nyalakan ulang mesin setelah mengubah zona waktu sistem.

Saya harap ini dapat membantu seseorang

S_intg
sumber
0

java.sql.SQLException: ORA-00604: kesalahan terjadi pada SQL rekursif level 1 ORA-01882: wilayah zona waktu tidak ditemukan

Untuk jenis kesalahan ini, cukup ubah waktu sistem Anda ke format GMT standar negara Anda

misalnya zona waktu India adalah chennai, kolkata.

manjunatha H
sumber