مشكلة غريبة في SQL2005"SqlConnection لا يدعم المعاملات المتوازية"

StackOverflow https://stackoverflow.com/questions/407320

  •  03-07-2019
  •  | 
  •  

سؤال

لدي مشكلة تبدو وكأنها نتيجة لحالة الجمود.نحن نبحث الآن عن جذر المشكلة ولكن في هذه الأثناء أردنا إعادة تشغيل الخادم وتشجيع العميل على الاستمرار.

والآن في كل مرة نبدأ فيها البرنامج يقول فقط "SqlConnection لا يدعم المعاملات المتوازية".لم نغير أي شيء في البرنامج، وقد تم تجميعه وعلى خادم العملاء، ولكن بعد "الطريق المسدود المحتمل" - الوضع، يريد الاتصال بالإنترنت مرة أخرى.

لدينا 7 عملاء (أجهزة كمبيوتر) يقومون بتشغيل البرنامج، ويتحدث كل عميل إلى خدمة ويب على خادم محلي، وتتحدث خدمة الويب إلى خادم SQL (نفس جهاز خادم الويب).

لقد قمنا بإعادة تشغيل كل من خادم SQL وخادم IIS، ولكن لم نقم بإعادة تشغيل الخادم بسبب وجود خدمات مهمة أخرى تعمل على الخادم، لذا فهذا آخر شيء نقوم به.لا يمكننا رؤية أي أقفال أو أي شيء في علامة تبويب الإدارة.

لذلك سؤالي هو، لماذا يأتي الخطأ "SqlConnection لا يدعم المعاملات المتوازية" من وقت لآخر دون تغيير أي شيء في البرنامج ولا يزال يعيش بين إعادة تشغيل SQL.

يبدو أن هذا يحدث عند أول طلب db يقوم به البرنامج عند بدء تشغيله.

إذا كنت بحاجة إلى مزيد من المعلومات فقط أسأل.أنا في حيرة...

معلومات اكثر:لا أعتقد أن لدي معاملات جارية "طويلة".غالبًا ما يكون السيناريو هو أن لدي مجموعة بيانات تحتوي على 20-100 صف (ContractRows) وسأقوم بإجراء تحديث على tableAdapter.أقوم أيضًا بتكرار هذه الصفوف التي يتراوح عددها من 20 إلى 100 وبالنسبة لبعضها سأقوم بإنشاء استعلامات SQL-hook (على سبيل المثال، إذا تم وضع علامة على منتج مستأجر على أنه تم إرجاعه، أقوم بإنشاء استعلام SQL لوضع علامة على المنتج على أنه تم إرجاعه في قاعدة البيانات)

لذلك أفعل هذا بشكل مبسط للغاية:

Create objTransactionObject
Create objtableadapter (objTransactionObject)
for each row in contractDS.contractrows
  if row.isreturned then
    strSQL &= "update product set instock=1 where prodid=" & row.productid & vbcrlf
 End if
next
objtableadapter.update(contractDS)
objData.ExecuteQuery(strSQL, objTransactionObject)    
if succsesfull 
  objtransactionobject.commit
else
  objtransactionobject.rollback
end if
objTran.Dispose()

وبعد ذلك أقوم بالالتزام أو التراجع اعتمادًا على ما إذا كانت الأمور تسير على ما يرام أم لا.

يحرر:لم تحل أي من الإجابات المشكلة، لكنني سأشكرك على المؤشرات الجيدة لحل المشكلات.

اختفى فجأة "SqlConnection لا يدعم المعاملات المتوازية" والآن "ينقطع" خادم SQL 4-5 مرات في اليوم، أعتقد أنه طريق مسدود يفعل ذلك ولكن ليس لدي المعرفة الصحيحة لمعرفة ذلك وأنا قصير على خبراء SQL الذين يمكنهم مراقبة هذا بالنسبة لي في الوقت الحالي.لقد قمت للتو بإعادة تشغيل خادم SQL وكل شيء يعمل مرة أخرى.1 من 10 مرات يجب علي أيضًا إعادة تشغيل الكمبيوتر.إنه يزعجني حقًا (وعملائي بالطبع).

أي شخص يعرف شخص مع جيد المعرفة في تحليل مشاكل الجمود أو مشاكل SQL الأخرى في السويد (أو في أي مكان في العالم، الناطقة باللغة الإنجليزية) مجانية في الاتصال بي.أعلم أن هذا ليس موقع اتصال ولكني أغتنم الفرصة لطرح السؤال لأنه نفدت الخيارات المتاحة لدي، وقد أمضيت 3 أيام وليالٍ في تحسين العملاء للتأكد من إغلاق الاتصالات وعدم القيام بالكثير من الأشياء الغبية هناك .بدون حظ.

هل كانت مفيدة؟

المحلول

يبدو أنك تشارك الاتصالات وتنشئ معاملات جديدة على نفس الاتصال المفتوح (هذا هو الجزء الموازي من الاستثناء الذي تراه).

يبدو أن المثال الخاص بك يدعم هذا لأنه لم يذكر كيفية حصولك على الاتصال فيه.

يجب عليك مراجعة الكود الخاص بك والتأكد من أنك تفتح اتصالاً فقط ثم تتخلص منه عند الانتهاء (وبكل الوسائل، استخدم عبارة الاستخدام للتأكد من إغلاق الاتصال)، كما يبدو وكأنك تترك واحدة مفتوحة في مكان ما.

نصائح أخرى

لا يبدو أن مشكلتك مشكلة غير عادية.عثرت Google على الكثير من النتائج عندما قمت بلصق سلسلة الخطأ في مربع الاستعلام.

عند قراءة الإجابات السابقة، يبدو أن الأمر يتعلق بتشذير المعاملات بشكل غير صحيح أو بمستوى العزل.

إلى متى تبقى الاتصالات مفتوحة؟هل لديك معاملات طويلة الأمد؟

هل تمتلك المعاملات الضمنية تم تشغيله في مكان ما، بحيث تكون هناك بعض المعاملات التي لم تكن تتوقعها؟هل قمت بفتح مراقب النشاط لمعرفة ما إذا كانت هناك أي معاملات غير متوقعة؟

هل حاولت عمل نسخة احتياطية من سجل المعاملات الخاصة بك؟قد يوضح ذلك الأمر أيضًا إذا كنت أتذكر تجربة سابقة مماثلة بشكل صحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top