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 error
ORA-01012: tidak masukPenyebab
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.8MEMPERBAIKI 839801 : perbaikan terbaru tersedia untuk MDAC 2.8 MDAC 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
-
Mulai Microsoft Visual Studio .NET.
-
Pada File menu, arahkan ke
Baru, dan kemudian klik Project. Kotak dialog Proyek Baru akan muncul. -
Di bawah Jenis proyek, klik Proyek Visual Basic, dan kemudian klik Aplikasi konsolpada pola dasar.
-
Di kotak nama , ketik
MyApp, dan kemudian klik OK. Secara asali, berkas Module1.vb dibuat. Jika Anda menggunakan Microsoft Visual C# .NET, dibuat berkas Class1.cs. -
Tambahkan kode berikut di atas:
Kode Microsoft Visual Basic .NETImports System
Imports System.Data.OleDbVisual C# .NET kode
using System.Data.OleDb;
-
Tambahkan kode berikut untuk prosedur utama:
Kode Visual Basic .NETDim 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 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.
-
Membangun menu, klik Membangun solusi.
-
Pada Debug menu, klik
Mulai. Anda akan melihat bahwa perintah yang ditampilkan di jendela konsol. -
Dalam Oracle SQL * Plus, jalankan perintah yang ditampilkan di jendela konsol.
-
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 Microsoft Produk 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.