Popravak: Primite poruku o pogrešci "ORA 01012" kada se povežete s bazu podataka programa Oracle pomoću MSDAORA

Simptomi

Povezati bazu podataka programa Oracle korištenjem Microsoft OLE DB davatelja za Oracle (MSDAORA), a zatim prekinuti vezu na strani poslužitelja. Kada otvorite novu vezu u bazu podataka programa Oracle iz vaše aplikacije, dobivate sljedeću poruku iznimke:

System.Data.OleDb.OleDbException: Nedefinirana pogreška
ORA-01012: nije prijavljen

Uzrok

Kada završiti veze Oracle bazom podataka na strani poslužitelja tijekom korištenja MSDAORA prekinutih veza je vraćena grupe aplikacija veze. Šifra okupljanja veza nepravilno interakciju sa svojstvom ResetConnection MSDAORA. Kada davatelj ne podržava ovo svojstvo, šifru okupljanja neispravno tumači da veza vrati i je li veza valjana jedan. Kada klijent Šifra otvara novu vezu, prekinute veze koja je vraćena veze grupe aplikacija može dohvatiti. Stoga ćete primiti poruku o pogrešci koje se spominju u odjeljku "Simptomi".

Razlučivost

Informacije o hitnim popravkom

Podržani hitni popravak sada je dostupna iz Microsoft. No on je namijenjen samo ispravku problema opisanog u ovom članku. Primijenite ga samo na sustave u kojima se pojavljuje upravo taj problem. Taj hitni popravak možda dodatno testirati. Stoga, ako vam se ne uzrokuje taj problem, preporučujemo da pričekate sljedeći servisni paket koji sadrži taj hitni popravak.

Da biste odmah riješili taj problem, obratite se Microsoftovoj službi korisničke podrške da biste nabavili hitni popravak. Potpun popis brojeva telefona službe podrške za Microsoftove kupca i informacije o troškovima podrške potražite na Microsoftovu Web-mjestu:

http://support.microsoft.com/contactus/?ws=supportNapomena U posebnim slučajevima možda biti otkazana troškove koji su službe za podršku pozive ako Microsoft podržava Professional utvrdi da određeno ažuriranje riješiti problem. Uobičajeni podršku troškove će se primijeniti na dodatna pitanja i probleme koji kvalifikujete za određeno ažuriranje u pitanju.

Informacije o datoteci

Engleska verzija ovog hitnog popravka ima atribute datoteka (ili novije atribute datoteka) koji su popisani u sljedećoj tablici. Datumi i vrijeme za te datoteke navedene su u koordiniranom univerzalnom vremenu (UTC). Kada pregledavate informacije o datoteci, pretvara se u lokalnom vremenu. Da biste saznali razliku između UTC i lokalnog vremena, koristite karticu vremenske Zone u alatu datum i vrijeme na upravljačkoj ploči.

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

Ovaj hitni popravak dostupan je kao dio kumulativne hitnim popravkom. Kada primite ovaj hitni popravak iz službi podrške, broj članka koji je naveden u hitnim popravkom bit će 839801 MDAC 2.8 ili 836799 MDAC 2.7 SP1. Dodatne informacije potražite u sljedećem članku u Microsoftovoj bazi znanja:



MDAC 2.8

POPRAVAK 839801 : hitnih popravaka dostupne su za MDAC 2.8

MDAC 2.7 SP1

POPRAVAK 836799 : hitnih popravaka dostupne su za MDAC 2.7 Service Pack 1

Status

Microsoft je potvrdio da se taj problem pojavljuje u Microsoftovim proizvodima navedenima u odjeljku "Odnosi se na".

Više informacija

Koraci za ponavljanje postupka ponašanje

  1. Pokrenite Microsoft Visual Studio .NET.

  2. Na izborniku datoteka pokažite na
    Novo, a zatim projekt. Pojavljuje se dijaloški okvir Novi projekt .

  3. Pod Vrste projekta, kliknite Visual Basic projektia zatim Aplikacije konzolepod Predlošci.

  4. U okvir naziv upišite
    MyApp, a zatim kliknite u redu. Po zadanom, stvara se datoteka Module1.vb.

    Ako koristite Microsoft Visual C# .NET, stvara se datoteka Class1.cs.

  5. Na vrhu dodajte sljedeći kôd:

    Šifra Microsoft Visual Basic .NET

    Imports System
    Imports System.Data.OleDb

    Šifru Visual C# .NET

    using System.Data.OleDb;
  6. Glavniproceduru dodajte sljedeći kôd:

    Šifru 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()

    Šifru Visual C# .NET

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

    Napomena Izmijenite niz veze prema vašem okruženju.

  7. Na izborniku izgraditi pritisnite Izgraditi rješenje.

  8. Na izborniku Traži pogreške kliknite
    Pokretanje. Pogledajte naredba je prikazan u prozor konzole.

  9. U Oracle SQL * Plus, pokrenite naredbu koja je prikazana u prozor konzole.

  10. Pritisnite tipku ENTER. U prozor konzole vidjeti iznimke koje se spominju u odjeljku "Simptomi".

Reference

Dodatne informacije o Microsoft OLE DB davatelja za Oracle posjetite sljedeće Microsoft Developer Network (MSDN) Web-mjesto:

http://msdn2.microsoft.com/en-us/library/ms810685.aspxZa dodatne informacije kliknite sljedeći broj članka u Microsoftovoj bazi znanja:

824684 opis standardne terminologije koja se koristi za opisivanje Microsoftovih softverskih ažuriranja

Proizvodi drugih proizvođača koji se opisuje u ovom članku proizvedeni su u tvrtkama neovisnima o Microsoft. Microsoft ne daje ni izričita ni implicirana, vezana uz performanse ili pouzdanost tih proizvoda.

Potrebna vam je dodatna pomoć?

Proširite svoje vještine
Istražite osposobljavanje
Prvi koristite nove značajke
Pridružite se Microsoft Insidere

Jesu li ove informacije bile korisne?

Hvala vam na povratnim informacijama!

×