oracle महत ORA-03113: एएसपी.Net ऐप में लंबे समय तक निष्क्रियता के बाद संचार चैनल पर समाप्त होता है




हिंदी में संचार का कार्य (6)

आईओएस 5 पर एएपी.नेट 2.0 ऐप को ओएडैक / ओडीपी.नेट ड्राइवरों के संस्करण 10.1.0.301 का उपयोग करते हुए, एक ओरेकल 10 जी सर्वर पर एक लोड-संतुलित (सत्र स्थिति का उपयोग नहीं करना) मिला है। निष्क्रियता (कुछ घंटों) की लंबी अवधि के बाद, यह प्रतीत होता है कि एप्लिकेशन, एक ओरेकल अपवाद फेंक देगा:

अपवाद: ORA-03113: Oracle.DataAccess.Client.OracleException.HandleErrorHelper (Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx, ऑब्जेक्ट स्रोत, स्ट्रिंग प्रक्रिया) पर Oracle.DataAccess.Client पर संचार चैनल पर अंत-ऑफ-फाईल Oracle.DataAccess.Client.OracleCommand.System.Data.IDbCommand.ExecuteReader पर OracleCommand.ExecuteReader (बूलियन requery, बूलियन fillRequest, कमांडचार्य व्यवहार)

... स्टैक का ओरेकल भाग यहाँ समाप्त होता है ...

हम हर अनुरोध पर नए कनेक्शन बना रहे हैं, सही कनेक्शन बंद करने के लिए प्रयास / पकड़ / अंत में लिपटे खुले और नज़दीकी हैं, और पूरी वस्तु का उपयोग (ओराकल कनेक्शन युधियाद) {...} ब्लॉक में लपेटा हुआ है। निष्क्रियता के लिए घूमने के बाद यह समस्या ASP.Net एप्लिकेशन के पुनरारंभ से जुड़ी नहीं होती है।

हमने अभी तक इस समस्या को पुन: उत्पन्न करने के लिए स्वयं किया है विचार, प्रार्थना, मदद?

अधिक: आईटी के साथ चेक किया गया, फ़ायरवॉल उन सर्वरों के बीच कनेक्शन को मारने के लिए सेट नहीं है


मान्य कनेक्शन जोड़ें = अपने कनेक्शन स्ट्रिंग के लिए सही

इसके बारे में और अधिक जानने के लिए इस ब्लॉग को देखें

विवरण: OracleConnection.Close () के बाद वास्तविक डेटाबेस कनेक्शन समाप्त नहीं होता है। कनेक्शन ऑब्जेक्ट को कनेक्शन पूल में वापस रखा गया है। कनेक्शन पूल का उपयोग ODP.NET द्वारा निहित है यदि आप एक नया कनेक्शन बनाते हैं तो आप पूल में से एक मिलता है। यदि यह कनेक्शन "अभी तक खुला है" OracleConnection.Open () विधि वास्तव में एक नया कनेक्शन नहीं बनाता है अगर असली कनेक्शन टूट गया है (किसी भी कारण से) आपको पहले चयन, अपडेट, सम्मिलित या हटाए जाने पर असफलता मिलती है

मान्य कनेक्शन के साथ वास्तविक कनेक्शन ओपन () विधि में मान्य है।


यह त्रुटि संदेश एप्लिकेशन लॉग में फेंक दिया जा सकता है जब वास्तविक समस्या यह है कि ओरेकेल डेटाबेस सर्वर अंतरिक्ष से बाहर हो गया।

अंतरिक्ष समस्या को ठीक करने के बाद, यह विशेष त्रुटि संदेश गायब हो गया।


ORA-03113: संचार चैनल पर फ़ाइल के अंत

क्या डेटाबेस आपको बताता है कि नेटवर्क कनेक्शन अब और नहीं है ऐसा इसलिए हो सकता है क्योंकि:

  1. एक नेटवर्क मुद्दा - दोषपूर्ण कनेक्शन, या फ़ायरवॉल समस्या
  2. सर्विसिंग करने वाले डेटाबेस पर सर्वर की प्रक्रिया आपको अप्रत्याशित रूप से मृत्यु हो गई है

1) (फ़ायरवॉल) के लिए खोज tahiti.oracle.com SQLNET.EXPIRE_TIME के ​​लिए यह एक sqlnet.ora पैरामीटर है जो नियमित रूप से कॉन्फ़िगर करने योग्य अंतराल पर एक नेटवर्क पैकेट भेजता है: इस सेटिंग से फ़ायरवॉल का मानना ​​होगा कि कनेक्शन लाइव है।

1) (नेटवर्क) के लिए अपने नेटवर्क व्यवस्थापक से बात करें

2 के लिए) त्रुटियों के लिए alert.log की जाँच करें, अगर सर्वर की प्रक्रिया विफल हुई तो यहां एक त्रुटि संदेश होगा और समस्या को पहचानने के लिए समर्थन को सक्षम करने के लिए एक ट्रेस फ़ाइल लिखी जाएगी। त्रुटि संदेश ट्रेस फ़ाइल का संदर्भ देगा।

मेटाइंक। ऑरेकल.कॉम में एक उपयुक्त ग्राहक सेवा पहचानकर्ता (सीएसआई) के साथ समर्थन मुद्दों को उठाया जा सकता है


संचार चैनल पर फ़ाइल का अंत:

इस गलती का एक तरीका यह है कि डेटाबेस खोलने के चरण में लॉग लिखने में असफल हो;

समाधान यदि डेटाबेस ARCHIVELOG या NOARCHIVELOG में चल रहा है तो डेटाबेस की जांच करें

इस्तेमाल की जांच

select log_mode from v$database;

अगर इसकी पर ARCHIVELOG में बदलने की कोशिश करते हैं

sqlplus का उपयोग करके

  • स्टार्टअप माउंट
  • डेटाबेस नूरिवाल्ग को बदलना;
  • डेटाबेस खोलें;

अगर यह इसके लिए काम करता है

उसके बाद आप अपने फ्लैश रिकवरी क्षेत्र को संभवतः समायोजित कर सकते हैं कि संभवतः आपका फ्लैश रिकवरी क्षेत्र पूर्ण है -> यह पुष्टि करने के बाद कि आपके फ्लैश रिकवरी क्षेत्र में जगह है, आप अपने डेटाबेस को ARCHIVELOG में बदल सकते हैं


पहले उल्लेख किया गया लेख अच्छा है। http://forums.oracle.com/forums/thread.jspa?threadID=191750 (जहां तक ​​जाता है)

यदि ऐसा कुछ ऐसा नहीं है जो अक्सर चलता रहता है (इसे अपने होम पेज पर नहीं दो), तो आप कनेक्शन पूलिंग को बंद कर सकते हैं।

वहाँ एक अन्य "पकड़चा" है जो लेख में उल्लिखित नहीं है। यदि पहली बात आप कनेक्शन के साथ करने की कोशिश करते हैं तो एक संग्रहीत प्रक्रिया को कॉल करें, ओडीपी हांगा !!!! आप एक अजीब स्थिति को प्रबंधित करने के लिए वापस नहीं मिलेगा, बस एक पूर्ण बोर हांग! इसे ठीक करने का एकमात्र तरीका बंद कनेक्शन पूलिंग करना है। एक बार जब हमने ऐसा किया, तो सभी मुद्दे दूर चले गए।

कुछ परिस्थितियों में पूलिंग अच्छा है, लेकिन प्रत्येक कनेक्शन के पहले बयान के चारों ओर बढ़ती जटिलता की कीमत पर।

यदि त्रुटि हैंडलिंग दृष्टिकोण बहुत अच्छा है, तो वे इसे हमारे लिए इसे संभालने के लिए ओडीपी के लिए एक विकल्प क्यों नहीं बनाते ???


आप इस रजिस्ट्री हैक की कोशिश कर सकते हैं:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DeadGWDetectDefault"=dword:00000001
"KeepAliveTime"=dword:00120000

अगर यह काम करता है, तो KeepAliveTime बढ़ाना जारी रखें। यह वर्तमान में 2 मिनट के लिए सेट है