ऐसा इसलिए होता है क्योंकि आपका कोड Oracle कनेक्शन पूल से कनेक्शन का अनुरोध करता है और कनेक्शन पूल Oracle DB को एक डिस्कनेक्ट / पुराना कनेक्शन देता है। ODP.NET क्लाइंट को भेजे गए कनेक्शन की कनेक्शन स्थिति का स्वयं परीक्षण नहीं करता है।
तो सुरक्षित रहने के लिए, या तो आप connection status == Open
. की जांच करें जब आप कनेक्शन करते हैं तो पूल से प्राप्त कनेक्शन के लिए। ओपन ()
या
ODP.NET को Validate Connection = true
. सेट करके आपके लिए जाँच करने दें web.config में आपके कनेक्शन स्ट्रिंग में।
इन दोनों विधियों का प्रदर्शन पर प्रभाव पड़ता है क्योंकि जब भी आपको डेटाबेस से कनेक्ट करने की आवश्यकता होती है तो वे कनेक्शन स्थिति का परीक्षण करते हैं।
एक तीसरा विकल्प जिसका मैं उपयोग करता हूं वह है अपवादों का उपयोग। पहले आशावादी बनें और कनेक्शन पूल से जो भी कनेक्शन लौटाया जाता है उसका उपयोग करें। यदि आपको ORA-3135 मिलता है तो एक नए कनेक्शन का अनुरोध करें और अपनी क्वेरी को थोड़ी देर के लूप की तरह फिर से निष्पादित करें। सर्वोत्तम स्थिति में, आप अपना पहला कनेक्शन मान्य के रूप में प्राप्त कर सकते हैं और आपकी क्वेरी निष्पादित हो जाएगी। सबसे खराब स्थिति में, आपके पूल के सभी कनेक्शन पुराने हैं, इस स्थिति में कोड को N समय पर निष्पादित किया जाएगा (जहां N कनेक्शन पूल का आकार है)।