سؤال

وأنا أفكر في الحصول على بعض التعليمات البرمجية CLR من UDF في SQL Server 2005.

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

من الواضح لي وظيفة سيتضمن كتلة حاول اللحاق. ومع ذلك، يمكن بعض الاستثناءات (ستاكوفيرفلوو) تخطي الصيد.

هل لديها مجموعة من المبادئ التوجيهية التي يمكن أن تقضي تماما (أو تقليل) خطر قانون بلدي CLR اسقاط الخادم.

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

المحلول

والاستثناءات لم تتم معالجته لها تأثير سلبي على SQL Server ولكن كيف السلبية يعتمد على شدة الاستثناء الذي يتم طرح.

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

وهناك مقالة جيدة في مجلة MSDN التي تتحدث عن CER، وكذلك كيف يستخدم SQL خادم لهم:

http://msdn.microsoft.com/en-us/ مجلة / cc163716.aspx #

وبالإضافة إلى ذلك، وهنا لائحة من أفضل الممارسات التي تتجه بشكل خاص نحو تطوير قانون CLR ل SQL Server:

http://msdn.microsoft.com/en-us/ مكتبة / ms228970.aspx #

نصائح أخرى

وماذا رمز تفعل؟

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

سوف

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

وهكذا في معظم تلك الجمعية CLR معين سوف تحصل المعوقين، وسوف جلسات يدعو الحصول على رسائل خطأ. فمن غير المرجح للغاية أن التعليمات البرمجية CLR خلل من شأنه أن يسقط مثيل مزود خدمة بأكمله؛ إذا فعلت ذلك، أود أن أقول إن كان علة مايكروسوفت، وليس خلل في وظيفة CLR أو بروك المخزنة.

وهذه القضية من المرجح للغاية هو أن الاستثناء صافي uncaught سوف تترجم إلى رسالة الخطأ TSQL. على الأكثر، سيتم إنهاء الاتصال TSQL. معظمهم من المرجح أن يؤدي ذلك في رسالة خطأ.

وسأكون في غاية يوصي supressing قدرة الاستفسارات التي تستخدم وظائف CLR للذهاب متواز. قد تختلف المسافة المقطوعة، لكنني وجدت هذا يتخلص من بعض زملائي أخطاء محرك SQL.

http://msdn.microsoft.com/en-us/library /ms181714.aspx

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