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
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
Jawaban:
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
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.
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 !!
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
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.
di eclipse, jalankan -> jalankan konfigurasi
di sana pergi ke tab JRE di panel sisi kanan
di bagian Argumen VM tempelkan ini
-Duser.timezone=GMT
lalu Terapkan -> Jalankan
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.
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"
Di Netbeans,
Klik Ok, lalu jalankan kembali program Anda.
Catatan: Anda juga dapat mengatur ke waktu lain selain UTC & GMT.
Saya juga menghadapi masalah serupa.
Linux, proyek hibernasi, driver ojdbc6 saat menanyakan database oracle 11g.
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.
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.
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".
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 ?";
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
setel zona waktu /etc/sysconfig/clockmisalnya setel ke ZONE = "America / Los_Angeles"
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.
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.
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);
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.