متعددة أوامر المعاملات SQL عبر اتصالات قاعدة البيانات المختلفة

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

سؤال

أنا أستخدم إطار .NET 2.0 / 3.5 للتطبيق الخاص بي. أحتاج إلى تشغيل العديد من أوامر SQL عبر اتصالات متعددة وكل اتصال على خادم مختلف (Oracle، SQL Server). أحتاج إلى التأكد من أن هذه الأوامر هي معاملات.

على سبيل المثال: أحتاج إلى إجراء إدراج في جدول على كلا من قواعد بيانات Oracle و SQL Server، ثم ارتكابها إذا لم يتم إلقاء استثناءات. إذا كان هناك استثناء، أود التراجع عن كلا الخادمين إذا لزم الأمر.

أظن أنني سأحتاج إلى استخدام System.Transactions والمعاملات. سيتطلب ذلك أن أقوم بإعداد منسق المعاملات Microsoft Distributed (MSDTC) على خوادم قاعدة البيانات وأيضا خادم التطبيقات.

لقد بدت مرتفعة ومنخفضة ولا يمكن أن أجد أي مقالات تصف خطوة بخطوة إعداد MSDTC مع المصادقة المتبادلة (بما في ذلك تكوين إعدادات جدار الحماية وإعدادات MSDTC.) نظرت إلى وثائق Microsoft على إعداد MSDTC، ولكن يبدو بلا قيمة تماما وليس موثقة بالكامل (ما لم تجد لي مقالة MSDN جيدة حقا حول كيفية إعداده.)

هل تستخدم MSDTC الطريقة الوحيدة للحصول على عملي؟

إذا كان الأمر كذلك، كيف أن هيك أقوم بتكوينه بشكل صحيح؟

تعديل:

  • أنا أستخدم Windows Server 2003 لجميع الأجهزة.
  • لدي اثنين من خادم SQL. واحد هو SQL Server 2000 والآخر هو 2005.
  • لدي خادم Oracle واحد وهو الإصدار 11G
  • يجب أن يغير التطبيق الذي نقوم فيه في بعض الأحيان تغيير / إنشاء سجلات عبر قاعدة البيانات الثلاثة بطريقة معاملات.
  • إنها ليست مشكلة بين لوحة المفاتيح والكرسي. نقرأ المقالات عن MSDN حول كيفية إعداد كل شيء فيما يتعلق MSDTC، لكن لا يمكننا الحصول على تطبيقات DTcping وغيرها من تطبيقات الاختبار للعمل. كنا نبحث عن مقالة خطوة بخطوة تفصيل العملية. لقد صادفت وثائق MSDN حول أكثر من مناسبة "تركت" الخطوات للقيام بأشياء معينة.
هل كانت مفيدة؟

المحلول

من المحزن أن كل من الوثائق الرسمية من كلا البائعين سيسعدون أن نذكر مزود الترابط الوارد أو الآخر، لكن كلاهما يبدو أن كلاهما يكره الاعتراف بوجود عرض قاعدة بيانات الآخرين.

قد تفضل أن تحتاج إلى الوثائق خدمات أوراكل لخادم Microsoft Transaction.

  • وثائق أوراكل:
    • 10g.
    • 9i.
    • الإصدارات الأقدم موجودة ولكن يبدو أن الكثير قد تغيرت بعد 8

من ODP.NET 10.2.0.3 فصاعدا (إذا كنت قد تم تكوينها بشكل مناسب MS DTC و Aramts DLL موجودا)، تكون قادرا على استخدام System.Transactions المعاملات فقط كما لو كنت تنسيق بين قواعد بيانات SQL Server ولكن باستخدام خادم SQL وخادم Oracle. قد تكون هناك حاجة إلى Oracle 10 فصاعدا لهذا العمل إلى حد ما ببساطة خارج الصندوق.

فيما يلي دليل لاستخدام DTC من .NET 2.0 و SQL Server 2005 فصاعدا. وبعد على وجه الخصوص، يلاحظ متطلبات نظام التشغيل (التي يجب أن تكون هناك مشكلة إلى حد كبير ولكن تجدر الإشارة إليها). بالإضافة إلى ذلك، ما لم تكن كلا من قواعد البيانات والعميل على نفس الجهاز، فيجب تمكين Network DTC.

نصائح أخرى

يمكن أن تكون إجابتي غرابة بعض الشيء، لكنني سوف أوصي بك (إذا كان ذلك ممكنا تقنيا) تقييم استخدام 2 معاملتين مستقلة لكل قاعدة بيانات. قلقي بشأن المعاملات الموزعة / XA هو أداء قاعدة البيانات الإجمالية / قابلية التوسع / الكمون.

2 الروابط التي ستحاول إثبات وجهة نظري:

  1. ملاحظات مارتن فاولر: "عليك أن تولي اهتماما لترتيب ارتكابك، والحصول على تلك الأكثر أهمية في البداية. في كل الالتزام، عليك التحقق من أنها نجحت ونقرر ما يجب القيام به إذا فشل".
  2. مقابلة بشأن باي هندسة

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

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

ونحن نختتم أيضا استفساراتنا إلى وجهات النظر لتسهيل الوصول إلى تطبيقاتنا وتقارير الكريستال. لذلك بدلا من الاضطرار إلى إنشاء سلاسل اتصال متعددة في التعليمات البرمجية، نستخدم سلسلة عمومية واحدة فقط للاتصال ب DB Reporting.

هذه مشكلة الكلاسيكية الموزعة وهي ما msdtc ل. البحث عن شاشات المعاملة وبروتوكول XA للحصول على وصف أعمق لهذه الفئة المشكلة.

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

كان لي نفس المشكلة. اللازمة لجعل المعاملات الموزعة بين 2 SQL و 1 Oracle Database Server، كل هذا من تطبيق ASP.NET.

لذلك كتبت عن هذه التجربة في مدونتي، لذلك في المرة القادمة لن أضيع الوقت مرة أخرى.

التحقق من ذلك في:

MS DTC المعاملات الموزعة: Oracle 10GR2، SQL Server 2005 و Windows Server 2008 R2

نعم، ستحتاج إلى إنشاء نطاق معاملة ومزودي ADO.NET ل SQL و Oracle سيقومون بتسجيل كل اتصال معاملة واحدة موزعة، تنسيقها بواسطة MSDTC.

وثائق MSDN حول كيفية إعداد MSDTC هي تفصيلية للغاية ويغطي على وجه التحديد الأسئلة التي تسألها: تمكين استثناءات جدار الحماية لسالات DTC, تكوين الأمان للمعاملات الموزعة.

يمكنك أن تذكر أن نظام التشغيل الخاص بك يعمل، إصدار SQL Server، إصدار Oracle، نظام التشغيل الخلفي ل SQL Server (S) و Oracle (S). أنت أيضا إهمال أن تخبر أي فعلي المشكلة التي واجهتها أو رسالة الخطأ التي رأيتها. الآن، يبدو أن المشكلة تقع في مكان ما بين لوحة المفاتيح والكرسي.

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