ORA-01882: saat dilimi bölgesi bulunamadı


103

Java uygulamasından bir Oracle Veritabanına erişiyorum, uygulamamı çalıştırdığımda şu hatayı alıyorum:

java.sql.SQLException: ORA-00604: özyinelemeli SQL düzey 1'de hata oluştu ORA-01882: saat dilimi bölgesi bulunamadı


Bize çevrenizden bahsedin, javanızı nasıl çalıştırıyorsunuz?
ABCade

Java uygulamasını komut satırında çalıştırıyorum. Windows 7 64bit, ancak Oracle DB uzak bir Unix sunucusunda çalışıyor.
ndalama

9
komutunuza "-Duser.timezone = <YOUR_GMT>" eklemeyi deneyin, <YOUR_GMT> 'yi GMT'nizle değiştirmeyi unutmayın, yani -Duser.timezone = "+ 05:30"
ABCade

Yanıtlar:


87

Oracle jdbc sürücüsünün ve Oracle veritabanının sürümünü de kontrol etmeyi deneyebilirsiniz. Daha bugün, Oracle 9.2.0.4.0 sunucusuna bağlanmak için ojdbc6.jar'ı (sürüm 11.2.0.3.0) kullanırken bu sorunu yaşadım. Bunu ojdbc6.jar sürüm 11.1.0.7.0 ile değiştirmek sorunu çözdü.

Ayrıca ojdbc6.jar sürüm 11.2.0.3.0 oracle.jdbc.timezoneAsRegion=falseoracle / jdbc / defaultConnectionProperties.properties dosyasına (kavanozun içine) ekleyerek hatasız bağlanmayı başardım . Bu çözümü burada buldum

Son olarak, bu gösterimi kullanan yapılandırma dosyalarında -Doracle.jdbc.timezoneAsRegion=falsekomut satırına veya AddVMOption'a eklenebilir -Doracle.jdbc.timezoneAsRegion=false.


24
Ayrıca oracle / jdbc / defaultConnectionProperties.properties dosyasında (kavanozun içinde) oracle.jdbc.timezoneAsRegion = false ekleyerek ojdbc6.jar sürüm 11.2.0.3.0'ı hatasız bir şekilde bağlamayı başardım. Burada bu çözümü Bulunan: forums.oracle.com/forums/thread.jspa?threadID=1095807
Matteo Steccolini

33
Son olarak, komut satırına -Doracle.jdbc.timezoneAsRegion = false veya bu gösterimi kullanan yapılandırma dosyalarında AddVMOption -Doracle.jdbc.timezoneAsRegion = false eklenebilir.
Matteo Steccolini

Teşekkürler stmsat. Benim için çalıştı. Ojdbc jar'ımı tomcat / lib dizininde 11.1.0.7.0 sürümüne değiştirdim ve çalışmaya başladı :).
mdev

1
Projemi oluşturmak ve paketlemek (savaşmak) ve Cloud Flare'da dağıtmak için maven kullanıyorum, bu özelliği ayarlamanın application.properties dosyasından veya maven'den yapılabileceği herhangi bir yol var mı ?
İsmail

41

Düz bir Windows altında SQL-Developer kurulumunda dizine gidin

C:\Program Files\sqldeveloper\sqldeveloper\bin

ve Ekle

AddVMOption -Duser.timezone=CET

dosyaya sqldeveloper.conf.


Jetbrains DataGrip'i kullanarak ve bu VM Seçeneğini ekledikten sonra aynı sorunla karşılaştı, sorun çözüldü
latsha

Teşekkürler, bu gerçekten çok yardımcı oldu!
Quinton

27

Aldığım hata:

Db_connection.java - >> java.sql.SQLException kaynaklı hata: ORA-00604: özyinelemeli SQL seviye 1'de hata oluştu ORA-01882: saat dilimi bölgesi bulunamadı

ORA-00604: yinelemeli SQL seviyesi 1ORA-01882'de hata oluştu: saat dilimi bölgesi bulunamadı

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

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

şimdi çalışıyor !!


Teşekkür ederim, tam da ihtiyacım olan şey buydu!
Alan Thompson

Varsayılan 'Avrupa / Madrid' saat dilimini neden beğenmediğini bilmiyorum. Varsayılan saat diliminin "GMT" olarak ayarlanması işe yarar.
fgui

22

Aşağıdaki satırı içerecek şekilde kullandığınız kitaplığın hangi sürümünde (yani kavanozunuzun içinde) oracle / jdbc / defaultConnectionProperties.properties dosyasını güncelleyin :

oracle.jdbc.timezoneAsRegion=false

19

Olan şey, JDBC istemcisinin saat dilimi kimliğini Sunucuya göndermesidir. Sunucunun bu bölgeyi bilmesi gerekir. İle kontrol edebilirsiniz

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

'Etc / UTC' ve 'UTC' (tzfile sürüm 18) hakkında bilgi sahibi olan bazı db sunucularım var, ancak diğerleri yalnızca 'UTC'yi biliyor (tz sürüm 11).

SELECT FILENAME,VERSION from V$TIMEZONE_FILE;

JDBC istemci tarafında da farklı davranışlar vardır. 11.2'den başlayarak, sürücü bölge kimliklerini Oracle'a "biliniyorsa", zaman farkını göndermeden önce gönderir. Bu "bilinen kimliklerin gönderilmesi" ile ilgili sorun, istemcinin sunucuda hangi saat dilimi sürümünün / içeriğinin bulunduğunu kontrol etmemesi, ancak kendi listesine sahip olmasıdır.

Bu, Oracle Destek Makalesinde [ID 1068063.1] açıklanmaktadır.

Görünüşe göre İstemci İşletim Sistemine de bağlı, Etc / UTC'nin Ubuntu ile RHEL veya Windows'a göre başarısız olma olasılığı daha yüksekti. Sanırım bu biraz normalleşmeden kaynaklanıyor ama tam olarak ne olduğunu bulamadım.


14
  1. tutulmada go run -> yapılandırmayı çalıştır

  2. orada sağ taraftaki panellerdeki JRE sekmesine gidin

  3. içinde VM Argümanlar bölümünde bu yapıştırın

    -Duser.timezone=GMT

  4. sonra Uygula -> Çalıştır


8

Sürekli entegrasyon sunucusundan otomatik testler çalıştırırken bu sorunu yaşadım. -Duser.timezone=GMTDerleme parametrelerine " " VM bağımsız değişkenini eklemeyi denedim , ancak bu sorunu çözmedi. Ancak, " TZ=GMT" ortam değişkenini eklemek benim için sorunu çözdü.


2
"TZ = GMT" ortam değişkeni de benim için çalıştı. Oracle'a erişen ayrı bir aracı çalıştırmak için ortamı ayarlayan bir kabuk betiğiyle sorunlar yaşıyordum.
David Keener

1
Aynı sorunu yaşıyorum, ben de "karınca" kullanırken "TZ = Europe / Zurich" kullanmak zorunda kaldım. İşe yaradı!
Christof Kälin

2
Bu en iyi cevap olmalı. Diğer tüm cevaplar işe yaramadı.
Alex Dembo

4

HATA :

ORA-00604: yinelemeli SQL seviye 1'de hata oluştu ORA-01882: saat dilimi bölgesi bulunamadı

Çözüm: Centos'ta CIM kurulumu.

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

Bu java bağımsız değişkenlerini ekleyin:

JAVA_ARGS="${JAVA_ARGS} -Duser.timezone=EDT"

3

Netbeans'te,

  1. Projenize sağ tıklayın -> Özellikler
  2. Çalıştır'a git (Kategoriler altında)
  3. VM Options altında -Duser.timezone = UTC veya -Duser.timezone = GMT girin.

Tamam'ı tıklayın, ardından programınızı yeniden çalıştırın.

Not: UTC ve GMT dışında başka zaman taşlarına da ayarlayabilirsiniz.


2

Tomcat ile bu problemle karşılaştım. Aşağıdakileri ayarlamak $CATALINA_BASE/bin/setenv.shsorunu çözdü:

JAVA_OPTS=-Doracle.jdbc.timezoneAsRegion=false

Diğer cevaplardan gelen Java parametre önerilerinden birini kullanmanın da aynı şekilde çalışacağına eminim.


2

Ben de benzer bir sorunla karşılaştım.

Çevre:

Linux, hibernate projesi, oracle 11g veritabanını sorgularken ojdbc6 sürücüsü.

çözüm

TZ parametresi, temelde oracle'a saat dilimi hakkında bilgi veren linux makinesinde ayarlanmadı. Bu yüzden, ihracat ifadesini ekledikten sonra, uygulama başladığında "export TZ = UTC" sorunumu çözdü.

UTC -> Saat diliminize göre değiştirin.


2

Bu sorun JDeveloper'da ise: Hem model hem de proje görünümü için proje özelliklerini değiştirin -> çalıştır / hata ayıkla -> varsayılan profil -> düzenle aşağıdaki çalıştır seçeneğini ekleyin: -Duser.timezone = Asia / Calcutta

Yukarıdaki saat dilimi değerinin veritabanınızdan şu şekilde getirildiğinden emin olun:

select TZNAME from V$TIMEZONE_NAMES;

Bununla birlikte, jdev.conf dosyanızın yanı sıra JDeveloper -> Uygulama Menüsü -> Varsayılan Proje Özellikleri -> Çalıştır / Hata Ayıklama -> Varsayılan Profil -> Çalıştırma Seçenekleri içindeki saat dilimi ayarlarını kontrol etmek istersiniz.


1

JDeveloper'da bağlantı kurmaya çalıştığımda da aynı sorunu yaşadım. Sunucumuz farklı bir saat diliminde bulunuyor ve bu nedenle aşağıdaki hataları ortaya çıkardı:

ORA-00604: error occurred at recursive SQL level 1 

ORA-01882: timezone region not found

Proje özelliklerinin Java Seçeneklerinde (Çalıştır / Hata Ayıkla / Profil) ve Varsayılan Proje özelliklerinde saat dilimini eklemelerini isteyen birçok foruma b olarak -Duser.timezone="+02:00"atıfta bulundum, ancak bu benim için çalışmadı. Sonunda aşağıdaki çözüm benim için çalıştı.

Aşağıdaki satırı, JDeveloper'ın yapılandırma dosyasına ( jdev.conf ) ekleyin .

AddVMOption -Duser.timezone=UTC+02:00

Dosya "<oracle kurulum kökü> \ Middleware \ jdeveloper \ jdev \ bin \ jdev.conf" konumunda bulunur.


1

Benim durumumda, "TZR" yi "TZD" ile değiştirerek sorguyu çalıştırabilirim ..

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

1

Linux sistemimde (Centos6.5) saat dilimini ayarlayarak aynı sorunu çözebildim.

Tarafından yeniden gönderiliyor

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

  1. saat dilimini ayarlayın /etc/sysconfig/clockörneğin ZONE = "America / Los_Angeles" olarak ayarlayın

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

Saat dilimi değerini bulmak için şunu deneyin:

ls /usr/share/zoneinfo

ve saat diliminizi temsil eden dosyayı arayın.

Bunları ayarladıktan sonra makineyi yeniden başlatın ve tekrar deneyin.


2
Benim için, / etc / sysconfig / clock ve / etc / localtime bağlantısının doğru ayarlandığından emin olmak ORA-01882 sorununu çözmek için temelde bir önkoşuldur.
David Keener

1

OBIEE'de Oracle db'ye bağlantı kurmaya çalışırken aynı sorunu yaşadım. Windows saat dilimimi (GMT + 01: 00) Batı Orta Afrika'dan (GMT + 01: 00) Brüksel, Kopenhag, Madrid, Paris olarak değiştirdim. Sonra bilgisayarımı yeniden başlattım ve gayet iyi çalıştı. Görünüşe göre Oracle, batı orta Afrika saat dilimini tanıyamadı.


1

Bu sorun, db'ye bağlanmaya çalışan kod db'de olmayan bir saat dilimine sahip olduğu için meydana gelir. Saat dilimini aşağıdaki gibi ayarlayarak veya oracle db'de bulunan herhangi bir geçerli saat dilimini ayarlayarak da çözülebilir. bulunabilen geçerli saat dilimi v $ version'tan * seçin;

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


0

Eclipse ve uzak bir Oracle Veritabanı kullanarak aynı sorunla karşılaşmak, sistem saat dilimimi veritabanı sunucusunun saat dilimiyle eşleşecek şekilde değiştirmek sorunu çözdü. Sistem saat dilimini değiştirdikten sonra makineyi yeniden başlatın .

Umarım bu birine yardımcı olabilir


0

java.sql.SQLException: ORA-00604: özyinelemeli SQL düzey 1'de hata oluştu ORA-01882: saat dilimi bölgesi bulunamadı

Bu tür bir hata için, sistem saatinizi ülkenizin standart GMT biçimine değiştirmeniz yeterlidir.

örneğin, Hint saat dilimi chennai, kolkata'dır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.