تصحيح: تتلقى رسالة إعلام بخطأ "01012 أورا" عند الاتصال بقاعدة بيانات Oracle باستخدام MSDAORA


الأعراض


الاتصال بقاعدة بيانات Oracle باستخدام موفر Microsoft OLE DB ل Oracle (MSDAORA) ومن ثم إنهاء الاتصال على الملقم. عند فتح اتصال جديد لقاعدة بيانات Oracle من التطبيق الخاص بك، تتلقى رسالة خطأ استثناء ما يلي:
System.Data.OleDb.OleDbException: خطأ غير محدد
أورا-01012: لم يتم تسجيل دخولك

السبب


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

الحل


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

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

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

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

يحتوي إصدار اللغة الإنجليزية من هذا الإصلاح العاجل على سمات الملف (أو سمات الملف الأحدث) المسرودة في الجدول التالي. يتم سرد التواريخ والأوقات الخاصة بهذه الملفات بالتوقيت العالمي المتفق عليه (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
إصلاح 839801 : تتوفر الإصلاحات العاجلة ل MDAC 2.8

MDAC 2.7 SP1
إصلاح 836799 : تتوفر الإصلاحات العاجلة ل MDAC 2.7 Service Pack 1

الحالة


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

مزيد من المعلومات


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

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

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

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

    التعليمات البرمجية ل Visual Basic.NET
    Dim cn As OleDbConnection
    Dim cmd As OleDbCommand
    Dim r As OleDbDataReader
    Dim sid As String
    Dim orlcmd As String
    Dim 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 Try
    Catch ex As OleDbException
    Console.WriteLine(ex.ToString())
    End Try
    Console.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. في Oracle SQL * بالإضافة إلى ذلك، قم بتشغيل الأمر التي يتم عرضها في نافذة وحدة التحكم.
  10. اضغط على مفتاح ENTER. في إطار وحدة التحكم، ترى الاستثناء المذكور في قسم "الأعراض".

المراجع


لمزيد من المعلومات حول موفر Microsoft OLE DB ل Oracle، قم بزيارة موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:للحصول على معلومات إضافية، انقر فوق رقم المقالة التالي لعرضها في "قاعدة معارف Microsoft":
824684 وصف للمصطلحات القياسية المستخدمة في وصف تحديثات برامج Microsoft

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