संपादित करें / प्रस्तावना: यह प्रश्न SO से माइग्रेट किया गया है क्योंकि मैं विशेष रूप से DB लिंक प्रश्नों पर टाइमआउट के सवाल पर दिलचस्पी रखता हूं। SO से प्रदान किया गया वर्कअराउंड कुछ हद तक ठीक है, लेकिन मैं वास्तव में इस सवाल में दिलचस्पी रखता हूं।
प्रेरणा:
मैंने एक क्वेरी "हमेशा के लिए" (2 दिन से अधिक, जब तक मैंने सत्र को मार दिया) चला रहा था, जो डेटाबेस लिंक का उपयोग कर रहा था। समस्या यह प्रतीत होती है कि दूरस्थ डेटाबेस अनुपलब्ध हो गया है और कुछ कारणों से अभी तक कोई कारण नहीं ORA-02068उठाया गया है (यहां चर्चा नहीं की जानी चाहिए) और क्वेरी बस इंतजार और इंतजार कर रही थी।
(क्वेरी dbms_scheduler जॉब द्वारा जारी की जाती है, जो PL / SQL पैकेज में एक प्रक्रिया निष्पादित करता है। परिणाम के रूप में, नौकरी भी अटक गई थी। लेकिन इस प्रश्न के मूल के लिए विशेष रुचि नहीं है)
मैंने अपने परीक्षण DBs में से एक को मोड में डालकर इस स्थिति का अनुकरण किया है और इसे एक डेटाबेस लिंक पर छोड़ दिया है। जैसा कि अनुमान था, क्वेरी तब तक प्रतीक्षा कर रही थी जब तक कि मैन्युअल रूप से रद्द न कर दी गई हो या रिमोट DB अनछुए न हो।
प्रश्न:
रिमोट डेटाबेस के व्यवहार और अप-टाइम पर मेरा कोई नियंत्रण नहीं है, इसलिए मैं एक क्वेरी पर एक टाइमआउट सेट करने के लिए कुछ संभावना की तलाश में हूं जो डेटाबेस लिंक का उपयोग कर रहा है।
मैंने पहले से ही प्रोफ़ाइल ( CPU_PER_CALLआदि), sqlnet.oraमापदंडों में देखा है, कनेक्टिंग स्ट्रिंग में सीधे स्थानीय नामकरण मापदंडों को जोड़ना (जैसे (connect_timeout=10)डेटाबेस लिंक परिभाषा में जोड़ना ), के साथ एक कमांड चलाना ... for update wait 1, लेकिन वे या तो व्यस्त या निष्क्रिय सत्र के लिए काम करते हैं, लेकिन नहीं प्रतीक्षा में सत्र के लिए।
इसलिए मैं डेटाबेस लिंक के "स्थानीय" पक्ष पर कुछ विकल्प की तलाश में हूं, जो डेटाबेस लिंक पर प्रश्नों के लिए टाइमआउट सेट करता है।
कुछ समाधान जैसे alter session set xyzया select ... from a@b "wait 100" --(yes, I know this syntax doesn't exist)सराहना की जाएगी, क्योंकि मेरे पास इन विशेष डीबी पर कोई डीबीए अधिकार नहीं है।
मैं वर्तमान में 10gR2 पर हूं, लेकिन कुछ ही हफ्तों में 11gR2 में अपग्रेड कर रहा हूं, इसलिए इनमें से किसी भी संस्करण के लिए विचार उपयोगी होंगे।