सबसे पहले, सरल समाधान:मैं दोबारा जांच करूंगा कि उत्पादन डेटाबेस में डिफ़ॉल्ट लिंक की संख्या वास्तव में है 4.
select *
from v$system_parameter
where name = 'OPEN_LINKS'
यह मानते हुए कि आप इसे हल्के में नहीं लेने जा रहे हैं:
आप कहते हैं कि आप सत्र को स्पष्ट रूप से बंद कर देते हैं, जो दस्तावेज़ीकरण , इसका मतलब यह होना चाहिए कि उस सत्र से जुड़े सभी लिंक बंद हैं। इसके अलावा मैं इस बिंदु पर पूर्ण अज्ञानता स्वीकार करता हूं।
ऐसा कोई नुकसान नहीं है जिसके बारे में मैं सोच सकता हूं। टॉम कायटे सुझाव देते हैं , हालांकि बहुत समय पहले, कि प्रत्येक खुला डेटाबेस लिंक 500k PGA मेमोरी का उपयोग करता है। यदि आपके पास कोई नहीं है तो यह स्पष्ट रूप से एक समस्या का कारण बनेगा लेकिन अधिकांश स्थितियों के लिए यह ठीक से अधिक होना चाहिए।
हालांकि, अनपेक्षित परिणाम हैं:कल्पना करें कि आप इस संख्या को 100 तक बढ़ा देते हैं। कोई व्यक्ति कुछ ऐसा कोड करता है जो लगातार लिंक खोलता है और उन सभी के माध्यम से बहुत सारा डेटा खींचता है select * from my_massive_table
या इसी के समान। ऐसा करने वाले 4 सत्रों के बजाय आपके पास 100 हैं, जो एक साथ सैकड़ों गीगाबाइट स्थानांतरित करने का प्रयास कर रहा है। तनाव के कारण आपका नेटवर्क मर जाता है...
शायद और भी बहुत कुछ है लेकिन आपको चित्र मिल गया है।
जैसा कि आपने देखा है कि सबसे अच्छा जवाब "शायद नहीं" है, जो ज्यादा मदद नहीं करता है। आप ठीक से उल्लेख नहीं करते कि आप सत्र को कैसे समाप्त कर रहे हैं, लेकिन यदि आप इसे शानदार ढंग से बंद करने के बजाय समाप्त कर रहे हैं तो निश्चित रूप से।
डेटाबेस लिंक का उपयोग करने से दूरस्थ सर्वर पर चाइल्ड प्रोसेस उत्पन्न होती है। चूंकि आपका सर्वर अब इस प्रक्रिया के पूर्ण प्रभार में नहीं है, इसलिए असंख्य चीजें हैं जो इसे अनाथ हो सकती हैं या अन्यथा मूल प्रक्रिया की समाप्ति पर बंद नहीं हो सकती हैं। यह किसी भी तरह से पूरे समय नहीं होता है लेकिन यह हो सकता है और होता है।
मैं दो काम करूंगा।
-
आपकी प्रक्रिया में, यदि कोई अपवाद सामने आता है, तो निम्न क्वेरी के परिणाम स्वयं को ईमेल करें।
select * from v$dblink
कम से कम आपको पता चल जाएगा कि सत्र में कौन से डेटाबेस लिंक खुले हैं और आपको उन्हें ट्रेस करने का कोई तरीका मिलेगा।
-
दस्तावेज़ीकरण सलाह का पालन करें; विशेष रूप से निम्नलिखित:
"आपके पास लिंक को मैन्युअल रूप से बंद करने का अवसर हो सकता है। उदाहरण के लिए, क्लोजलिंक्स जब:
- लिंक द्वारा स्थापित नेटवर्क कनेक्शन का उपयोग किसी एप्लिकेशन में कम ही किया जाता है।
- उपयोगकर्ता सत्र समाप्त किया जाना चाहिए।"
पहला आपकी स्थिति के बिल्कुल अनुकूल लगता है। जब तक आपकी प्रक्रिया समय-संवेदी नहीं है, जो ऐसा प्रतीत नहीं होता है, तो आपके पास खोने के लिए क्या है? वाक्य रचना है:
alter session close database link <linkname>