2009-06-30 14 views
20

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

परिदृश्य का पालन के रूप में है ...

हम एक ASP.NET वेब उद्यम लाइब्रेरी विंडोज सर्वर 2008 आईआईएस एक एसक्यूएल सर्वर 2008 क्लस्टर वापस अंत से कनेक्ट करने के खेत पर चल रहा है का उपयोग कर आवेदन कर सकते है। एमएसडीटीसी चालू है। डीबी कनेक्शन पूल कर रहे हैं।

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

हमने एसक्यूएल प्रोफाइलिंग किया और क्वेरी SQL सर्वर पर चल गई, लेकिन कभी वापस नहीं आया (क्योंकि एमएसडीटीसी लेनदेन कनेक्शन में पहले से ही निरस्त कर दिया गया था)।

कुछ अन्य संबंधित इस साथ देने के लिए त्रुटियाँ हैं:

  • न्यू अनुरोध शुरू करने के लिए क्योंकि यह मान्य लेनदेन वर्णनकर्ता के साथ आना चाहिए अनुमति नहीं है।
  • आंतरिक .Net Framework डेटा प्रदाता त्रुटि 60.
+0

आप इस बारे में कुछ भी पता चला? बड़े डेटासेट (> 10 के पंक्तियों) डालने पर मुझे यह मिलता है। – StingyJack

उत्तर

3

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

क्या त्रुटि केवल अंतःक्रियात्मक रूप से होती है? यह आपके विवरण से ऐसा लगता है।

क्या आप using TransactionScope ब्लॉक में लेनदेन के रूप में बंद होने के करीब चाहते हैं, जैसा कि Microsoft अनुशंसा करता है? यह अजीब लेनदेन व्यवहार से बचने में मदद करनी चाहिए। याद रखें कि using ब्लॉक सुनिश्चित करता है कि वस्तु को हमेशा अपवादों के बावजूद निपटाया जाता है। यहाँ देखें:,

Using ts As New Transactions.TransactionScope(Transactions.TransactionScopeOption.RequiresNew) 
     ' Do Stuff 
    End Using 

इसके अलावा, अगर आप: http://msdn.microsoft.com/en-us/library/ms172152.aspx

आप TransactionScope उपयोग कर रहे हैं वहाँ एक तर्क System.TransactionScopeOption.RequiresNew उस ढांचे बताता हमेशा कोड के इस खंड के लिए एक नया लेनदेन बनाने के लिए है 'संदेह है कि एक कनेक्शन को गलती हो रही है और फिर कनेक्शन पूल में वापस डाल दिया गया है, संभावित समाधान कोड को संलग्न करना है जो एक कोशिश-पकड़ ब्लॉक में कनेक्शन को गलती कर सकता है और Dispose कैच ब्लॉक में कनेक्शन को गलती कर सकता है।

+0

बस स्पष्ट करने के लिए, मुझे बताया गया है कि आप केवल अपने SQL कनेक्शन को निपटाना चाहते हैं यदि कनेक्शन किसी दोषपूर्ण स्थिति में जाता है; अन्यथा आप कनेक्शन को पूल करने में सक्षम नहीं होंगे। –

0

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

3

एमएसडीटीसी में डिफ़ॉल्ट 90 सेकंड का समय समाप्ति है, यदि एक क्वेरी निष्पादित इस समय सीमा से अधिक हो जाती है, तो लेनदेन करने की कोशिश कर रहे समय में आपको यह त्रुटि मिल जाएगी।

+0

यह मेरे लिए था! (यकीन नहीं है कि इसका एक डाउनवोट क्यों था।) – Vaccano

1

पुराना सवाल ... लेकिन पिछले कुछ दिनों में इस मुद्दे में भाग गया।

अब तक कोई अच्छा जवाब नहीं मिला। बस मुझे जो मिला वह साझा करना चाहता था।

मेरे परिदृश्य में एकाधिक सत्र कारखानों द्वारा कई सत्र खोले जा रहे हैं। मुझे सही ढंग से रोलबैक करना था और इंतजार करना था और सुनिश्चित करना था कि अन्य लेनदेन अब सक्रिय नहीं थे। ऐसा लगता है कि उनमें से एक वापस रोलिंग सबकुछ रोलबैक करेगा।

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

https://gist.github.com/josephvano/5766488

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