जब मैं अपना एप्लिकेशन चलाता हूं, तो मैं एक ओरेकल डेटाबेस को एक जावा एप्लिकेशन से एक्सेस कर रहा हूं, मुझे निम्न त्रुटि मिलती है:
java.sql.SQLException: ORA-00604: त्रुटि पुनरावर्ती SQL स्तर 1 ORA-01882 पर हुई: समय क्षेत्र नहीं मिला
जब मैं अपना एप्लिकेशन चलाता हूं, तो मैं एक ओरेकल डेटाबेस को एक जावा एप्लिकेशन से एक्सेस कर रहा हूं, मुझे निम्न त्रुटि मिलती है:
java.sql.SQLException: ORA-00604: त्रुटि पुनरावर्ती SQL स्तर 1 ORA-01882 पर हुई: समय क्षेत्र नहीं मिला
जवाबों:
आप Oracle jdbc ड्राइवर और Oracle डेटाबेस के संस्करण की जाँच करने का भी प्रयास कर सकते हैं। ओरेकल 9.2.0.4.0 सर्वर से कनेक्ट करने के लिए ojdbc6.jar (संस्करण 11.2.0.3.0) का उपयोग करते समय आज ही मेरे पास यह मुद्दा था। इसे ojdbc6.jar संस्करण 11.1.0.7.0 के साथ प्रतिस्थापित करने से समस्या हल हो गई।
मैं भी oracle.jdbc.timezoneAsRegion=false
फ़ाइल त्रुटि / jdbc / defaultConnectionProperties.properties (जार के अंदर) जोड़कर, त्रुटि के बिना ojdbc6.jar संस्करण 11.2.0.3.0 बनाने में कामयाब रहा । इसका समाधान यहां मिला
अंत में, एक -Doracle.jdbc.timezoneAsRegion=false
कमांड लाइन में जोड़ सकते हैं , या -Doracle.jdbc.timezoneAsRegion=false
इस नोटेशन का उपयोग करने वाली कॉन्फ़िगरेशन फ़ाइलों में AddVMOption
एक सादे में Windows के तहत एक SQL- डेवलपर स्थापना निर्देशिका में जाते हैं
C:\Program Files\sqldeveloper\sqldeveloper\bin
और जोड़
AddVMOption -Duser.timezone=CET
दर्ज करना sqldeveloper.conf
।
त्रुटि मुझे मिली:
Db_connection.java से त्रुटि - >> java.sql.SQLException: ORA-00604: त्रुटि पुनरावर्ती SQL स्तर 1 ORA-01882 पर हुई: समय क्षेत्र नहीं मिला
ORA-00604: पुनरावर्ती SQL स्तर 1ORA-01882 पर त्रुटि हुई: टाइमज़ोन क्षेत्र नहीं मिला
पिछला कोड:
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;
}
नया कोड:
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;
}
अब यह काम कर रहा है !!
लाइब्रेरी के किसी भी संस्करण (यानी आपके जार के अंदर) में फ़ाइल ओरेकल / jdbc / defaultConnectionProperties.properties को अपडेट करें (आप नीचे दिए गए लाइन को समाहित करने के लिए उपयोग कर रहे हैं):
oracle.jdbc.timezoneAsRegion=false
क्या होता है, कि JDBC क्लाइंट टाइमज़ोन आईडी को सर्वर पर भेजता है। सर्वर को उस जोन को जानना होगा। आप के साथ जाँच कर सकते हैं
SELECT DISTINCT tzname FROM V$TIMEZONE_NAMES where tzname like 'Etc%';
मेरे पास कुछ db सर्वर हैं जो 'आदि / UTC' और 'UTC' (tzfile संस्करण 18) के बारे में जानते हैं, लेकिन अन्य केवल 'UTC' (tz संस्करण 11) जानते हैं।
SELECT FILENAME,VERSION from V$TIMEZONE_FILE;
JDBC क्लाइंट की तरफ भी अलग व्यवहार है। 11.2 से शुरू होने पर ड्राइवर ओरेकल के लिए "ज्ञात" होने पर ज़ोन आईडी भेज देगा, जबकि इससे पहले कि समय ऑफसेट भेजा गया था। इस "ज्ञात आईडी भेजने" के साथ समस्या यह है कि क्लाइंट यह नहीं देखता है कि सर्वर पर क्या समयक्षेत्र संस्करण / सामग्री मौजूद है, लेकिन इसकी अपनी सूची है।
यह ओरेकल सपोर्ट आर्टिकल [आईडी 1068063.1] में बताया गया है।
ऐसा लगता है कि यह क्लाइंट ओएस पर भी निर्भर करता है, यह अधिक संभावना थी कि आरएचईएल या विंडोज की तुलना में एबीसी / यूटीसी उबंटू के साथ विफल हो जाता है। मुझे लगता है कि यह कुछ सामान्य होने के कारण है, लेकिन मुझे यह पता नहीं चला है कि वास्तव में क्या है।
ग्रहण में रन -> रन कॉन्फ़िगरेशन
वहां राइट साइड पैनल में JRE टैब पर जाएं
में वी एम तर्क अनुभाग इस पेस्ट
-Duser.timezone=GMT
फिर लागू करें -> भागो
निरंतर एकीकरण सर्वर से स्वचालित परीक्षण चलाने पर मुझे यह समस्या हुई। मैंने -Duser.timezone=GMT
बिल्ड पैरामीटर में VM तर्क " " जोड़ने की कोशिश की , लेकिन इससे समस्या हल नहीं हुई। हालांकि, पर्यावरण चर को जोड़ना " TZ=GMT
" ने इसे मेरे लिए ठीक किया।
त्रुटि:
ORA-00604: त्रुटि पुनरावर्ती SQL स्तर 1 ORA-01882 पर हुई: टाइमज़ोन क्षेत्र नहीं मिला
समाधान: सेंटोस में CIM सेटअप।
/opt/oracle/product/ATG/ATG11.2/home/bin/dynamoEnv.sh
इस जावा तर्क जोड़ें:
JAVA_ARGS="${JAVA_ARGS} -Duser.timezone=EDT"
नेटबीन्स में,
ठीक पर क्लिक करें, फिर अपना प्रोग्राम पुनः चलाएं।
नोट: आप UTC और GMT के अलावा अन्य टाइमस्टोन पर भी सेट कर सकते हैं।
मुझे भी इसी तरह के मुद्दे का सामना करना पड़ा।
लिनक्स, hibernate परियोजना, ojdbc6 ड्राइवर जब oracle 11g डेटाबेस को क्वेरी करता है।
लिनेक्स मशीन में टीबी पैरामीटर सेट नहीं किया गया था, जो मूल रूप से ओजोन के बारे में बताता है। इसलिए, आवेदन शुरू होने के समय एक्सपोर्ट स्टैटिमेंट "एक्सपोर्ट टीबी = यूटीसी" जोड़ने के बाद मेरी समस्या हल हो गई।
UTC -> अपने समयक्षेत्र में परिवर्तन करें।
यदि यह समस्या JDeveloper में है: मॉडल और दृश्य प्रोजेक्ट दोनों के लिए प्रोजेक्ट गुण बदलें -> रन / डीबग -> डिफ़ॉल्ट प्रोफ़ाइल -> निम्नलिखित रन विकल्प जोड़ें: -Duser.timezone = एशिया / कोलकाता
सुनिश्चित करें कि उपरोक्त समय क्षेत्र मान आपके डेटाबेस से प्राप्त किया गया है:
select TZNAME from V$TIMEZONE_NAMES;
इसके साथ ही आप अपने jdev.conf के साथ-साथ JDeveloper -> एप्लिकेशन मेनू -> डिफ़ॉल्ट प्रोजेक्ट प्रॉफ़ाइट्स -> रन / डीबग -> डिफ़ॉल्ट प्रोफ़ाइल -> रन विकल्प में समय क्षेत्र सेटिंग्स की जांच करना चाहते हैं।
मुझे भी यही समस्या थी जब मैंने JDeveloper में संबंध बनाने की कोशिश की। हमारा सर्वर अलग-अलग टाइमज़ोन में स्थित है और इसलिए इसने निम्न त्रुटियों को उठाया है:
ORA-00604: error occurred at recursive SQL level 1
ORA-01882: timezone region not found
मैंने कई मंचों का उल्लेख किया है, जिसमें परियोजना के गुणों और डिफ़ॉल्ट परियोजना गुणों के जावा विकल्प (रन / डिबग / प्रोफाइल) में टाइमज़ोन शामिल करने के लिए कहा गया है -Duser.timezone="+02:00"
टाइमजोन को शामिल करने के लिए कहा गया था लेकिन यह मेरे लिए कारगर नहीं था। अंत में निम्नलिखित समाधान मेरे लिए काम किया।
JDeveloper के कॉन्फ़िगरेशन फ़ाइल ( jdev.conf ) में निम्न पंक्ति जोड़ें ।
AddVMOption -Duser.timezone=UTC+02:00
फ़ाइल "<oracle स्थापना रूट> \ Middleware \ jdeveloper \ jdev \ bin \ jdev.conf" में स्थित है।
मेरे मामले में मुझे "TZD" के साथ "TZR" को बदलकर काम करने की क्वेरी मिल सकती है।
String query = "select * from table1 to_timestamp_tz(origintime,'dd-mm-yyyy hh24:mi:ss TZD') between ? and ?";
मैं अपने लिनक्स सिस्टम (Centos6.5) में टाइमज़ोन सेट करके उसी मुद्दे को हल करने में सक्षम था।
से रिपॉस्टिंग
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html
में सेट समयक्षेत्र /etc/sysconfig/clock
क्षेत्र = "America / Los_Angeles" करने के लिए जैसे सेट
sudo ln -sf / usr / share / zoneinfo / अमेरिका / फीनिक्स / आदि / स्थानीय समय
टाइमजोन मान का पता लगाने के लिए प्रयास करें
ls /usr/share/zoneinfo
और उस फ़ाइल को देखें जो आपके टाइमज़ोन का प्रतिनिधित्व करती है।
एक बार जब आप इन रिबूट मशीन को सेट करते हैं और फिर से कोशिश करते हैं।
ओबीईई पर ओरेकल डीबी पर एक कनेक्शन बनाने की कोशिश करते समय मुझे यही समस्या थी। मैंने अपना विंडोज टाइमजोन (GMT + 01: 00) पश्चिम मध्य अफ्रीका से बदल दिया (GMT + 01: 00) ब्रसेल्स, कोपेनहेगन, मैड्रिड, पेरिस। फिर मैंने अपने कंप्यूटर को रिबूट किया और यह ठीक काम किया। ओरेकल की तरह लगता है कि पश्चिम मध्य अफ्रीका टाइमज़ोन को पहचानने में सक्षम नहीं था।
यह समस्या उस कोड के रूप में होती है जो db से कनेक्ट करने का प्रयास कर रहा है, इसमें एक टाइमज़ोन है जो db में नहीं है। इसे नीचे दिए गए समय क्षेत्र या किसी भी मान्य समय क्षेत्र के रूप में निर्धारित किया जा सकता है जो oracle db में उपलब्ध है। वैध समय क्षेत्र जो v $ संस्करण से चयनित * पाया जा सकता है;
System.setProperty ("user.timezone", "अमेरिका / New_York"); TimeZone.setDefault (शून्य);
java.sql.SQLException: ORA-00604: त्रुटि पुनरावर्ती SQL स्तर 1 ORA-01882 पर हुई: समय क्षेत्र नहीं मिला
इस प्रकार की त्रुटि के लिए, अपने सिस्टम समय को अपने देश के मानक GMT प्रारूप में बदलें
उदाहरण के लिए भारतीय समय क्षेत्र चेन्नई, कोलकाता है।