Symptom

Du kan ansluta till en Oracle-databas med hjälp av Microsoft OLE DB Provider för Oracle (MSDAORA) och sedan avslutar du anslutningen på serversidan. När du öppnar en ny anslutning till Oracle-databasen i programmet visas följande felmeddelande för undantag:

System.Data.OleDb.OleDbException: Okänt felORA-01012: inte inloggad

Orsak

När du avslutar anslutningen till Oracle-databasen på serversidan när du använder MSDAORA returneras avbrutna anslutningar till anslutningspoolen. Anslutning anslutningspoolen koden felaktigt samverkar med egenskapen ResetConnection för MSDAORA. När den här egenskapen inte stöds av providern, tolkar anslutningspoolen koden felaktigt att anslutningen återställs och att anslutningen är giltig. När klienten öppnas en ny anslutning kan bryts anslutningen som returnerades till anslutningspoolen hämtas. Därför visas felmeddelandet som nämns i avsnittet ”Symptom”.

Lösning

Information om snabbkorrigeringen

En snabbkorrigering är nu tillgänglig från Microsoft. Den är emellertid avsedd att åtgärda det problem som beskrivs i denna artikel. Använd den bara på datorer där detta problem uppstår. Snabbkorrigeringen kan komma att testas igen. Om inte störs alltför mycket av detta problem rekommenderar vi att du väntar på Nästa service pack som innehåller den här snabbkorrigeringen.Om du vill lösa problemet omedelbart kontaktar du Microsoft support för att få snabbkorrigeringen. En fullständig lista över telefonnummer till Microsoft Customer Support Services och information om supportkostnader finns på följande Microsoft-webbplats:

http://support.microsoft.com/contactus/?ws=supportObs! I särskilda fall avbryts de avgifter som är normala för supportsamtal om en supporttekniker anser att en särskild uppdatering kan lösa ditt problem. De vanliga supportkostnaderna gäller för övriga supportfrågor och problem som inte berör den särskilda uppdateringen.

Filinformation

Den engelska versionen av den här snabbkorrigeringen har de filattribut (eller senare filattribut) som visas i följande tabell. Datum och tider för dessa filer anges i UTC-tid (UTC). När du visar filinformationen konverteras den till lokal tid. Använd fliken tidszon i verktyget datum och tid på Kontrollpanelen om du vill se skillnaden mellan UTC-tid och lokal tid.

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 servicepack 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 

Den här snabbkorrigeringen är tillgänglig som en del av en kumulativ snabbkorrigering. När du får den här snabbkorrigeringen från Microsoft Product Support Services är artikelnumret som anges i paketet 839801 för MDAC 2.8 eller 836799 för MDAC 2.7 SP1. Mer information finns i följande artikel i Microsoft Knowledge Base:MDAC 2.8

839801 KORRIGERA: det finns snabbkorrigeringar för MDAC 2.8MDAC 2.7 SP1

836799 KORRIGERA: det finns snabbkorrigeringar för MDAC 2.7 Service Pack 1

Status

Microsoft har bekräftat att detta är ett problem i Microsoft-produkterna som nämns i avsnittet ”gäller”.

Mer Information

Åtgärder för att återskapa problemet

  1. Starta Microsoft Visual Studio .NET.

  2. Arkiv -menyn, peka påNyoch sedan på projekt. Dialogrutan Nytt projekt visas.

  3. Klicka på Konsolprogramunder mallarunder ProjekttyperVisual Basic-projekt.

  4. I rutan namn skriver du:MyAppoch klicka sedan på OK. Som standard skapas filen Module1.vb.Om du använder Microsoft Visual C# .NET, skapas filen Class1.cs.

  5. Lägg till följande kod överst:Kod för Microsoft Visual Basic .NET

    Imports SystemImports System.Data.OleDb

    Visual C# .NET-kod

    using System.Data.OleDb;
  6. Lägg till följande kod i Main-proceduren:Kod i 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-kod

    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! Ändra anslutningssträngen efter din miljö.

  7. Klicka på Skapa lösningBuild -menyn.

  8. Klicka på Felsök -menynStarta. Du ser att ett kommando visas i konsolfönstret.

  9. I Oracle SQL * Plus, kör du kommandot som visas i konsolfönstret.

  10. Tryck på RETUR. I konsolträdet visas de undantag som nämns i avsnittet ”Symptom”.

Referenser

Mer information om Microsoft OLE DB Provider för Oracle finns på följande Microsoft Developer Network (MSDN)-webbplats:

http://msdn2.microsoft.com/en-us/library/ms810685.aspxFör ytterligare information klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:

824684 beskrivning av standardterminologin som används för att beskriva Microsoft-programuppdateringarTredjepartsprodukter som diskuteras i denna artikel tillverkas oberoende av Microsoft. Microsoft lämnar inga garantier, implicerade eller andra, vad gäller prestanda eller tillförlitlighet hos dessa produkter.

Behöver du mer hjälp?

Vill du ha fler alternativ?

Utforska prenumerationsförmåner, bläddra bland utbildningskurser, lär dig hur du skyddar din enhet med mera.