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ı
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ı
Yanıtlar:
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=false
oracle / 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=false
komut satırına veya AddVMOption'a eklenebilir -Doracle.jdbc.timezoneAsRegion=false
.
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
.
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 !!
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
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.
tutulmada go run -> yapılandırmayı çalıştır
orada sağ taraftaki panellerdeki JRE sekmesine gidin
içinde VM Argümanlar bölümünde bu yapıştırın
-Duser.timezone=GMT
sonra Uygula -> Çalıştır
Sürekli entegrasyon sunucusundan otomatik testler çalıştırırken bu sorunu yaşadım. -Duser.timezone=GMT
Derleme 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ü.
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"
Netbeans'te,
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.
Ben de benzer bir sorunla karşılaştım.
Linux, hibernate projesi, oracle 11g veritabanını sorgularken ojdbc6 sürücüsü.
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.
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.
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.
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 ?";
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
saat dilimini ayarlayın /etc/sysconfig/clock
örneğin ZONE = "America / Los_Angeles" olarak ayarlayın
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.
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ı.
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);
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.