আমি জাভা অ্যাপ্লিকেশন থেকে একটি ওরাকল ডেটাবেস অ্যাক্সেস করছি, আমি যখন আমার অ্যাপ্লিকেশনটি চালাচ্ছি আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:
java.sql.SQLException: ORA-00604: পুনরাবৃত্ত এসকিউএল স্তরে 1 ত্রুটি ঘটেছে 1 ORA-01882: টাইমজোন অঞ্চলটি পাওয়া যায়নি
আমি জাভা অ্যাপ্লিকেশন থেকে একটি ওরাকল ডেটাবেস অ্যাক্সেস করছি, আমি যখন আমার অ্যাপ্লিকেশনটি চালাচ্ছি আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:
java.sql.SQLException: ORA-00604: পুনরাবৃত্ত এসকিউএল স্তরে 1 ত্রুটি ঘটেছে 1 ORA-01882: টাইমজোন অঞ্চলটি পাওয়া যায়নি
উত্তর:
আপনি ওরাকল জেডিবিসি ড্রাইভার এবং ওরাকল ডাটাবেসের সংস্করণও পরীক্ষা করে দেখতে পারেন। ওরাকল 9.2.0.4.0 সার্ভারের সাথে সংযোগ করতে ojdbc6.jar (সংস্করণ 11.2.0.3.0) ব্যবহার করার সময় আজই আমার এই সমস্যাটি ছিল। এটি ojdbc6.jar সংস্করণ 11.1.0.7.0 এর সাথে প্রতিস্থাপন করা সমস্যার সমাধান করেছে।
আমি ojdbc6.jar সংস্করণ 11.2.0.3.0 সংযোগ করতে ত্রুটি ছাড়াই সংযোগ স্থাপন করতে পেরেছি, oracle.jdbc.timezoneAsRegion=falseফাইল ওরাকল / jdbc / defaultConnicationProperties.properties (জারের ভিতরে) যুক্ত করে। এই সমাধানটি এখানে পেয়েছে (ভাঙা লিঙ্ক)
তারপরে, কেউ -Doracle.jdbc.timezoneAsRegion=falseকমান্ড লাইনে বা AddVMOption -Doracle.jdbc.timezoneAsRegion=falseকনফিগারেশন ফাইলগুলিতে যুক্ত করতে পারেন যা এই স্বরলিপিটি ব্যবহার করে।
আপনি এই প্রোগ্রামটিমেটিকভাবেও করতে পারেন, উদাহরণস্বরূপ System.setProperty।
কিছু ক্ষেত্রে আপনি যদি প্রতি সংযোগের ভিত্তিতে পরিবেশের পরিবর্তনশীল যুক্ত করতে পারেন তবে যদি এটি অনুমোদিত হয় (এসকিউএল বিকাশকারী "অ্যাডভান্সড" সংযোগ বৈশিষ্ট্যে এটির অনুমতি দেয়; সমস্যা নেই এমন একটি ডাটাবেসের সাথে সংযোগ করার সময় এবং এটি ব্যবহার করার জন্য আমি এটি যাচাই করেছি একটি ডাটাবেস যা আছে একটি ডাটাবেস লিঙ্ক)।
উইন্ডোজের অধীনে একটি সমতলে একটি এসকিউএল-বিকাশকারী ডিরেক্টরি ডিরেক্টরিতে যান
C:\Program Files\sqldeveloper\sqldeveloper\bin
এবং যোগ কর
AddVMOption -Duser.timezone=CET
ফাইল করা sqldeveloper.conf।
আমি পেয়েছি ত্রুটি:
Db_connection.java থেকে ত্রুটি - >> java.sql.SQLException: ORA-00604: পুনরাবৃত্ত এসকিউএল স্তর 1 ORA-01882 এ ত্রুটি ঘটেছে: টাইমজোন অঞ্চল খুঁজে পাওয়া যায় নি
ORA-00604: পুনরাবৃত্ত এসকিউএল স্তরে 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 / defaultConnicationProperties.properties আপডেট করুন :
oracle.jdbc.timezoneAsRegion=false
যা ঘটে তা হ'ল, জেডিবিসি ক্লায়েন্ট সার্ভারে টাইমজোন আইডি প্রেরণ করে। সার্ভারের সেই অঞ্চলটি জানা দরকার। আপনি চেক করতে পারেন
SELECT DISTINCT tzname FROM V$TIMEZONE_NAMES where tzname like 'Etc%';
আমার কিছু ডিবি সার্ভার রয়েছে যা 'ইসি / ইউটিসি' এবং 'ইউটিসি' (tzfile সংস্করণ 18) সম্পর্কে জানে তবে অন্যরা কেবল 'ইউটিসি' (tz সংস্করণ 11) জানে।
SELECT FILENAME,VERSION from V$TIMEZONE_FILE;
জেডিবিসি ক্লায়েন্টের পক্ষ থেকেও আলাদা আচরণ রয়েছে। ১১.২ দিয়ে শুরু করে ড্রাইভার জোন আইডিগুলি যদি ওরাকলকে "জানা" থাকে তবে তা টাইম অফসেট প্রেরণের আগে প্রেরণ করবে। এই "পরিচিত আইডি প্রেরণে" সমস্যাটি হ'ল, ক্লায়েন্ট সার্ভারে কোন টাইমজোন সংস্করণ / সামগ্রী উপস্থিত রয়েছে তা যাচাই করে না তবে তার নিজস্ব তালিকা রয়েছে।
এটি ওরাকল সাপোর্ট আর্টিকেল [আইডি 1068063.1] এ ব্যাখ্যা করা হয়েছে।
দেখে মনে হচ্ছে এটি ক্লায়েন্ট ওএসের উপরও নির্ভর করে, সম্ভবত এইচসিএল বা ইউটিসি আরহেল বা উইন্ডোজের তুলনায় উবুন্টুতে ব্যর্থ হয়। আমি অনুমান করি এটি কিছু সাধারণীকরণের কারণে হয়েছে তবে আমি ঠিক ঠিক বুঝতে পারি নি।
Eclipse এ go রান -> কনফিগারেশন চালান
সেখানে ডান পাশের প্যানেলে জেআরই ট্যাবে যান
মধ্যে VM- র আর্গুমেন্ট অধ্যায় এই পেস্ট
-Duser.timezone=GMT
তারপরে প্রয়োগ করুন -> চালান
অবিচ্ছিন্ন ইন্টিগ্রেশন সার্ভার থেকে স্বয়ংক্রিয় পরীক্ষা চালানোর সময় আমার এই সমস্যা হয়েছিল। আমি -Duser.timezone=GMTবিল্ড প্যারামিটারগুলিতে ভিএম যুক্তি " " যুক্ত করার চেষ্টা করেছি , তবে সমস্যাটি সমাধান হয়নি। তবে, পরিবেশের পরিবর্তনশীল যুক্ত করা " TZ=GMT" এটি আমার জন্য ঠিক করে দিয়েছে।
ত্রুটি :
ORA-00604: পুনরাবৃত্ত এসকিউএল স্তরে 1 ত্রুটি ঘটেছে 1 ORA-01882: টাইমজোন অঞ্চলটি পাওয়া যায়নি
সমাধান: সেন্টোসে সিআইএম সেটআপ।
/opt/oracle/product/ATG/ATG11.2/home/bin/dynamoEnv.sh
এই জাভা যুক্তি যুক্ত করুন:
JAVA_ARGS="${JAVA_ARGS} -Duser.timezone=EDT"
নেটবিনে,
ওকে ক্লিক করুন, তারপরে আপনার প্রোগ্রামটি আবার চালান।
দ্রষ্টব্য: আপনি ইউটিসি এবং জিএমটি ছাড়াও অন্যান্য টাইমস্টোনগুলিতেও সেট করতে পারেন।
আমি একই একই সমস্যার মুখোমুখি।
লিনাক্স, হাইবারনেট প্রকল্প, ojdbc6 ড্রাইভার যখন ওরাকল 11 জি ডাটাবেসটি জিজ্ঞাসা করছে।
TZ প্যারামিটারটি লিনাক্স মেশিনে সেট করা হয়নি, যা মূলত টাইমজোন সম্পর্কে ওরাকলকে বলে। সুতরাং, আবেদনের সময় এক্সপোর্ট স্ট্যাটমেন্ট "এক্সপোর্ট টিজেড = ইউটিসি" যুক্ত করার পরে আমার সমস্যার সমাধান হবে।
ইউটিসি -> আপনার টাইমজোনটিতে স্বত্ব পরিবর্তন করুন।
যদি এই সমস্যাটি জেডিভোল্পারে থাকে: মডেল এবং দর্শন প্রকল্পের জন্য প্রকল্পের বৈশিষ্ট্যগুলি পরিবর্তন করুন -> চালান / ডিবাগ -> ডিফল্ট প্রোফাইল -> সম্পাদনা নীচের রান বিকল্পটি যুক্ত করুন: -ডুসার.টাইমজোন = এশিয়া / কলকাতা
আপনার ডাটাবেস থেকে উপরোক্ত সময় অঞ্চল মানটি প্রাপ্ত করা হয়েছে তা নিশ্চিত করুন:
select TZNAME from V$TIMEZONE_NAMES;
এর সাথে সাথে আপনি আপনার jdev.conf এর সময় জোন সেটিংস পাশাপাশি 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
ফাইলটি "<ওরাকল ইনস্টলেশন রুট> \ মিডওয়ালওয়্যার \ জডিফলার \ জেদেব \ বিন \ জেদেব.কনফ" এ অবস্থিত।
আমার ক্ষেত্রে আমি "টিজেডআর" "টিজেডডি" দিয়ে পরিবর্তন করে ক্যোয়ারীটি কাজ করতে পারি ..
String query = "select * from table1 to_timestamp_tz(origintime,'dd-mm-yyyy hh24:mi:ss TZD') between ? and ?";
আমি আমার লিনাক্স সিস্টেমে টাইমজোন সেট করে (সেন্টোস 6.5) একই সমস্যাটি সমাধান করতে সক্ষম হয়েছি।
থেকে পোস্ট করা হচ্ছে
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html
টাইমজোন সেট করুন /etc/sysconfig/clockযেমন ZONE = "আমেরিকা / লস_এঞ্জেলস" এ সেট করুন
সুডো এলএন-এসএফ / ইউএসআর / শেয়ার / জোনিনফো / আমেরিকা / ফিনিক্স / ইত্যাদি / স্থানীয় সময়
টাইমজোন মানটি বের করার চেষ্টা করুন
ls /usr/share/zoneinfo
এবং আপনার সময় অঞ্চলকে উপস্থাপন করে এমন ফাইলটি সন্ধান করুন।
একবার আপনি এই মেশিনটি রিবুট সেট করে আবার চেষ্টা করুন।
OBIEE থেকে ওরাকল ডিবিতে সংযোগ দেওয়ার চেষ্টা করার সময় আমার একই সমস্যা হয়েছিল। আমি আমার উইন্ডোজ টাইমজোনকে (GMT + 01: 00) পশ্চিম মধ্য আফ্রিকা থেকে (GMT + 01: 00) ব্রাসেলস, কোপেনহেগেন, মাদ্রিদ, প্যারিসে পরিবর্তন করেছি। তারপরে আমি আমার কম্পিউটারটি পুনরায় বুট করেছিলাম এবং এটি ঠিকঠাক কাজ করেছে। দেখে মনে হচ্ছে ওরাকল পশ্চিম মধ্য আফ্রিকার টাইমজোনকে চিনতে সক্ষম হয় নি।
কোডটি যেটি ডিবিতে সংযোগ দেওয়ার চেষ্টা করছে তার একটি টাইমজোন রয়েছে যা ডিবিতে নেই This এটি নীচের মতো সময় অঞ্চল নির্ধারণ করে বা ওরাকল ডিবিতে কোনও বৈধ সময় অঞ্চল নির্ধারণ করেও সমাধান করা যেতে পারে। বৈধ সময় অঞ্চল যা পাওয়া যাবে * ভি $ সংস্করণ থেকে নির্বাচন করুন;
System.setProperty ("user.timezone", "আমেরিকা / নিউ_ইয়র্ক"); টাইমজোন.সেট ডিফল্ট (নাল);
java.sql.SQLException: ORA-00604: পুনরাবৃত্ত এসকিউএল স্তরে 1 ত্রুটি ঘটেছে 1 ORA-01882: টাইমজোন অঞ্চলটি পাওয়া যায় নি
এই ধরণের ত্রুটির জন্য, কেবলমাত্র আপনার সিস্টেমের সময়টিকে আপনার দেশের মানক GMT ফর্ম্যাটে পরিবর্তন করুন
যেমন ভারতীয় সময় অঞ্চলটি চেন্নাই, কলকাতা।