ข้ามไปที่เนื้อหาหลัก
การสนับสนุน
ลงชื่อเข้าใช้
ลงชื่อเข้าใช้ด้วย Microsoft
ลงชื่อเข้าใช้หรือสร้างบัญชี
สวัสดี
เลือกบัญชีอื่น
คุณมีหลายบัญชี
เลือกบัญชีที่คุณต้องการลงชื่อเข้าใช้

อาการ

คุณเชื่อมต่อกับฐานข้อมูล 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.8

MDAC 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 System
    Imports System.Data.OleDb

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

    รหัสแสดงผลของ 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 ไมโครซอฟท์ไม่รับประกัน ทั้งโดยนัย หรืออย่างอื่น ใด เกี่ยวกับประสิทธิภาพหรือความน่าเชื่อถือของผลิตภัณฑ์เหล่านี้

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

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

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

ชุมชนช่วยให้คุณถามและตอบคําถาม ให้คําติชม และรับฟังจากผู้เชี่ยวชาญที่มีความรู้มากมาย

ข้อมูลนี้เป็นประโยชน์หรือไม่

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

ขอบคุณสำหรับคำติชมของคุณ!

×