Oprava: Obdržíte chybovou zprávu "ORA-01012" při připojení k databázi Oracle pomocí MSDAORA

Překlady článku Překlady článku
ID článku: 834905 - Produkty, které se vztahují k tomuto článku.
Poznámka
Tato oprava hotfix je k dispozici jako součást balíčku kumulativní opravy hotfix. Obdržíte-li tuto opravu hotfix z odbornou, bude číslo článku uvedené v balíčku oprav hotfix 839801 MDAC 2.8 nebo 836799 MDAC 2.7 SP1. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:

MDAC 2.8
839801Oprava: Hotfix jsou k dispozici pro součásti MDAC 2.8
MDAC 2.7 SP1
836799Oprava: Hotfix jsou k dispozici pro MDAC 2.7 Service Pack 1
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Připojení k databázi Oracle pomocí zprostředkovatele Microsoft OLE DB pro Oracle (MSDAORA) a potom ukončete připojení na straně serveru. Při otevření nové připojení k databázi Oracle z aplikace zobrazí následující chybová zpráva Výjimka:
System.Data.OleDb.OleDbException: Chyby nespecifikován
ORA-01012: není přihlášen

Příčina

Při ukončení připojení k databázi Oracle na straně serveru při používání MSDAORA přerušeného připojení vrácena do fondu připojení. Kód sdružování připojení chybně spolupracuje s vlastnost ResetConnection MSDAORA. Tato vlastnost není podporována zprostředkovatelem, interpretuje sdružování kód nesprávně vynulováno připojení a připojení je jeden platný. Pokud kód klienta otevře nové připojení, může být načtena přerušeného připojení, která byla vrácena do fondu připojení. Proto zobrazit chybová zpráva uvedená v části "Příznaky".

Řešení

Informace o opravě hotfix

Společnost Microsoft nyní nabízí podporovanou opravu hotfix. Ta je však určena pouze k odstranění problému popsaného v tomto článku. Tuto opravu použijte pouze u systémů, ve kterých dochází k popsanému problému. Tato oprava hotfix může být dále testována. Pokud vás tedy uvedené potíže příliš neobtěžují, doporučujeme, abyste počkali na další aktualizaci Service Pack, která bude novou opravu hotfix obsahovat.

Potřebujete-li odstranit tento problém okamžitě, obraťte se na technickou podporu společnosti Microsoft, kde můžete tuto opravu hotfix získat. Úplný seznam telefonních čísel služeb podpory zákazníků společnosti a informace o cenách podpory naleznete na následujícím webu:
http://support.microsoft.com/contactus/?ws=support
Poznámka: Poplatky, které je třeba obvykle zaplatit za telefonní hovory, mohou být stornovány, jestliže pracovník technické podpory společnosti Microsoft zjistí, že oznámený problém lze vyřešit konkrétní aktualizací. Další dotazy a žádosti o odbornou pomoc, které se netýkají této zvláštní opravy, podléhají běžným sazbám za poskytnutí odborné pomoci.

INFORMACE O SOUBORECH

Anglická verze této opravy hotfix má následující (nebo pozdější) atributy souborů. Data a časy jednotlivých souborů jsou uvedeny ve formátu UTC (Coordinated Universal Time). Pokud zobrazíte informace o souboru, bude převedena na místní čas. Rozdíl mezi místním ČASEM a najít, použijte kartu časové pásmo v ovládacím panelu Datum a čas.
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 s aktualizací 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

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.

Další informace

Kroky pro reprodukci tohoto chování

  1. Spusťte aplikaci Visual Studio .NET.
  2. V nabídce soubor přejděte na příkaz Nový a klepněte na příkaz projekt. Zobrazí se dialogové okno Nový projekt.
  3. V části Typy projektu klepněte na položku Projekty jazyka a klepněte na tlačítko Aplikace konzoly v části šablony.
  4. V poli název zadejte aplikace a potom klepněte na tlačítko OK. Ve výchozím nastavení je vytvořen soubor Module1.vb.

    Pokud používáte Microsoft Visual C# .NET, je vytvořen soubor Class1.cs.
  5. V horní přidejte následující kód:

    Kód Microsoft Visual Basic .NET
    Imports System
    Imports System.Data.OleDb
    Kód Visual C# .NET
    using System.Data.OleDb;
  6. Přidejte následující kód hlavní procedury:

    Kódu jazyka 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()
    
    Kódu 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();
    
    Poznámka upravit připojovací řetězec podle vašeho prostředí.
  7. V nabídce vytvořit klepněte na příkaz Sestavit řešení.
  8. V nabídce Debug klepněte na tlačítko Start. Uvidíte, že příkaz je zobrazen v okně konzoly.
  9. V Oracle SQL * plus, spusťte příkaz je zobrazen v okně konzoly.
  10. Stiskněte klávesu ENTER. V okně konzoly viz výjimka, která je uvedena v "příznaky".

Odkazy

Další informace o zprostředkovatele Microsoft OLE DB pro Oracle na webu Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms810685.aspx
Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
824684Popis standardní terminologie používané při popisu aktualizací softwaru společnosti Microsoft
Produkty třetích stran, o nichž se hovoří v tomto článku, jsou vyráběny společnostmi nezávislými na společnosti Microsoft. Společnost Microsoft neposkytuje žádnou záruku (implicitně předpokládanou ani jinou) týkající se výkonu a spolehlivosti těchto produktů.

Vlastnosti

ID článku: 834905 - Poslední aktualizace: 15. listopadu 2007 - Revize: 3.6
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Data Access Components 2.8
  • Microsoft Data Access Components 2.7 Service Pack 1
Klíčová slova: 
kbmt kbhotfixserver kbqfe kbbug kbprovider kbconnectivity kbdatabase kboracle kbfix kbqfe KB834905 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:834905

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com