PARANDUS: Kuvatakse tõrketeade "ORA-01012" loomisel Oracle'i andmebaasi MSDAORA abil

Sümptomid

Loote Oracle'i andmebaasi, kasutades Microsoft OLE DB Provider for Oracle (MSDAORA) ja seejärel lõpetate serveripoolse ühenduse. Kui avate uue ühenduse Oracle'i andmebaasi rakenduse, kuvatakse erand kuvatakse järgmine tõrketeade:

System.Data.OleDb.OleDbException: Määratlemata tõrge
ORA-01012: pole sisse logitud

Põhjus

Kui lõpetate ühendus serveripoolse Oracle'i andmebaasi kasutamisel MSDAORA, tagastatakse katkenud ühendus connection pool. Ühenduse ühendamise koodi valesti suhtleb MSDAORA ResetConnection atribuut. Kui pakkuja ei toeta seda atribuuti, ühendamise koodi valesti tõlgendab seda ühenduse lähtestamine ja ühendus on kehtiv üks. Kui kliendi kood avab uue ühenduse, katkenud ühendus, tagastatud connection pool alla laadida. Seetõttu kuvatakse jaotises "Tunnused" kirjeldatud tõrketeade.

Lahendus

Kiirparanduse teave

Lasknud välja toetatava käigultparanduse on nüüd Microsoftilt saadaval. See on mõeldud üksnes käesolevas artiklis kirjeldatud probleemi lahendamiseks. Rakendage seda ainult süsteemides, kus ilmneb see konkreetne probleem. Seda käigultparandust võidakse täiendavalt testida. Seega, kui probleem teie tööd tõsiselt ei kahjusta, soovitame oodata järgmist hoolduspaketti, mis sisaldab seda kiirparandust.

Probleemi kohe lahendada, pöörduge vastava kiirparanduse hankimiseks Microsofti klienditoe. Täieliku loendi Microsofti klienditugiteenuste pakkujate telefoninumbrite ja tugiteenuste hinnateabe hankimiseks külastage järgmist Microsofti veebisaiti:

http://support.microsoft.com/contactus/?ws=supportMärkus. Erijuhtudel võib kulud, mis tekivad teatud tugiteenuse telefonikõnede maksumus tühistada, kui Microsofti tugiteenusepakkuja leiab, et mõni konkreetne värskendus lahendab teie probleemi. Tavaline tugiteenuste kohaldatakse täiendavat tugiteenust vajavatele küsimustele ning probleemidele, mis pole lahendatavad konkreetse värskenduse installimisega.

Failiteave

Sellel kiirparanduse ingliskeelsel versioonil on failiatribuudid (või hilisemad failiatribuudid), mis on loetletud järgmises tabelis. Kuupäevad ja kellaajad need failid jaoks on loetletud maailmaaja järgi (UTC). Faili teabe vaatamisel teisendatakse see kohalikule ajale. UTC-aja ja kohaliku aja erinevuse väljaselgitamiseks kasutage juhtpaneeli tööriista kuupäev ja kellaaeg vahekaarti ajavöönd .

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

See kiirparandus on saadaval kumulatiivne käigultparanduste paketi osana. Kui saate selle kiirparanduse Microsoft Product Support Services, on artikli number, mis on loetletud selle kiirparanduspaketi 839801 MDAC 2.8 või 836799 MDAC 2.7 hoolduspaketi SP1. Lisateabe saamiseks lugege Microsofti teabebaasi (Knowledge Base) järgmist artiklit:



MDAC 2.8

839801 FIX: Kiirparandused on saadaval MDAC 2.8

MDAC 2.7 HOOLDUSPAKETI SP1

836799 FIX: Kiirparandused on saadaval MDAC 2.7 hoolduspaketi Service Pack 1

Olek

Microsoft on kinnitanud, et see probleem esineb jaotises "Kehtib järgmiste toodete kohta" loetletud Microsofti toodetel.

Lisateabe saamiseks

Sellise käitumise taasesilekutsumise juhised

  1. Käivitage Microsoft Visual Studio .NET.

  2. Osutage menüü fail
    Uusja seejärel klõpsake projekti. Kuvatakse dialoogiboks Uus projekt .

  3. Alusel Projekti tüübid, klõpsake nuppu Visual Basic projektidja seejärel klõpsake nuppu Console Applicationalusel Mallid.

  4. Tippige väljale nimi
    MyApp, ja seejärel klõpsake nuppu OK. Vaikimisi luuakse fail Module1.vb.

    Kui kasutate Microsoft Visual C# .NET, Class1.cs faili ei looda.

  5. Lisage järgmine kood ülaosas.

    Microsoft Visual Basic .net-i kood

    Imports System
    Imports System.Data.OleDb

    Visual C# .NET kood

    using System.Data.OleDb;
  6. Peamisedprotseduuri lisage järgmine kood:

    Visual Basic .net-i kood

    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 kood

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

    Märkus. Muutke ühendusstring vastavalt teie keskkonnas.

  7. Klõpsake menüü ehitadaLahenduse luua.

  8. Klõpsake menüü silumine
    Käivitada. Näete, et konsooli aknas kuvatakse käsu.

  9. Oracle SQL * Plus, käivitage käsk konsooli aknas kuvatud.

  10. Vajutage sisestusklahvi (ENTER). Konsooli aknas kuvatakse jaotises "Tunnused" kirjeldatud tarkvaraveaga erand.

Viited

Microsoft OLE DB pakkuja Oracle kohta lisateabe saamiseks külastage järgmist Microsoft Developer Networki (MSDN) veebisaiti:

http://msdn2.microsoft.com/en-us/library/ms810685.aspxLisateabe saamiseks klõpsake Microsofti teabebaasi (Knowledge Base) artikli kuvamiseks järgmist artiklinumbrit:

824684 Microsofti tarkvaravärskenduste iseloomustamiseks kasutatavate standardterminite kirjeldus

See artikkel käsitleb kolmandate poolte poolt valmistatud tooteid, kes pole Microsoftiga seotud. Microsoft ei garanteeri, mingit kaudset ega jõudlusele ega töökindlusele nende toodete.

Kas vajate veel abi?

Täiendage oma oskusi
Tutvuge koolitusmaterjalidega
Kasutage uusi funktsioone enne teisi
Liitu Microsofti Insideri programmis osalejad

Kas sellest teabest oli abi?

Täname tagasiside eest!

Täname tagasiside eest! Tundub, et võiksime teid kokku viia ühega meie Office'i tugiagentidest, kes aitab teil probleemi lahendada.

×