कनेक्शन पूलिंग लागू होने पर यह खुला रह सकता है। उदाहरण:कमांड टाइमआउट लॉक और TXN छोड़ सकता है क्योंकि क्लाइंट "abort" के रूप में भेजता है।
2 समाधान:
-
क्लाइंट में टेस्ट करें, शाब्दिक रूप से:
IF @@TRANCOUNT <> 0 ROLLBACK TRAN -
SET XACT_ABORT ONUse का उपयोग करें TXN की सफाई सुनिश्चित करने के लिए:प्रश्न 1 और प्रश्न 2
मैं हमेशा SET XACT_ABORT ON . का उपयोग करता हूं ।
इस SQL टीम ब्लॉग से:
<ब्लॉकक्वॉट>ध्यान दें कि कनेक्शन पूलिंग के साथ, केवल बिना रोलबैक के कनेक्शन को बंद करने से कनेक्शन केवल पूल में वापस आ जाएगा और लेन-देन तब तक खुला रहेगा जब तक कि पूल से पुन:उपयोग या हटा नहीं दिया जाता है। इसके परिणामस्वरूप ताले अनावश्यक रूप से शुरू हो सकते हैं और अन्य टाइमआउट और रोलिंग ब्लॉक का कारण बन सकते हैं
MSDN से, अनुभाग "लेन-देन समर्थन" (मेरा बोल्ड)
<ब्लॉकक्वॉट>जब कोई कनेक्शन बंद हो जाता है, तो उसे वापस पूल में और उसके लेन-देन के संदर्भ के आधार पर उपयुक्त उपखंड में छोड़ दिया जाता है। इसलिए, आप एक त्रुटि उत्पन्न किए बिना कनेक्शन बंद कर सकते हैं, भले ही वितरित लेनदेन अभी भी लंबित है। यह आपको वितरित लेनदेन को बाद में रद्द करने की अनुमति देता है।