Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

REVISIÓN: Se recibe un mensaje de error "ORA-01012" cuando se conecta a una base de datos de Oracle utilizando MSDAORA

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 834905
Síntomas
Se conecta a una base de datos de Oracle mediante el proveedor OLE DB para Oracle (MSDAORA) y, a continuación, finaliza la conexión en el servidor. Al abrir una nueva conexión a la base de datos de Oracle desde su aplicación, recibirá el mensaje de error de excepción siguiente:
System.Data.OleDb.OleDbException: Error no especificado
ORA-01012: no ha iniciado sesión
Causa
Al finalizar la conexión a la base de datos Oracle en el servidor mientras utiliza MSDAORA, se devuelve la conexión rota a la agrupación de conexiones. El código de agrupación de conexión incorrectamente interactúa con la propiedad ResetConnection de MSDAORA. Esta propiedad no es compatible con el proveedor, el código de agrupación interpreta incorrectamente que se restablece la conexión y de que la conexión es válida. Cuando el código de cliente abre una nueva conexión, se puede recuperar la conexión rota que devolvió al grupo de conexión. Por consiguiente, recibe el mensaje de error que se menciona en la sección "Síntomas".
Solución

Información de revisiones

Hay una revisión compatible de Microsoft. Sin embargo, se diseñó para corregir el problema descrito en este artículo. Aplíquela sólo a sistemas que experimenten este problema específico. Este hotfix puede ser sometido a comprobaciones adicionales. Por tanto, si no se ve muy afectado por este problema, se recomienda que espere al próximo Service Pack que contenga este hotfix.

Para resolver este problema inmediatamente, póngase en contacto con servicios de soporte de cliente de Microsoft para obtener la revisión. Para obtener una lista completa de los números de teléfono de los servicios de soporte técnico de Microsoft e información acerca de los costos de soporte, visite el siguiente sitio Web: Nota en casos especiales, los costos derivados normalmente de las llamadas al soporte técnico pueden cancelarse si un profesional de soporte técnico de Microsoft determina que una actualización específica resolverá el problema. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con la actualización en cuestión.

Información de archivo

La versión en inglés de este hotfix tiene los atributos de archivo (o atributos de último archivo) mostrados en la siguiente tabla. Las fechas y las horas de estos archivos se muestran en hora universal coordinada (UTC). La información de los archivos se convertirá a la hora local cuando la vea. Para averiguar la diferencia entre hora UTC y la hora local, utilice la ficha zona horaria de la herramienta fecha y hora en el panel de control.
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
Service Pack 1 de MDAC 2.7
   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
Aviso
Esta revisión está disponible como parte de un paquete de hotfix acumulativos. Cuando reciba esta revisión de soporte técnico de Microsoft, el número de artículo que aparece en el paquete de hotfix será 839801 para MDAC 2.8 o 836799 para MDAC 2.7 SP1. Para obtener más información, vea el artículo siguiente en Microsoft Knowledge Base:

MDAC 2.8
839801REVISIÓN: La revisiones están disponibles para MDAC 2.8
MDAC 2.7 SP1
836799REVISIÓN: La revisiones están disponibles para MDAC 2.7 Service Pack 1
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".
Más información

Pasos para reproducir el comportamiento

  1. Inicie Microsoft Visual Studio NET..
  2. En el menú archivo , seleccione nuevo y, a continuación, haga clic en proyecto . Aparecerá el cuadro de diálogo nuevo proyecto .
  3. En Tipos de proyecto , haga clic en Proyectos de Visual Basic y, a continuación, haga clic en Aplicación de consola , bajo plantillas .
  4. En el cuadro nombre , escriba MyApp y, a continuación, haga clic en Aceptar . De forma predeterminada, se crea el archivo Module1.vb.

    Si está utilizando Microsoft Visual C#. NET, el archivo de Class1.cs se crea.
  5. Agregue el código siguiente en la parte superior:

    código de Microsoft Visual Basic .NET
    Imports SystemImports System.Data.OleDb
    código de Visual C# .NET
    using System.Data.OleDb;
  6. Agregue el código siguiente a la principal procedimiento:

    código de Visual Basic .NET
    Dim cn As OleDbConnectionDim cmd As OleDbCommandDim r As OleDbDataReaderDim sid As StringDim orlcmd As StringDim 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 TryCatch ex As OleDbException   Console.WriteLine(ex.ToString())End TryConsole.WriteLine("Press ENTER to exit...")Console.ReadLine()
    código de 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 modificar la cadena de conexión según su entorno.
  7. En el menú Generar , haga clic en Generar soluciones .
  8. En el menú Depurar , haga clic en iniciar . Verá que se muestra un comando en la ventana de consola.
  9. En Oracle SQL * Plus, ejecute el comando que se muestra en la ventana de consola.
  10. Presione ENTRAR. En la ventana de consola, verá la excepción que se menciona en la sección "Síntomas".
Referencias
Para obtener más información sobre el proveedor OLE DB para Oracle, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824684Descripción de la terminología estándar utilizada para describir las actualizaciones de software de Microsoft
Los productos de terceros que se analizan en este artículo están fabricados por compañías independientes de Microsoft. Microsoft no otorga ninguna garantía, implícita o de otro tipo, respecto al rendimiento o confiabilidad de estos productos.
OLEDB MSDAORA agrupación; interrupción sesión; Oracle; OleDbException

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 834905 - Última revisión: 11/15/2007 14:12:14 - Revisión: 3.6

Microsoft Data Access Components 2.8, Microsoft Data Access Components 2.7 Service Pack 1

  • kbmt kbhotfixserver kbqfe kbbug kbprovider kbconnectivity kbdatabase kboracle kbfix kbqfe KB834905 KbMtes
Comentarios