أورا-03113:نهاية الملف على قناة الاتصال بعد فترة طويلة من عدم النشاط في تطبيق ASP.Net

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

سؤال

لدي تطبيق ASP.Net 2.0 متوازن التحميل (لا يستخدم حالة الجلسة) على IIS5 يعمل مرة أخرى على خادم Oracle 10g واحد، باستخدام الإصدار 10.1.0.301 من برامج تشغيل ODAC/ODP.Net.بعد فترة طويلة من عدم النشاط (بضع ساعات)، سيطرح التطبيق، بشكل عشوائي على ما يبدو، استثناء Oracle:

استثناء:أورا-03113:نهاية الملف على قناة الاتصال على oracle.dataaccess.client.oraclexception.handleerrorhelper (int32 errcode ، oracleconnection conn ، intptr opserrctx ، opoSqlValctx* popoSqlvalctx ، comfort src ، string) at oracle.dataacte. requery ، boolean fillrequest ، commandbehavior proacion) at oracle.dataaccess.client.oraclecommand.system.data.idbcommand.executereader ()

...ينتهي جزء Oracle من المكدس هنا...

نحن نقوم بإنشاء اتصالات جديدة عند كل طلب، ونجعل الفتح والإغلاق ملفوفين في محاولة/التقاط/أخيرًا لضمان إغلاق الاتصال بشكل صحيح، ويتم تغليف الأمر برمته في كتلة استخدام (OracleConnection yadayada) {...}.لا تظهر هذه المشكلة مرتبطة بإعادة تشغيل تطبيق ASP.Net بعد إيقافه بسبب عدم النشاط.

لا يزال يتعين علينا إعادة إنتاج المشكلة بأنفسنا.خواطر، صلوات، مساعدة؟


أكثر: بعد التحقق من قسم تكنولوجيا المعلومات، لم يتم تعيين جدار الحماية لقطع الاتصالات بين تلك الخوادم.

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

المحلول

أورا-03113:نهاية الملف على قناة الاتصال

هل تتيح لك قاعدة البيانات معرفة أن اتصال الشبكة لم يعد موجودًا.قد يكون هذا بسبب:

  1. مشكلة في الشبكة - اتصال خاطئ، أو مشكلة في جدار الحماية
  2. توقفت عملية الخادم في قاعدة البيانات التي تخدمك بشكل غير متوقع.

ل 1) (جدار الحماية) ابحث في tahiti.Oracle.com عن SQLNET.EXPIRE_TIME.هذه معلمة sqlnet.ora التي سترسل بانتظام حزمة شبكة على فترات زمنية قابلة للتكوين، أي:سيؤدي ضبط هذا إلى جعل جدار الحماية يعتقد أن الاتصال حي.

ل 1) (شبكة) تحدث إلى مسؤول الشبكة لديك (قد يكون الاتصال غير موثوق به)

ل 2) التحقق من alert.log للأخطاء.إذا فشلت عملية الخادم ستكون هناك رسالة خطأ.سيتم أيضًا كتابة ملف تتبع لتمكين الدعم من التعرف على المشكلة.ستشير رسالة الخطأ إلى ملف التتبع.

يمكن رفع مشكلات الدعم على metalink.Oracle.com مع معرف خدمة العملاء المناسب (CSI)

نصائح أخرى

يضيف التحقق من صحة الاتصال = صحيح إلى سلسلة الاتصال الخاصة بك.

ينظر الى هذه المدونة للعثور على المزيد حول.

تفاصيل:بعد OracleConnection.Close() لا يتم إنهاء اتصال قاعدة البيانات الحقيقية.يتم إعادة كائن الاتصال إلى تجمع الاتصال.استخدام تجمع الاتصال ضمني بواسطة ODP.NET.إذا قمت بإنشاء اتصال جديد، فستحصل على أحد التجمعات.إذا كان هذا الاتصال "مفتوحًا بعد"، فإن أسلوب OracleConnection.Open() لا يقوم بالفعل بإنشاء اتصال جديد.إذا انقطع الاتصال الحقيقي (لأي سبب من الأسباب)، فستفشل عند التحديد أو التحديث أو الإدراج أو الحذف أولاً.

باستخدام التحقق من صحة الاتصال، يتم التحقق من صحة الاتصال الحقيقي بطريقة Open().

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

نهاية الملف على قناة الاتصال:

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

الحل التحقق من قاعدة البيانات إذا كانت قيد التشغيل في ARCHIVELOG أو NOARCHIVELOG

للتحقق من الاستخدام

select log_mode from v$database;

إذا كان على ARCHIVELOG حاول أن تتحول إلى NOARCHIVELOG

باستخدام sqlplus

  • جبل بدء التشغيل
  • تغيير قاعدة البيانات noarchivelog؛
  • تغيير قاعدة البيانات المفتوحة؛

إذا كان يعمل لهذا الغرض

بعد ذلك ، يمكنك ضبط منطقة الفلاشية الخاصة بك ، من المحتمل أن تكون منطقة الفلاشية الخاصة بك ممتلئة -> ثم بعد التأكيد ARCHIVELOG

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

بعد تصحيح مشكلة المساحة، اختفت رسالة الخطأ هذه بالتحديد.

يمكنك تجربة اختراق التسجيل هذا:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DeadGWDetectDefault"=dword:00000001
"KeepAliveTime"=dword:00120000

إذا نجحت، فقط استمر في زيادة KeepAliveTime.تم ضبطه حاليًا لمدة دقيقتين.

المقالة المذكورة سابقا جيدة. http://forums.Oracle.com/forums/thread.jspa?threadID=191750 (بقدر ما يذهب)

إذا لم يكن هذا شيئًا يتم تشغيله بشكل متكرر (لا تفعل ذلك على صفحتك الرئيسية)، فيمكنك إيقاف تشغيل تجمع الاتصالات.

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

يعد التجميع أمرًا جيدًا في بعض المواقف، ولكن على حساب زيادة التعقيد حول العبارة الأولى لكل اتصال.

إذا كان أسلوب معالجة الأخطاء جيدًا جدًا، فلماذا لا يجعلونه خيارًا لـ ODP للتعامل معه نيابةً عنا ؟؟؟؟

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