Salt la conținutul principal
Asistență
Conectare

Remediere: Primiți un mesaj de eroare "ORA-01012" atunci când vă conectați la o bază de date Oracle utilizând MSDAORA

Simptome

Vă conectați la o bază de date Oracle utilizând Microsoft OLE DB Provider pentru Oracle (MSDAORA) și apoi se închide conexiunea pe partea serverului. Când deschideți o nouă conexiune la baza de date Oracle din aplicația dvs., primiți următorul mesaj de eroare de excepție:

System.Data.OleDb.OleDbException: Eroare nespecificată
ORA-01012: nu log on

Cauza

Când închideți conexiunea la baza de date Oracle pe partea serverului în timpul utilizării MSDAORA, întrerupe conexiunea este returnat în rezervorul de conexiune. Codul de prevenire conexiune incorect interacționează cu proprietatea ResetConnection MSDAORA. Atunci când această proprietate nu este acceptat de către furnizorul, codul de prevenire interpretează incorect că conexiunea este resetat și că conexiunea este validă. Atunci când codul de client se deschide o conexiune nouă, întrerupe conexiunea care s-a revenit la rezervorul de conexiune pot fi regăsite. De aceea, primiți mesajul de eroare menționat în secțiunea "simptome".

Rezolvare

Informații despre remedierea rapidă

Un hotfix acceptat este acum disponibil de la Microsoft. Cu toate acestea, aceasta este scopul de a corecta numai problema descrisă în acest articol. Aplicați-o numai pe sistemele care întâmpină această problemă anume. Această remediere rapidă poate să necesite testare suplimentară. De aceea, dacă nu sunteți grav afectat de această problemă, vă recomandăm să așteptați următorul pachet service pack care conține această remediere rapidă.

Pentru a rezolva imediat problema, contactaţi serviciile de asistență pentru clienți Microsoft pentru a obține remedierea rapidă. Pentru o listă completă a numerelor de telefon ale serviciilor de asistență pentru clienți Microsoft și informații despre costurile de asistență, vizitați următorul site Web Microsoft:

http://support.microsoft.com/contactus/?ws=supportNotă În cazuri speciale, costurile implicate de obicei pentru apelurile de suport pot fi anulate dacă un specialist în asistență Microsoft stabilește că o anumită actualizare va rezolva problema. Se vor aplica costurile uzuale de asistenţă pentru întrebări suplimentare de asistenţă şi pentru probleme ce nu fac obiectul actualizării în cauză.

Informații despre fișier

Versiunea în limba engleză a acestei remedieri rapide are atributele de fişier (sau atribute de fişier mai recente) enumerate în următorul tabel. Datele şi orele acestor fişiere sunt exprimate în listă în ora universală (UTC). Când vizualizaţi informaţiile despre fișier, acesta este convertit la ora locală. Pentru a afla diferența între timpul universal și cel local, utilizați fila fusul orar din instrumentul dată și oră din panoul de Control.

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

Această remediere rapidă este disponibilă ca parte a unui pachet de remediere rapidă cumulativă. Atunci când această remediere rapidă de la serviciile de asistență pentru produse Microsoft, numărul de articol care este listat în pachetul de remediere rapidă va fi 839801 pentru MDAC 2.8 sau 836799 pentru MDAC 2.7 SP1. Pentru mai multe informații, consultați următorul articol din baza de cunoștințe Microsoft:



MDAC 2.8

839801 FIX: remedierile rapide sunt disponibile pentru MDAC 2.8

MDAC 2.7 SP1

836799 FIX: remedierile rapide sunt disponibile pentru MDAC 2.7 Service Pack 1

Stare

Microsoft a confirmat că aceasta este o problemă cu produsele Microsoft enumerate în secţiunea „Se aplică la".

Mai multe informații

Pași pentru a reproduce comportamentul

  1. Porniți Microsoft Visual Studio .NET.

  2. În meniul fișier , indicați spre
    Nou, și apoi faceți clic pe proiect. Apare caseta de dialog New Project .

  3. Sub Tipuri de proiect, Proiecte Visual Basic, și apoi faceți clic pe Console Applicationsub șabloane.

  4. În caseta nume , tastați
    AplicMea, și apoi faceți clic pe OK. În mod implicit, se creează fișierul Module1.vb.

    Dacă utilizați Microsoft Visual C# .NET, este creat fișierul Class1.cs.

  5. Adăugaţi următorul cod în partea de sus:

    Cod Microsoft Visual Basic .NET

    Imports System
    Imports System.Data.OleDb

    Visual C# .NET cod

    using System.Data.OleDb;
  6. Adăugaţi codul următor procedurii principale:

    Cod Visual Basic .NET

    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 cod

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

    Notă Modificați șirul de conexiune în funcţie de mediul dvs.

  7. În meniul de compilare , faceți clic pe Compilare soluții.

  8. În meniul de Depanare , faceți clic pe
    Porniți. Veți vedea că o comandă se afișează în fereastra consolei.

  9. În Oracle SQL * Plus, executați comanda care se afișează în fereastra consolei.

  10. Apăsaţi pe ENTER. În fereastra de consolă, vedeți excepție menționat în secțiunea "simptome".

Referințe

Pentru mai multe informații despre Microsoft OLE DB Provider pentru Oracle, vizitați următorul site Web Microsoft Developer Network (MSDN):

http://msdn2.microsoft.com/en-us/library/ms810685.aspxPentru informații suplimentare, faceți clic pe următorul număr de articol pentru a vedea articolul în baza de cunoștințe Microsoft:

824684 Descrierea terminologiei standard care este utilizat pentru a descrie actualizările de software Microsoft

Produsele terţe despre care se discută în acest articol sunt fabricate de companii independente de Microsoft. Microsoft nu garantează în niciun fel, implicit sau în alt mod, funcţionarea sau fiabilitatea acestor produse.

Aveți nevoie de ajutor suplimentar?

Extindeți-vă competențele
Explorați instruirea
Fiți primul care obține noile caracteristici
Alăturați-vă la Microsoft Insider

V-a fost de ajutor această informație?

Vă mulțumim pentru feedback!

Vă mulțumim pentru feedback! Se pare că ar fi util să luați legătura cu unul dintre agenții noștri de asistență Office.

×