2009-12-27 10 views
6

में आईडीईएल टाइमआउट पैरामीटर हम ऐसी परिस्थिति में फंस गए हैं जहां हमारी प्रक्रियाओं में से एक डाटाबेस को छूए बिना 3 घंटे कंप्यूटिंग ले रही है। प्रक्रिया को कॉल करने से पहले लिया गया कनेक्शन Oracle सर्वर द्वारा बंद हो जाता है और किसी भी बाद की क्वेरी या प्रतिबद्ध कनेक्शन बंद अपवाद फेंकता है।ओरेकल

ऐसा लगता है कि समस्या ओरेकल से संबंधित कनेक्शन को बंद कर रही है जो कि किसी कारण से लंबे समय तक निष्क्रिय है।

हमने sqlnet.ora में EXPIRE_TIMEOUT को बदलने का प्रयास किया लेकिन इससे कोई मदद नहीं मिली।

हम इस समस्या को हल करने के लिए क्या कर सकते हैं?

+1

आप इस तरह के एक लंबे समय के लिए कनेक्शन का उपयोग नहीं कर रहे हैं यह क्यों बंद नहीं और जब आपको इसकी आवश्यकता हो तो बाद में एक नया कनेक्शन प्राप्त करें? ऐसे संसाधन पर होल्डिंग जो आपको इतने लंबे समय तक नहीं चाहिए, वह अपमानजनक है। –

+0

कोड जो प्रक्रिया को कॉल करता है वह एक तृतीय पक्ष कोड है, इसके बारे में बहुत कुछ नहीं कर सकता है। मैंने उनसे क्या सुना है कि प्रक्रिया को वापस आने तक हमें कम से कम कनेक्शन टाइमआउट बढ़ाने की आवश्यकता है। –

उत्तर

7

क्या है त्रुटि आप प्राप्त जब आप कनेक्शन का उपयोग करने की कोशिश?

डिफ़ॉल्ट रूप से ओरेकल निष्क्रियता के कारण कनेक्शन बंद नहीं करेगा। आप ओरेकल को निष्क्रिय कनेक्शन बंद करने के कारण आईडीई_T_TIME के ​​साथ एक प्रोफ़ाइल कॉन्फ़िगर कर सकते हैं, लेकिन ऐसा लगता है कि आपने ऐसा नहीं किया है। आप मृत कनेक्शन का पता लगाने के लिए ओरेकल को भी कॉन्फ़िगर कर सकते हैं और यदि ग्राहक प्रतिक्रिया नहीं देता है तो कनेक्शन बंद करें - यदि ग्राहक को तीन घंटों तक दफनाया जाता है, तो यह संभव है कि यह समय-समय पर प्रतिक्रिया न दे। लेकिन ऐसा लगता है कि विज्ञापन को अतिरिक्त कॉन्फ़िगरेशन चरणों की आवश्यकता है।

मेरे अनुभव में अधिक संभावना स्थिति यह है कि आपका नेटवर्क कनेक्शन छोड़ रहा है। यदि आप फ़ायरवॉल के माध्यम से कनेक्ट कर रहे हैं, उदाहरण के लिए, फ़ायरवॉल अक्सर कनेक्शन बंद कर देगा जो बहुत लंबे समय तक निष्क्रिय हो गए हैं।

वास्तविक ओरेकल त्रुटि संदेश जो आप प्राप्त कर रहे हैं, यह इंगित करेगा कि इनमें से कौन सा विकल्प आपकी समस्या का कारण बन रहा है।

0

इससे कोई फर्क नहीं पड़ता कि आप किस डेटाबेस का उपयोग कर रहे हैं, यह मानना ​​एक बुरा विचार है कि आपका कनेक्शन लाइव होने जा रहा है जब आप इसका उपयोग करना चाहते हैं। इसे संभालने का एक तरीका है प्रश्न में डेटाबेस से सक्रिय कनेक्शन लौटने के लिए एक फ़ंक्शन बनाना, और किसी भी समय आपको किसी दिए गए डेटाबेस के लिए हैंडल/ऑब्जेक्ट/जो कुछ भी चाहिए, उसे कॉल करने के लिए। दिनचर्या डेटाबेस और उनके संबंधित कनेक्शन ऑब्जेक्ट की एक सूची बनाए रखता है। यदि कनेक्शन ऑब्जेक्ट लाइव होता है जब फ़ंक्शन को सभी अच्छी और अच्छी कहा जाता है और ऑब्जेक्ट को वापस करने के बाद डेटाबेस को संभालने के लिए डेटाबेस को मनाने के लिए कुछ ऐसा होता है, जो हैंडल/ऑब्जेक्ट/जो कुछ भी खुला रहता है। यदि कोई लाइव कनेक्शन ऑब्जेक्ट नहीं है तो दिनचर्या एक नया खुलती है और उसे वापस कर देती है। यह एक दूसरी दिनचर्या के लिए उपयोगी है कि एक टाइमर पर कैंप आउट हो जो 1 मिनट या उससे भी अधिक समय तक समाप्त हो जाए। जब टाइमर समाप्त हो जाता है और दूसरी दिनचर्या कहलाती है तो यह डेटाबेस कनेक्शन की सूची को देखती है, जो किसी निश्चित समय के लिए कोई गतिविधि नहीं होती है (डेटाबेस के सत्र टाइमआउट मान में काफी कम है)। जो लोग बहुत लंबे समय तक निष्क्रिय रहते हैं वे बंद हो जाते हैं और साफ हो जाते हैं।

+0

उत्तर के लिए धन्यवाद, क्योंकि आप इस प्रश्न पर मेरी टिप्पणियां देख सकते हैं, यह हमारा तीसरा पक्ष कोड है जिसका हम उपयोग कर रहे हैं और उनके द्वारा अनुशंसित समाधान यह है कि हम idletimeout पैरामीटर को कम करते हैं। –

3

इरफान,

  1. सुनिश्चित करें कि आप resource_limit = परिवर्तनों को प्रभावी करने के लिए init.ora फ़ाइल में सही किया हुआ है।

  2. इसके अलावा, कृपया जांचें कि क्या आप डिफ़ॉल्ट प्रोफ़ाइल पर असाइन किए गए उपयोगकर्ता को सीमा निर्धारित करने का प्रयास कर रहे हैं या नहीं।

select profile from dba_users where username = 'TEST_USER'; 
    PROFILE1 

चयन प्रोफाइल, RESOURCE_NAME, सीमित कर dba_profiles से जहां प्रोफ़ाइल = 'PROFILE1' और
RESOURCE_NAME = 'IDLE_TIME'

3 उपयोगकर्ता एक करने के लिए है, तो asigned कस्टम प्रोफाइल सुनिश्चित करें कि कस्टम प्रोफ़ाइल के पैरामीटर एक साथ सेट किए गए हैं। आपको connect_time पैरामीटर (डिफॉल्ट या कस्टम प्रोफाइल में जो भी लागू होता है, उसे भी देखना चाहिए। कनेक्शन का समय पार हो जाने के बाद, कनेक्शन समाप्त हो जाता है।)

और अंत में, कृपया ध्यान दें कि यदि वर्तमान सत्र पहले शुरू हुआ पैरामीटर सेट किया गया था, इसे प्रभावी नहीं किया जाएगा। परिवर्तन करने के बाद ही अगले सत्र से केवल किक-इन परिवर्तन।

उपयोगी लिंक।

http://www.adp-gmbh.ch/blog/2005/april/17.html 
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:453256655431 

धन्यवाद,

राजेश

+0

init.ora में resource_limit चर नहीं है, मैं डिफ़ॉल्ट रूप से इसके सेट को गलत मानता हूं। तो इसका मतलब यह है कि IDLE_TIME को छोटे मानों पर सेट किया गया है जहां resource_limit गलत है। या यह असीमित पर सेट है। Beacuase अगर डिफ़ॉल्ट रूप से असीमित है तो मुझे कुछ भी करने की आवश्यकता नहीं है। प्रलेखन से –

+0

विचार, ऐसा लगता है कि संसाधन_limit फ़्लैस करने के लिए सेट है (जो डिफ़ॉल्ट है), यह संसाधन सीमाओं के प्रवर्तन को अक्षम करता है। मुझे यकीन नहीं है कि यह IDLE_TIME के ​​लिए असीमित समय देता है। जब आप निष्पादित करते हैं तो dba_users से प्रोफ़ाइल का चयन करें जहां उपयोगकर्ता नाम = ; ? –

+0

यदि आप इस प्रोफ़ाइल में इस संसाधन के लिए सीमा छोड़ना चाहते हैं तो DEFAULT निर्दिष्ट करें। इस प्रोफ़ाइल को निर्दिष्ट उपयोगकर्ता DEFAULT प्रोफ़ाइल में निर्दिष्ट इस संसाधन के लिए सीमा के अधीन है। DEFAULT प्रोफ़ाइल प्रारंभ में असीमित संसाधनों को परिभाषित करता है। आप उन सीमाओं को ALTER PROFILE कथन http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_6010.htm#i2065930 –

0

ऐसा लगता है connection closed exception के लिए वास्तविक कारण क्या @Justin गुफा अपने जवाब में बताया गया के रूप में ही है:

मेरे अनुभव में अधिक होने की संभावना स्थिति है कि अपने नेटवर्क कनेक्शन छोड़ने है। यदि आप फ़ायरवॉल के माध्यम से कनेक्ट कर रहे हैं, उदाहरण के लिए, फ़ायरवॉल अक्सर निष्क्रिय होने वाले कनेक्शन बंद कर देगा।

वास्तविक ओरेकल त्रुटि संदेश जो आप प्राप्त कर रहे हैं, यह इंगित करेगा कि इन विकल्पों में से आपकी समस्या का कारण बन रहा है।

अगर अब भी किसी को, पता करने के लिए IDLE_TIME और CONNECT_TIME एक प्रोफ़ाइल के लिए कॉन्फ़िगर चाहते हैं तो एक क्वेरी के नीचे पर अमल कर सकते हैं:

select * from user_resource_limits user_resource where user_resource.resource_name in ('IDLE_TIME','CONNECT_TIME');