Gejala

Anda menyambung ke database Oracle menggunakan Microsoft OLE DB penyedia untuk Oracle (MSDAORA), dan kemudian Anda mengakhiri sambungan di sisi server. Ketika Anda membuka sambungan baru ke Oracle database dari aplikasi Anda, Anda menerima pesan galat pengecualian berikut ini:

System.Data.OleDb.OleDbException: Unspecified errorORA-01012: tidak masuk

Penyebab

Saat Anda mengakhiri sambungan ke database Oracle di sisi server saat menggunakan MSDAORA, sambungan rusak kembali ke pool sambungan. Kode pooling sambungan salah berinteraksi dengan properti ResetConnection MSDAORA. Saat ini tidak didukung oleh penyedia, kode pooling salah menafsirkan sambungan reset, dan bahwa sambungan yang valid. Ketika klien kode membuka sambungan baru, sambungan rusak yang dikembalikan ke pool sambungan dapat diakses. Oleh karena itu, Anda menerima pesan galat yang disebutkan di bagian "gejala".

Pemecahan masalah

Informasi Hotfix

Sekarang tersedia hotfix yang didukung dari Microsoft. Namun, ini ditujukan untuk memperbaiki masalah yang dijelaskan di artikel ini. Terapkan hanya ke sistem yang mengalami masalah khusus ini. Perbaikan terbaru ini dapat menerima pengujian tambahan. Oleh karena itu, jika Anda tidak terlalu dipengaruhi oleh masalah ini, kami sarankan Anda menunggu paket layanan berikutnya yang berisi perbaikan terbaru ini.Untuk segera menyelesaikan masalah ini, hubungi layanan dukungan pelanggan Microsoft untuk mendapatkan hotfix. Untuk daftar lengkap nomor telepon layanan dukungan pelanggan Microsoft dan informasi mengenai biaya dukungan, kunjungi situs Web Microsoft berikut ini:

http://support.microsoft.com/contactus/?ws=supportCatatan Dalam kasus tertentu, biaya yang biasanya diadakan untuk panggilan dukungan mungkin dibatalkan apabila profesional dukungan Microsoft menentukan bahwa pembaruan khusus akan memecahkan masalah Anda. Biaya dukungan biasa akan berlaku untuk pertanyaan dan masalah yang tidak termasuk pada pembaruan tertentu yang dimaksud dukungan tambahan.

Informasi file

Versi bahasa Inggris dari hotfix ini memiliki atribut berkas (atau atribut berkas yang lebih baru) yang tercantum dalam tabel berikut. Tanggal dan waktu untuk berkas-berkas tersebut dicantumkan dalam Waktu Universal Terkoordinasi (UTC). Ketika Anda melihat informasi berkas, akan diubah ke waktu lokal. Untuk menemukan perbedaan antara waktu UTC dan waktu lokal, gunakan tab zona waktu di alat tanggal dan waktu di Panel kontrol.

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 

Hotfix ini tersedia sebagai bagian dari paket hotfix kumulatif. Ketika Anda menerima perbaikan terbaru ini dari layanan dukungan produk Microsoft, nomor artikel yang tercantum dalam paket hotfix akan 839801 untuk MDAC 2.8 atau 836799 untuk MDAC 2,7 SP1. Untuk informasi selengkapnya, lihat artikel berikut di Pangkalan Pengetahuan Microsoft:MDAC 2.8

MEMPERBAIKI 839801 : perbaikan terbaru tersedia untuk MDAC 2.8MDAC 2,7 SP1

MEMPERBAIKI 836799 : perbaikan terbaru tersedia untuk MDAC 2,7 Paket Layanan 1

Status

Microsoft telah memastikan bahwa ini merupakan masalah di dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk".

Informasi lebih lanjut

Langkah-langkah untuk mereproduksi perilaku

  1. Mulai Microsoft Visual Studio .NET.

  2. Pada File menu, arahkan keBaru, dan kemudian klik Project. Kotak dialog Proyek Baru akan muncul.

  3. Di bawah Jenis proyek, klik Proyek Visual Basic, dan kemudian klik Aplikasi konsolpada pola dasar.

  4. Di kotak nama , ketikMyApp, dan kemudian klik OK. Secara asali, berkas Module1.vb dibuat.Jika Anda menggunakan Microsoft Visual C# .NET, dibuat berkas Class1.cs.

  5. Tambahkan kode berikut di atas:Kode Microsoft Visual Basic .NET

    Imports SystemImports System.Data.OleDb

    Visual C# .NET kode

    using System.Data.OleDb;
  6. Tambahkan kode berikut untuk prosedur utama:Kode 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 kode

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

    Catatan Mengubah rangkaian sambungan berdasarkan lingkungan Anda.

  7. Membangun menu, klik Membangun solusi.

  8. Pada Debug menu, klikMulai. Anda akan melihat bahwa perintah yang ditampilkan di jendela konsol.

  9. Dalam Oracle SQL * Plus, jalankan perintah yang ditampilkan di jendela konsol.

  10. Tekan ENTER. Di jendela konsol, Anda akan melihat pengecualian yang disebutkan di bagian "gejala".

Referensi

Untuk informasi selengkapnya tentang Microsoft OLE DB penyedia Oracle, kunjungi situs Web Microsoft Developer Network (MSDN) berikut:

http://msdn2.microsoft.com/en-us/library/ms810685.aspxUntuk informasi tambahan, klik nomor artikel berikut ini untuk melihat artikel di Pangkalan Pengetahuan Microsoft:

824684 Deskripsi tentang terminologi standar yang digunakan untuk menjelaskan pembaruan perangkat lunak MicrosoftProduk pihak ketiga yang dibahas di artikel ini dibuat oleh perusahaan yang independen terhadap Microsoft. Microsoft tidak memberikan garansi, baik tersirat maupun tersurat, mengenai kinerja atau keandalan produk ini.

Perlu bantuan lainnya?

Ingin opsi lainnya?

Jelajahi manfaat langganan, telusuri kursus pelatihan, pelajari cara mengamankan perangkat Anda, dan banyak lagi.

Komunitas membantu Anda bertanya dan menjawab pertanyaan, memberikan umpan balik, dan mendengar dari para ahli yang memiliki pengetahuan yang luas.