อาการ

คุณเชื่อมต่อกับฐานข้อมูล Oracle โดยใช้ที่ Microsoft ให้บริการ OLE DB สำหรับ Oracle (MSDAORA), และจากนั้น คุณสามารถสิ้นสุดการเชื่อมต่อบนฝั่งเซิร์ฟเวอร์ เมื่อคุณเปิดการเชื่อมต่อใหม่ไปยังฐานข้อมูล Oracle จากแอพลิเคชันของคุณ คุณได้รับข้อความแสดงข้อผิดพลาดข้อยกเว้นต่อไปนี้:

System.Data.OleDb.OleDbException: ข้อผิดพลาดที่ไม่สามารถระบุได้ORA-01012: ไม่เข้าสู่ระบบ

สาเหตุ

เมื่อคุณสิ้นสุดการเชื่อมต่อกับฐานข้อมูล Oracle บนฝั่งเซิร์ฟเวอร์ในขณะที่ใช้ MSDAORA การเชื่อมต่อที่ใช้งานไม่ได้จะถูกส่งกลับไปยังกลุ่มสินทรัพย์เชื่อมต่อ รหัสการทำพูลเก็บการเชื่อมต่ออย่างไม่ถูกต้องโต้ตอบกับคุณสมบัติResetConnectionของ MSDAORA เมื่อคุณสมบัตินี้ไม่ได้รับการสนับสนุน โดยตัวให้บริการ รหัสการทำพูลเก็บอย่างไม่ถูกต้องตีความหมายว่า เป็นการตั้งค่าการเชื่อมต่อใหม่ และการเชื่อมต่อนั้นความถูกต้อง เมื่อรหัสไคลเอนต์เปิดการเชื่อมต่อใหม่ การเชื่อมต่อที่ใช้งานไม่ได้ที่ส่งคืนในกลุ่มการเชื่อมต่ออาจสามารถเรียกใช้ ดังนั้น คุณได้รับข้อความแสดงข้อผิดพลาดที่กล่าวถึงในส่วน "อาการ"

การแก้ปัญหา

ข้อมูลโปรแกรมแก้ไขด่วน

โปรแกรมแก้ไขด่วนจะพร้อมใช้งานได้ในขณะนี้จาก Microsoft อย่างไรก็ตาม มุ่งหวังเพื่อแก้ไขปัญหาที่อธิบายไว้ในบทความนี้เท่านั้น นำวิธีนี้ไปใช้กับระบบที่ประสบกับปัญหาที่เฉพาะเจาะจงเท่านั้น โปรแกรมแก้ไขด่วนนี้อาจได้รับการทดสอบเพิ่มเติม ดังนั้น ถ้าคุณจะไม่รุนแรงได้รับผลกระทบจากปัญหานี้ เราขอแนะนำให้ คุณรอ service pack ถัดไปที่ประกอบด้วยโปรแกรมแก้ไขด่วนนี้เมื่อต้องการแก้ไขปัญหานี้ทันที ติดต่อฝ่ายบริการสนับสนุนลูกค้าของ Microsoft เพื่อขอรับโปรแกรมแก้ไขด่วน สำหรับรายการทั้งหมดของหมายเลขโทรศัพท์บริการการสนับสนุนลูกค้าของ Microsoft และข้อมูลเกี่ยวกับค่าใช้จ่ายในการสนับสนุน โปรดเยี่ยมชมเว็บไซต์ต่อไปนี้ของ Microsoft:

http://support.microsoft.com/contactus/?ws=supportหมายเหตุ ในกรณีพิเศษ ค่าบริการที่เรียกเก็บตามปกติเมื่อโทรติดต่อฝ่ายสนับสนุนอาจจะยกเลิกได้หาก Microsoft Support Professional ตัดสินว่าโปรแกรมปรับปรุงที่เฉพาะเจาะจงจะแก้ไขปัญหาของคุณได้ ค่าใช้จ่ายในการสนับสนุนตามปกติจะใช้กับคำถามและปัญหาในการสนับสนุนเพิ่มเติมซึ่งไม่สอดคล้องตามเกณฑ์สำหรับโปรแกรมปรับปรุงเฉพาะที่เกี่ยวข้อง

ข้อมูลแฟ้ม

เวอร์ชันภาษาอังกฤษของโปรแกรมแก้ไขด่วนนี้มีแอตทริบิวต์ของแฟ้ม (หรือแอตทริบิวต์ของแฟ้มที่ใหม่กว่านี้) ซึ่งแสดงรายการไว้ในตารางต่อไปนี้ วันที่และเวลาสำหรับแฟ้มเหล่านี้จะแสดงรายการไว้ในรูปแบบเวลามาตรฐานสากล (UTC) เมื่อคุณดูข้อมูลแฟ้ม ระบบจะแปลงข้อมูลนี้เป็นเวลาท้องถิ่น เมื่อต้องการค้นหาความแตกต่างระหว่างเวลา UTC กับเวลาท้องถิ่น ใช้แท็บโซนเวลาในเครื่องมือ'วันและเวลา'ใน'แผงควบคุม'

คอมโพเนนต์การเข้าถึงข้อมูลของ Microsoft (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 
Service Pack 2.7 MDAC 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.8MDAC 2.7 SP1

836799แก้ไข: โปรแกรมแก้ไขด่วนพร้อมใช้งานสำหรับ 1 ของ Service Pack 2.7 MDAC

สถานะ

Microsoft ยืนยันว่านี่เป็นปัญหาในผลิตภัณฑ์ของ Microsoft ซึ่งแสดงไว้ในส่วน "นำไปใช้กับ"

ข้อมูลเพิ่มเติม

ขั้นตอนในการทบทวนเกิดลักษณะการทำงาน

  1. เริ่ม Microsoft Visual Studio .NET

  2. บนเมนูแฟ้มชี้ไปที่สร้างแล้ว คลิกโครงการ กล่องโต้ตอบโครงการใหม่ปรากฏขึ้น

  3. ภายใต้ชนิดโครงการโครงการ Visual Basicคลิก แล้ว คลิ กแอพลิเคชันของคอนโซลภายใต้แม่แบบ

  4. ในกล่องชื่อพิมพ์MyAppแล้ว คลิกตกลง ค่าเริ่มต้น แฟ้ม Module1.vb จะถูกสร้างขึ้นถ้าคุณกำลังใช้ Microsoft Visual C# .NET แฟ้ม Class1.cs ถูกสร้างขึ้น

  5. เพิ่มรหัสต่อไปนี้ที่ด้านบน:รหัส Microsoft Visual Basic .NET

    Imports SystemImports System.Data.OleDb

    รหัสแสดงผลของ 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()

    รหัสแสดงผลของ 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 Developer Network (MSDN) ต่อไปนี้:

http://msdn2.microsoft.com/en-us/library/ms810685.aspxสำหรับข้อมูลเพิ่มเติม คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:

824684คำอธิบายของคำศัพท์มาตรฐานที่ใช้เพื่ออธิบายปรับปรุงซอฟต์แวร์ของ Microsoftผลิตภัณฑ์ของบริษัทอื่นที่กล่าวถึงในบทความนี้ผลิตขึ้น โดยบริษัทที่ไม่ขึ้นอยู่กับ Microsoft ไมโครซอฟท์ไม่รับประกัน ทั้งโดยนัย หรืออย่างอื่น ใด เกี่ยวกับประสิทธิภาพหรือความน่าเชื่อถือของผลิตภัณฑ์เหล่านี้

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ