Accedi a Microsoft
Accedi o crea un account.
Salve,
Select a different account.
Hai più account
Scegli l'account con cui vuoi accedere.

Sintomi

Si connette a un database Oracle utilizzando il Provider Microsoft OLE DB per Oracle (MSDAORA) e quindi si termina la connessione sul lato server. Quando si apre una nuova connessione al database Oracle dall'applicazione, viene visualizzato il seguente messaggio di errore di eccezione:

OleDbException: Errore non specificato
ORA-01012: non è connesso

Causa

Quando si termina la connessione al database Oracle sul lato server durante l'utilizzo di MSDAORA, l'interruzione di una connessione viene restituito al pool di connessioni. Il codice del pool di connessione interagisce correttamente con la proprietà ResetConnection di MSDAORA. Quando questa proprietà non è supportata dal provider, il codice del pool interpreta erroneamente che la connessione è stata reimpostata, e che la connessione è valida. Quando il codice client apre una nuova connessione, l'interruzione di una connessione che è stato restituito al pool di connessioni possono essere recuperati. Di conseguenza, viene visualizzato il messaggio di errore menzionato nella sezione "Sintomi".

Risoluzione

Informazioni sull'hotfix

Un hotfix supportato è ora disponibile da Microsoft. Tuttavia è destinato esclusivamente alla risoluzione del problema descritto in questo articolo. Applicarlo solo ai sistemi in cui si verificano questo problema specifico. Questo hotfix potrebbe essere sottoposto ad ulteriori test. Pertanto, se il problema non causa gravi difficoltà, consiglia di attendere la versione successiva del Service pack contenente tale hotfix.

Per risolvere immediatamente questo problema, contattare il supporto tecnico clienti Microsoft per ottenere l'hotfix. Per un elenco completo dei numeri di telefono supporto tecnico clienti Microsoft e informazioni sui costi dell'assistenza, visitare il seguente sito Web Microsoft:

http://support.microsoft.com/contactus/?ws=supportNota: In casi particolari, le spese normalmente addebitate per le chiamate di supporto potrebbero essere annullate qualora un addetto al supporto Microsoft determina che uno specifico aggiornamento risolverà il problema. I costi di supporto normale verranno applicati per eventuali ulteriori domande e problemi che non dovessero rientrare nello specifico aggiornamento in questione.

Informazioni sui file

La versione inglese di questo hotfix presenta gli attributi di file (o attributi successivi) elencati nella tabella riportata di seguito. Le date e ore dei file sono elencate in base al formato UTC (Coordinated Universal Time Coordinated). Quando si visualizzano le informazioni sul file, viene convertito in ora locale. Per calcolare la differenza tra ora UTC e ora locale, utilizzare la scheda fuso orario nello strumento Data e ora nel Pannello di controllo.

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

Questo hotfix è disponibile come parte di un pacchetto cumulativo di hotfix. Quando si riceve questo aggiornamento rapido da Microsoft Product Support Services, il numero di articolo elencato nel pacchetto sarà 839801 per MDAC 2.8 o 836799 per MDAC 2.7 SP1. Per ulteriori informazioni, vedere il seguente articolo della Microsoft Knowledge Base:



MDAC 2.8

839801 FIX: gli aggiornamenti rapidi disponibili per MDAC 2.8

MDAC 2.7 SP1

836799 FIX: gli aggiornamenti rapidi disponibili per MDAC 2.7 Service Pack 1

Stato

Microsoft ha confermato che questo è un problema dei prodotti Microsoft elencati nella sezione "Si applica a".

Ulteriori informazioni

Procedura per riprodurre il comportamento

  1. Avviare Microsoft Visual Studio .NET.

  2. Dal menu File , scegliere
    Nuovo, quindi fare clic su progetto. Verrà visualizzata la finestra di dialogo Nuovo progetto .

  3. In Tipi progettoselezionare Progetti di Visual Basice quindi fare clic su Applicazione Consolein modelli.

  4. Nella casella nome , digitare
    MyApp, quindi scegliere OK. Per impostazione predefinita, viene creato il file Module1. vb.

    Se si utilizza Microsoft Visual C# .NET, viene creato il file Class1. cs.

  5. Aggiungere il codice seguente all'inizio:

    Codice Microsoft Visual Basic .NET

    Imports System
    Imports System.Data.OleDb

    Codice di Visual C# .NET

    using System.Data.OleDb;
  6. Aggiungere il seguente codice alla routine Main:

    Codice di 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()

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

    Nota: Modificare la stringa di connessione in base al proprio ambiente.

  7. Scegliere Genera soluzione dal menu Compila .

  8. Dal menu Debug , fare clic su
    Avviare. Viene visualizzato un comando viene visualizzato nella finestra della console.

  9. In Oracle SQL * Plus, eseguire il comando che viene visualizzato nella finestra della console.

  10. Premere INVIO. Nella finestra della console, vedere l'eccezione menzionato nella sezione "Sintomi".

Riferimenti

Per ulteriori informazioni il Provider Microsoft OLE DB per Oracle, visitare il seguente sito Web Microsoft Developer Network (MSDN):

http://msdn2.microsoft.com/en-us/library/ms810685.aspxPer ulteriori informazioni, fare clic sul numero riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:

824684 descrizione della terminologia standard utilizzata per descrivere gli aggiornamenti software Microsoft

I prodotti di terze parti descritti in questo articolo sono forniti da società indipendenti da Microsoft. Microsoft esclude ogni garanzia, implicita o esplicita, relativamente alle prestazioni o all'affidabilità di questi prodotti.

Serve aiuto?

Amplia le tue competenze
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa a Microsoft Insider

Queste informazioni sono risultate utili?

Come valuti la qualità della lingua?
Cosa ha influito sulla tua esperienza?

Grazie per il feedback!

×