2009-03-17 7 views
7

मेरे पास जावा जेडीबीसी एप्लिकेशन ओरेकल 10 जी डाटाबेस के खिलाफ चल रहा है। मैंने एक क्वेरी निष्पादित करने के लिए एक प्रीपेयरस्टेटमेंट सेट अप किया है, और फिर इसे चलाने के लिए ps.executeQuery() को कॉल करें। कभी-कभी क्वेरी में काफी समय लगता है, और मुझे इसे मारने की ज़रूरत है। मेरे पास एक और थ्रेड एक्सेस है जो प्रीपेडस्टेटमेंट ऑब्जेक्ट है, और उस पर कॉल रद्द करें()।जब मैं एक जेडीबीसी अनुप्रयोग में PreparedStatement.cancel() को कॉल करता हूं, तो क्या यह वास्तव में ओरेकल डेटाबेस में इसे मारता है?

मेरा सवाल है, क्या यह वास्तव में डेटाबेस में क्वेरी को मारता है? या यह सिर्फ क्लाइंट से इसे अलग करता है, और क्वेरी अभी भी ओरेकल के आंतों में कहीं चल रही है?

धन्यवाद!

उत्तर

8

उत्तर यह है कि यह एक गुणवत्ता-कार्यान्वयन मुद्दा है। यदि आप स्टेटमेंट.cancel() के लिए javadoc देखते हैं, तो ऐसा लगता है कि यह होगा "यदि दोनों डीबीएमएस और ड्राइवर दोनों SQL कथन को निरस्त करने का समर्थन करते हैं"।

ओरेकल जेडीबीसी ड्राइवरों के विभिन्न संस्करणों के साथ अपने अनुभव में, स्टेटमेंट.cancel() ऐसा लगता है जो आप चाहते हैं। प्रश्न रद्द होने पर तत्काल निष्पादन करना बंद कर देता है।

+0

मेरे मामले में नहीं। https://stackoverflow.com/questions/44383579/how-do-i-forcibly-close-connections-from-a-connection-pool – supertonsky

1

यह आपके द्वारा उपयोग किए जा रहे ड्राइवर पर निर्भर करता है, ड्राइवर और डेटाबेस दोनों को आपके द्वारा काम करने के लिए एक कथन रद्द करने का समर्थन करने की आवश्यकता होती है। ओरेकल इस सुविधा का समर्थन करता है, लेकिन आपको निश्चित रूप से जानने के लिए उपयोग कर रहे विशिष्ट ड्राइवर के बारे में और जानना होगा।

वैकल्पिक रूप से, आप लंबे समय तक चलने वाली क्वेरी शुरू करने और रद्द करने के बाद डेटाबेस को देखकर एक सरल परीक्षण चला सकते हैं।

10

कृपया ध्यान दें कि मैं नीचे जो कहता हूं वह ओरेकल के अवलोकन और संदर्भों पर आधारित है, और ओरेकल के आंतरिक की गहरी समझ पर आधारित नहीं है। इसमें से कोई भी आधिकारिक नहीं माना जाना चाहिए।

उनके पहले अनुच्छेद में क्या निंदा किया गया सही है। हालांकि, सुझाए गए परीक्षण से सावधान रहें। सभी लंबे समय तक चलने वाले ऑरैकल प्रश्न समान नहीं हैं। ऐसा लगता है कि प्रश्नों का मूल्यांकन दो चरणों में किया जाता है, पहला चरण जो पर्याप्त डेटा को सही क्रम में पंक्तियों को वापस करने के बारे में जानने के लिए जोड़ता है, और दूसरा चरण जो अंतराल में भरने वाली पंक्तियों को भरने वाली पंक्तियों को वापस करता है पहला चरण। दो चरणों के बीच काम का विभाजन लागत-आधारित अनुकूलक की सेटिंग्स से भी प्रभावित होता है। जैसे प्रथम पंक्तियों बनाम ऑल-पंक्तियां।

अब, यदि प्रश्न चरण 1 में है, तो रद्द अनुरोध सबसे पहले चरण 1 के अंत में लागू होने के लिए कतारबद्ध होना प्रतीत होता है, जिसका अर्थ है कि क्वेरी चालू है।

चरण 2 में, पंक्तियों में पंक्तियां वापस आती हैं, और प्रत्येक गुच्छा के बाद, रद्द आदेश कम हो सकता है, इसलिए मानते हैं कि चालक कमांड का समर्थन करता है, रद्द करने का अनुरोध परिणामस्वरूप मारे जा रहा है।

जेडीबीसी रद्द करने के आदेश के लिए विनिर्देश यह नहीं प्रतीत होता है कि अगर क्वेरी चलना बंद नहीं होता है तो क्या होना चाहिए, और इसलिए आदेश हत्या की पुष्टि के लिए प्रतीक्षा कर सकता है, या टाइमआउट हो सकता है और अभी भी क्वेरी के साथ वापस आ सकता है।

संबंधित मुद्दे

 संबंधित मुद्दे