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


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


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.


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 !!


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

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.


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


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.


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"

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.


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.


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.


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.


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".


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 ?";

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.


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.


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


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


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.