Bỏ qua để tới nội dung chính
Đăng nhập với Microsoft
Đăng nhập hoặc tạo một tài khoản.
Xin chào,
Chọn một tài khoản khác.
Bạn có nhiều tài khoản
Chọn tài khoản bạn muốn đăng nhập.

Triệu chứng

Bạn kết nối với cơ sở dữ liệu Oracle bằng cách sử dụng các Microsoft OLE DB Provider cho Oracle (MSDAORA), và sau đó bạn sẽ kết nối phía máy chủ. Khi bạn mở kết nối mới vào cơ sở dữ liệu Oracle từ ứng dụng của bạn, bạn nhận được thông báo lỗi ngoại lệ sau:

System.Data.OleDb.OleDbException: Lỗi không xác định
ORA-01012: không đăng nhập

Nguyên nhân

Khi bạn kết nối cơ sở dữ liệu Oracle phía máy chủ trong khi sử dụng MSDAORA, kết nối bị hỏng được trả lại vào kết nối. Kết nối pooling mã sai tương tác với thuộc tính ResetConnection của MSDAORA. Khi thuộc tính này không được hỗ trợ bởi nhà cung cấp, mã pooling sai coi kết nối lại và kết nối là một giá trị. Khi khách hàng mã mở kết nối mới, kết nối bị hỏng quay trở lại nhóm kết nối có thể được truy cập. Do đó, bạn nhận được thông báo lỗi được đề cập trong phần "Triệu chứng".

Giải pháp

Thông tin về cập nhật nóng

Microsoft hiện đã cung cấp bản cập nhật nóng được hỗ trợ. Tuy nhiên, nó là nhằm khắc phục chỉ sự cố được mô tả trong bài viết này. Áp dụng cho các hệ thống đang gặp sự cố cụ thể này. Hotfix này có thể được kiểm tra thêm. Vì vậy, nếu bạn không bị ảnh hưởng bởi sự cố này, chúng tôi khuyến nghị bạn đợi gói dịch vụ tiếp theo có chứa hotfix này.

Để giải quyết vấn đề này ngay lập tức, hãy liên hệ với dịch vụ hỗ trợ khách hàng Microsoft để lấy hotfix. Để biết danh sách đầy đủ số điện thoại Dịch vụ hỗ trợ khách hàng của Microsoft và thông tin về chi phí hỗ trợ, ghé thăm Web site sau của Microsoft:

http://support.microsoft.com/contactus/?ws=supportLưu ý Trong trường hợp đặc biệt, chi phí thường phát sinh cho cuộc gọi hỗ trợ có thể bị hủy bỏ nếu chuyên viên hỗ trợ Microsoft xác định rằng một Cập Nhật cụ thể sẽ giải quyết vấn đề của bạn. Chi phí hỗ trợ thông thường sẽ áp dụng cho các vấn đề không phù hợp với bản Cập Nhật cụ thể trong câu hỏi và câu hỏi hỗ trợ bổ sung.

Thông tin về tệp

Phiên bản tiếng Anh của cập nhật nóng này có các thuộc tính tệp (hoặc thuộc tính tệp mới hơn) được liệt kê trong bảng sau. Ngày và giờ của các tệp này được liệt kê theo Giờ Quốc tế Phối hợp (UTC). Khi bạn xem thông tin về tệp, ngày và giờ được chuyển đổi thành giờ địa phương. Để tìm sự khác nhau giữa UTC và giờ địa phương, sử dụng tab Múi giờ trong công cụ Ngày và Giờ trong Pa-nen Điều khiển.

Icrosoft (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

Hotfix này có sẵn như là một phần của gói hotfix tích luỹ. Khi bạn nhận được hotfix này từ dịch vụ hỗ trợ sản phẩm của Microsoft, số bài viết được liệt kê trong gói hotfix sẽ 839801 cho MDAC 2.8 hoặc 836799 cho MDAC 2,7 SP1. Để biết thêm thông tin, hãy xem bài viết sau trong cơ sở kiến thức Microsoft:



MDAC 2.8

Khắc phục sự cố 839801 : hotfix có sẵn để MDAC 2.8

MDAC 2,7 SP1

Khắc phục sự cố 836799 : hotfix có MDAC 2,7 gói dịch vụ 1

Trạng thái

Microsoft đã xác nhận rằng đây là sự cố trong sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".

Thông tin

Các bước để tái tạo hiện tượng

  1. Bắt đầu Microsoft Visual Studio .NET.

  2. Trên menu tệp , trỏ đến
    Mới, và sau đó bấm dự án. Hộp thoại Dự án mới sẽ xuất hiện.

  3. Trong Các loại dự án, nhấp vào Visual Basic dự ánrồi sau đó bấm Bảng điều khiển ứng dụngtrong mẫu.

  4. Trong hộp tên , nhập
    MyApp, và sau đó bấm OK. Theo mặc định, tệp Module1.vb được tạo ra.

    Nếu bạn đang sử dụng Microsoft Visual C# .NET, Class1.cs tệp được tạo ra.

  5. Thêm mã sau ở đầu:

    Microsoft Visual Basic .NET mã

    Imports System
    Imports System.Data.OleDb

    Visual C# .NET mã

    using System.Data.OleDb;
  6. Thêm mã sau vào trình chính:

    Visual Basic .NET mã

    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 mã

    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();

    Lưu ý Sửa đổi chuỗi kết nối theo môi trường của bạn.

  7. Trên menu Xây dựng, bấm Tạo Giải pháp.

  8. Trên các gỡ lỗi trình đơn, nhấp vào
    Bắt đầu. Bạn thấy một lệnh được hiển thị trong cửa sổ bảng điều khiển.

  9. Trong Oracle SQL * Plus, chạy lệnh được hiển thị trong cửa sổ bảng điều khiển.

  10. Nhấn ENTER. Trong cửa sổ bảng điều khiển, bạn thấy ngoại lệ được đề cập trong phần "Triệu chứng".

Tham khảo

Để biết thêm thông tin về các Microsoft OLE DB Provider Oracle, ghé thăm Web site sau của Microsoft Developer Network (MSDN):

http://msdn2.microsoft.com/en-us/library/ms810685.aspxĐể biết thêm thông tin, hãy bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức Microsoft:

824684 mô tả thuật ngữ chuẩn được sử dụng để miêu tả các bản cập nhật phần mềm Microsoft

Các sản phẩm của bên thứ ba mà bài viết này thảo luận do các công ty độc lập với Microsoft sản xuất. Microsoft không bảo hành, ngụ ý hay nói cách khác, về hiệu suất hoặc độ tin cậy của những sản phẩm này.

Bạn cần thêm trợ giúp?

Bạn muốn xem các tùy chọn khác?

Khám phá các lợi ích của gói đăng ký, xem qua các khóa đào tạo, tìm hiểu cách bảo mật thiết bị của bạn và hơn thế nữa.

Cộng đồng giúp bạn đặt và trả lời các câu hỏi, cung cấp phản hồi và lắng nghe ý kiến từ các chuyên gia có kiến thức phong phú.

Thông tin này có hữu ích không?

Bạn hài lòng đến đâu với chất lượng dịch thuật?
Điều gì ảnh hưởng đến trải nghiệm của bạn?
Khi nhấn gửi, phản hồi của bạn sẽ được sử dụng để cải thiện các sản phẩm và dịch vụ của Microsoft. Người quản trị CNTT của bạn sẽ có thể thu thập dữ liệu này. Điều khoản về quyền riêng tư.

Cảm ơn phản hồi của bạn!

×