Ispravka: Dobijate poruku o grešci „ORA-01012”, kada se povežete sa Oracle bazom podataka pomoću MSDAORA

Simptomi

Povežete sa Oracle bazom podataka, koristeći Microsoft OLE DB dobavljač za Oracle (MSDAORA), a zatim dovršite veza na strani servera. Kada otvorite novu vezu sa Oracle bazom podataka iz aplikacije, dobijate sledeću poruku o grešci izuzetak:

System.Data.OleDb.OleDbException: Neodređena greška
ORA-01012: niste prijavljeni

Uzrok

Kada dovršite vezu sa Oracle bazom podataka na serveru dok koristite MSDAORA, prekinula se veza se vraća u bazen za povezivanje. Šifru za rezervisani prostor veze nepravilno komunicira sa svojstvom " ResetConnection " od MSDAORA. Kada dobavljač ne podržava ovo svojstvo, rezervisani prostor šifru pogrešno tumači veza je ponovo uspostavljena, i da je veza važeća. Kada šifru klijenta otvara novu vezu, moguće je da je preuzeti slomljenih veza koje je vratio na vezu bazen. Zbog toga, dobijate poruku o grešci koja je pomenuta u odeljku „Simptomi”.

Rezolucija

Informacije o prilagodbenom popravku

Podržana hitna ispravka sada je dostupna od korporacije Microsoft. Međutim, to je namenjena za ispravljanje samo problem koji je opisan u ovom članku. Primenite je samo na sisteme sa ovim određenim problemom. Ova hitna ispravka možda će se dodatno testirati. Zbog toga, ako niste ozbiljno ugroženi ovaj problem, preporučujemo da sačekate sledeći servisni paket koji sadrži ovu zakrpu.

Da biste odmah riješili taj problem, obratite se Microsoft službi korisničke podrške da biste nabavili hitni popravak. Za kompletnu listu brojeva telefona Microsoft službi korisničke podrške i informacije o cijenama podrške, potražite na sledećoj Microsoft Web lokaciji:

http://support.microsoft.com/contactus/?ws=supportNapomena U posebnim slučajevima, troškovi koji se naplaćuju za pozive podrške mogu biti ukinuti ako stručnjak Microsoft podrške utvrdi da će određena ispravka rešiti problem. Uobičajeni troškovi podrške važiće za dodatnu podršku pitanja i probleme koji nisu direktno povezani sa datom ispravkom.

Informacije o datoteci

Verzija ove hitne ispravke na engleskom jeziku ima atribute datoteke (ili novije atribute datoteke) koji su navedeni u tabeli. Datumi i vremena ovih datoteka navedeni su u koordiniranom univerzalnom vremenu (UTC). Kada pregledate informacije o datoteci, to je pretvaraju u lokalno vrijeme. Da biste saznali razliku između UTC i lokalnog vremena, koristite karticu " Vremenska zona " u alatki "Datum i vreme" na kontrolnoj tabli.

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 servisni paket 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

Ova hitna ispravka je dostupna u sklopu paketa vrućih Kumulativna zakrpa. Kada primite ovaj prilagodbeni popravak od servisima za podršku Microsoft proizvoda, broj članka koji je naveden u obliku paketa će biti 839801 za MDAC 2.8 ili 836799 za MDAC 2.7 SP1. Za više informacija, pogledajte sledeći članak u Microsoft bazi znanja:



MDAC 2.8

839801 popraviti: hitnih ispravki dostupnih za MDAC 2.8

MDAC 2.7 SP1

836799 popraviti: hitnih ispravki dostupnih za MDAC 2.7 sa servisnim paketom 1

Status

Microsoft je potvrdio da je ovo problem kod Microsoft proizvoda koji su navedeni u odeljku „Odnosi se na”.

Više informacija

Koraci koji reprodukuju ponašanje

  1. Pokrenite Microsoft Visual Studio .NET.

  2. U meniju datoteka postavite pokazivač na stavku
    Nju, a zatim izaberite stavku projekat. Pojavljuje se dijaloški okvir Novi projekat .

  3. U okviru Tipovi projekataizaberite stavku Visual Basic projekti, a zatim izaberite Aplikacije konzolepod Predlošci.

  4. U polje " ime ", upišite
    Moja aplikacija, a zatim kliknite na dugme u redu. Po podrazumevanoj vrednosti, kreira se datoteka Module1.vb.

    Ako koristite Microsoft Visual C# .NET, Class1.cs datoteka je kreirana.

  5. Dodajte sledeći kôd na vrhu:

    Microsoft Visual Basic .NET Šifra

    Imports System
    Imports System.Data.OleDb

    Visual C# .NET Šifra

    using System.Data.OleDb;
  6. Dodajte sledeći kod glavnogproceduru:

    Visual Basic .NET Šifra

    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 Šifra

    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 Izmenite niska veze prema svom okruženju.

  7. U meniju izgradi kliknite Izgradi rešenje.

  8. U padajućem meniju za otklanjanje grešaka , izaberite stavku
    Start. Vidite da komanda je prikazana u prozoru konzole.

  9. U Oracle SQL * Plus, pokrenite komandu koja je prikazana u prozoru konzole.

  10. Pritisnite taster ENTER. U prozoru konzole, vidite izuzetak koji se spominje u odjeljku „Simptomi”.

Reference

Za više informacija o Microsoft OLE DB dobavljača za Oracle, posetite sledeću Microsoft Developer Network (MSDN) Web lokaciju:

http://msdn2.microsoft.com/en-us/library/ms810685.aspxZa dodatne informacije, kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

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

Proizvođača proizvoda u ovom članku proizvedeni su od strane preduzeća koja su nezavisna od korporacije Microsoft. Microsoft ne daje garanciju, podrazumevanu ili neku drugu, u pogledu performansi ili pouzdanosti ovih proizvoda.

Potrebna vam je dodatna pomoć?

Unapredite veštine
Istražite obuku
Prvi nabavite nove funkcije
Pridružite se Microsoft insajdere

Da li su vam ove informacije koristile?

Koliko ste zadovoljni kvalitetom prevoda?

Šta je uticalo na vaše iskustvo?

Imate li dodatne povratne informacije? (Opcionalno)

Hvala vam na povratnim informacijama!

×