FIX: يمكنك تلقي رسالة خطأ "ORA 01012" عند الاتصال بقاعدة بيانات أوراكل باستخدام MSDAORA

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

اضغط هنا لرابط المقالة باللغة الانجليزية834905
الأعراض
الاتصال بقاعدة بيانات أوراكل باستخدام موفر Microsoft OLE DB لـ Oracle (MSDAORA) ثم إنهاء الاتصال على جانب الملقم. عند فتح اتصال جديد إلى قاعدة بيانات Oracle من التطبيق الخاص بك تظهر رسالة خطأ استثناء التالية:
System.Data.OleDb.OleDbException: خطأ غير محدد
01012 ORA: لم يتم تسجيل الدخول
السبب
عند إنهاء الاتصال بقاعدة بيانات Oracle على جانب الملقم أثناء استخدام MSDAORA يتم إرجاع قطع الاتصال إلى تجمع الاتصال ". يتفاعل رمز تجمع الاتصال بشكل غير صحيح مع الخاصية ResetConnection MSDAORA. عند هذه الخاصية غير معتمدة من قبل الموفر ، يفسر رمز تجمع إعادة تعيين الاتصال ومن الاتصال واحد صحيح بشكل غير صحيح. قد يمكن استرداد قطع الاتصال التي تم إرجاعها إلى تجمّع الاتصال عند فتح رمز عميل اتصال جديد. ولذلك، تظهر رسالة الخطأ المذكورة في قسم "الأعراض".
الحل

معلومات الإصلاح العاجل

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

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

معلومات الملف

يحتوي إصدار اللغة الإنجليزية من هذا الإصلاح العاجل سمات الملف (أو أحدث منها) المسردة في الجدول التالي. يتم سرد التواريخ والأوقات الخاصة بهذه الملفات في "حسب التوقيت العالمي" (UTC). عندما تقوم بعرض معلومات الملف، يتم تحويلها إلى التوقيت المحلي. لمعرفة الفرق بين التوقيت العالمي (UTC) والتوقيت المحلي، استخدم علامة التبويب المنطقة الزمنية في أداة التاريخ والوقت في "لوحة التحكم".
Microsoft Data Access Components (MDAC) 2.8
   Date         Time   Version         Size     File name   ---------------------------------------------------------   10-Mar-2004  04:22  2.80.1036.0     225,280  Msdaora.dll   10-Mar-2004  04:22  2000.85.1036.0   24,576  Odbcbcp.dll   10-Mar-2004  04:21  2.80.1036.0     442,368  Oledb32.dll   10-Mar-2004  04:21  2000.85.1036.0  401,408  Sqlsrv32.dll
MDAC 2.7 Service Pack 1
   Date         Time   Version         Size     File name   ---------------------------------------------------------   10-Mar-2004  02:19  2000.81.9046.0   61,440  Dbnetlib.dll   10-Mar-2004  02:20  2.71.9046.0     221,184  Msdaora.dll   10-Mar-2004  02:15  2.71.9046.0     126,976  Msdart.dll   10-Mar-2004  02:15  3.520.9046.0    204,800  Odbc32.dll   10-Mar-2004  02:20  2000.81.9046.0   24,576  Odbcbcp.dll   10-Mar-2004  02:20  3.520.9046.0     98,304  Odbccp32.dll   10-Mar-2004  02:16  2.71.9046.0     417,792  Oledb32.dll   10-Mar-2004  02:19  2000.81.9046.0  471,040  Sqloledb.dll   10-Mar-2004  02:19  2000.81.9046.0  385,024  Sqlsrv32.dll
ملاحظة
هذا الإصلاح العاجل متوفرًا كجزء من حزمة الإصلاحات الجديدة التراكمية. عندما تتلقى هذا الإصلاح العاجل من خدمات دعم منتجات Microsoft سيتم رقم المقالة التالي الذي تم سرده في حزمة الإصلاحات الجديدة 839801 لـ MDAC 2.8 أو 836799 لـ MDAC 2.7 المزود بحزمة الخدمة SP1. لمزيد من المعلومات، راجع المقالة التالية في "قاعدة المعارف لـ Microsoft:

MDAC 2.8
839801FIX: الإصلاحات العاجلة تتوفر MDAC 2.8
MDAC 2.7 SP1
836799FIX: الإصلاحات العاجلة تتوفر حزمة الخدمة Service Pack 1 الخاصة بـ MDAC 2.7
تصريح
أقرت Microsoft أن هذه مشكلة في منتجات Microsoft المسردة في قسم "تنطبق على".
معلومات أخرى

خطوات إعادة إنشاء السلوك

  1. بدء تشغيل Microsoft Visual Studio .NET.
  2. من القائمة ملف، أشر إلى جديد ثم انقر فوق المشروع. يظهر مربع الحوار مشروع جديد.
  3. ضمن أنواع Project ، انقر فوق مشاريع Visual Basic ثم انقر فوق تطبيق وحدة التحكم ضمن قوالب.
  4. في المربع الاسم، اكتب اسم التطبيق ثم انقر فوق موافق. افتراضياً، يتم إنشاء ملف Module1.vb.

    إذا كنت تستخدم Microsoft Visual C# .NET ، يتم إنشاء ملف Class1.cs.
  5. قم بإضافة التعليمة البرمجية التالية في الجزء العلوي:

    رمز Microsoft Visual Basic .NET
    Imports SystemImports System.Data.OleDb
    التعليمات البرمجية Visual C# .NET
    using System.Data.OleDb;
  6. قم بإضافة التعليمات البرمجية التالية إلى الرئيسي الإجراء:

    التعليمات البرمجية Visual Basic .NET
    Dim cn As OleDbConnectionDim cmd As OleDbCommandDim r As OleDbDataReaderDim sid As StringDim orlcmd As StringDim connString As String = "Provider=MSDAORA;DataSource=<data source>;User ID=<user name>;Password=<password>;"Try    'Create a new connection to the Oracle database by using MSDAORA.    cn = New OleDbConnection    cn.ConnectionString = connString    cn.Open()    cmd = New OleDbCommand    cmd.CommandText = "SELECT SID , SERIAL# FROM V$SESSION WHERE SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM=1)"    cmd.Connection = cn    r = cmd.ExecuteReader()    sid = ""    If (r.Read()) Then        sid = r.GetValue(0).ToString() + "," + r.GetValue(1).ToString()    End If    orlcmd = "Alter System Kill Session '" + sid + "' Immediate;"    Console.WriteLine("Open the SQL Plus window, run the following command, and then press ENTER:")    Console.WriteLine(orlcmd)    Console.ReadLine()    r.Close()    cmd.CommandText = "SELECT count(*) from TAB"    Try        'Expecting this command to fail because connection has been killed        r = cmd.ExecuteReader()    Catch orlex As OleDbException        Console.WriteLine(orlex.Message)        cmd.Dispose()        'Close the bad connection.        cn.Close()        System.Threading.Thread.Sleep(1000)        cn.ConnectionString = connString        cn.Open()        cmd = New OleDbCommand        cmd.CommandText = "SELECT count(*) FROM TAB"        cmd.Connection = cn        'This command will fail, but it will work when a new connection is used.        r = cmd.ExecuteReader()        If (r.Read()) Then            Console.WriteLine(r.GetValue(0))        End If   End TryCatch ex As OleDbException   Console.WriteLine(ex.ToString())End TryConsole.WriteLine("Press ENTER to exit...")Console.ReadLine()
    التعليمات البرمجية Visual C# .NET
    OleDbConnection cn;OleDbCommand cmd;OleDbDataReader r;String sid;String orlcmd;String connString="Provider=MSDAORA;DataSource=<data source>;User ID=<user name>;Password=<password>;";try{    //Create a connection to the Oracle database by using MSDAORA.    cn= new OleDbConnection();    cn.ConnectionString=connString;    cn.Open();    cmd=new OleDbCommand();    cmd.CommandText="SELECT SID , SERIAL# FROM V$SESSION WHERE SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM=1)";    cmd.Connection=cn;    r=cmd.ExecuteReader();    sid="";    if(r.Read())    {       sid=r.GetValue(0).ToString()+","+r.GetValue(1).ToString();    }    orlcmd="Alter System Kill Session '"+sid+"' Immediate;";    Console.WriteLine("Open the SQL Plus window, run the following command, and then press ENTER:");    Console.WriteLine(orlcmd);    Console.ReadLine();    r.Close();    cmd.CommandText="SELECT count(*) from TAB";    try    {        //Expecting this to fail because the connection is killed.        r=cmd.ExecuteReader();    }    catch(OleDbException orlex)    {        Console.WriteLine(orlex.Message);        cmd.Dispose();        //Close the bad connection.        cn.Close();        System.Threading.Thread.Sleep(1000);        cn.ConnectionString=connString;        cn.Open();        cmd=new OleDbCommand();        cmd.CommandText="SELECT count(*) FROM TAB";        cmd.Connection=cn;        //This command will fail, but it will work when a new connection is used.        r=cmd.ExecuteReader();        if(r.Read())        {           Console.WriteLine(r.GetValue(0).ToString());        }    }}catch(OleDbException ex){    Console.WriteLine(ex.ToString());}Console.WriteLine("Press ENTER to exit...");Console.ReadLine();
    تعديل ملاحظة سلسلة الاتصال وفقاً البيئة الخاصة بك.
  7. في القائمة إنشاء ، انقر فوق بنية الحل.
  8. من القائمة تصحيح ، انقر فوق ابدأ. راجع عرض أمر في إطار وحدة التحكم.
  9. في SQL Oracle * بالإضافة إلى ، قم بتشغيل الأمر الذي يتم عرضه في إطار وحدة التحكم.
  10. اضغط ENTER. في إطار وحدة التحكم انظر الاستثناء المذكورة في قسم "الأعراض".
مراجع
للحصول على مزيد من المعلومات حول موفر Microsoft OLE DB Oracle قم بزيارة موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:للحصول على معلومات إضافية، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
824684وصف للمصطلحات القياسية المستخدمة في وصف تحديثات برامج Microsoft
منتجات الجهات الأخرى المذكورة في هذه المقالة تكون تابعة لشركات مستقلة عن Microsoft. لا تقدم Microsoft أي ضمان ، ضمنيًا أو صريحًا، بخصوص أداء أو ثبات النظام "من هذه المنتجات.
OLEDB MSDAORA تجمع الاتصالات; جلسة إنهاء العمل; Oracle; OleDbException

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 834905 - آخر مراجعة: 11/15/2007 14:12:14 - المراجعة: 3.6

Microsoft Data Access Components 2.8, Microsoft Data Access Components 2.7 Service Pack 1

  • kbmt kbhotfixserver kbqfe kbbug kbprovider kbconnectivity kbdatabase kboracle kbfix kbqfe KB834905 KbMtar
تعليقات