Symptomer
Du kobler deg til en Oracle-database ved hjelp av Microsoft OLE DB-leverandør for Oracle (MSDAORA), og deretter avslutter du tilkoblingen på serversiden. Når du åpner en ny tilkobling til Oracle-databasen fra programmet, får du følgende unntaksfeilmelding:
Obs!
System.Data.OleDb.OleDbException: Uspesifisert feil
ORA-01012: ikke logget på
Årsak
Når du avslutter tilkoblingen til Oracle-databasen på serversiden mens du bruker MSDAORA, returneres den brutte tilkoblingen til tilkoblingsutvalget. Tilkoblingsgruppekoden samhandler feilaktig med ResetConnection-egenskapen for MSDAORA. Når denne egenskapen ikke støttes av leverandøren, tolker utvalget feilaktig at tilkoblingen er tilbakestilt, og at tilkoblingen er gyldig. Når klientkoden åpner en ny tilkobling, kan den brutte tilkoblingen som ble returnert til tilkoblingsutvalget, bli hentet. Derfor får du feilmeldingen som er nevnt i delen «Symptomer».
Oppløsning
Informasjon om hurtigreparasjoner
En støttet hurtigreparasjon er nå tilgjengelig fra Microsoft. Den er imidlertid bare ment å løse problemet som beskrives i denne artikkelen. Bruk det bare på systemer som har dette bestemte problemet. Denne hurtigreparasjonen kan underkastes ytterligere testing. Derfor anbefaler vi at du venter på neste oppdateringspakke som inneholder denne hurtigreparasjonen, hvis du ikke opplever dette problemet.
Hvis du vil løse dette problemet umiddelbart, kontakter du Microsoft Kundestøtte for å få hurtigreparasjonen. Du finner en fullstendig liste over telefonnumre til Microsoft kundestøtte og informasjon om støttekostnader på følgende Microsoft-webområde:
http://support.microsoft.com/contactus/?ws=support I spesielle tilfeller kan kostnader som vanligvis påløper for kundestøttesamtaler, bli avbrutt hvis en Microsoft Kundestøtte-representant finner ut at en bestemt oppdatering vil løse problemet. De vanlige støttekostnadene gjelder for flere kundestøttespørsmål og problemer som ikke kvalifiserer for den aktuelle oppdateringen.
Filinformasjon
Den engelske versjonen av denne hurtigreparasjonen har filattributtene (eller nyere filattributter) som er oppført i tabellen nedenfor. Datoene og klokkeslettene for disse filene er oppført i Coordinated Universal Time (UTC). Når du viser filinformasjonen, konverteres den til lokal tid. Hvis du vil finne forskjellen mellom UTC og lokal tid, bruker du Tidssone-fanen i verktøyet for dato og klokkeslett i Kontrollpanel.
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
Denne hurtigreparasjonen er tilgjengelig som en del av en kumulativ hurtigreparasjonspakke. Når du mottar denne hurtigreparasjonen fra Microsoft Kundestøtte, blir artikkelnummeret som er oppført i hurtigreparasjonspakken, 839801 for MDAC 2.8 eller 836799 for MDAC 2.7 SP1. Du finner mer informasjon i følgende artikkel i Microsoft Knowledge Base:
MDAC 2.8
839801 LØSNING: Hurtigreparasjoner er tilgjengelige for MDAC 2.8
MDAC 2.7 SP1
836799 LØSNING: Hurtigreparasjoner er tilgjengelige for MDAC 2.7 Service Pack 1
Status
Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen «Gjelder for».
Mer informasjon
Trinn for å reprodusere virkemåten
Start Microsoft Visual Studio .NET.
Pek på
Ny, og klikk deretter Prosjekt. Dialogboksen Nytt prosjekt vises.Klikk Visual Basic-prosjekter under Prosjekttyper, og klikk deretter Konsollprogramunder Maler.
I Navn-boksen skriver du inn
MyApp, og klikk deretter OK. Den Module1.vb filen opprettes som standard.Hvis du bruker Microsoft Visual C# .NET, opprettes den Class1.cs filen.
Legg til følgende kode øverst:
Microsoft Visual Basic .NET-kode
Imports System Imports System.Data.OleDbVisual C# .NET-kode
using System.Data.OleDb;Legg til følgende kode i hovedprosedyren:
Visual Basic .NET-kode
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-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();Obs! Endre tilkoblingsstrengen i henhold til miljøet.
Klikk Byggløsning på Build-menyen.
På Feilsøking-menyen klikker du
Start. Du ser at en kommando vises i konsollvinduet.I Oracle SQL*Plus kjører du kommandoen som vises i konsollvinduet.
Trykk ENTER. I konsollvinduet ser du unntaket som er nevnt i «Symptomer»-delen.
Kilder
Hvis du vil ha mer informasjon om Microsoft OLE DB-leverandør for Oracle, kan du gå til følgende nettsted for Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms810685.aspx Hvis du vil ha mer informasjon, kan du lese følgende artikkel i Microsoft Knowledge Base:
824684 Beskrivelse av standardterminologien som brukes til å beskrive Microsoft-programvareoppdateringer
Tredjepartsproduktene som beskrives i denne artikkelen, er utviklet av firmaer som er uavhengige av Microsoft. Microsoft gir ingen garantier, indirekte eller på andre måter, når det gjelder ytelsen eller påliteligheten til disse produktene.