visual studio odp net manageddataaccess framework for example dataaccess data 11g oracle oracle10g odp.net oracleexception

studio - oracle dataaccess dll 2.112 2.0 download



ORA-03113: final de archivo en el canal de comunicación después de una larga inactividad en la aplicación ASP.Net (7)

Tengo una aplicación ASP.Net 2.0 con carga equilibrada (sin usar el estado de sesión) en IIS5 que se ejecuta en un único servidor Oracle 10g, utilizando la versión 10.1.0.301 de los controladores ODAC / ODP.Net. Después de un largo período de inactividad (unas pocas horas), la aplicación, aparentemente al azar, lanzará una excepción de Oracle:

Excepción: ORA-03113: fin de archivo en el canal de comunicación en Oracle.DataAccess.Client.OracleException.HandleErrorHelper (Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx, Object src, String procedure) en Oracle.DataAccess.Client .OracleCommand.ExecuteReader (Boolean requery, Boolean fillRequest, Comportamiento CommandBehavior) en Oracle.DataAccess.Client.OracleCommand.System.Data.IDbCommand.ExecuteReader ()

... La porción de Oracle de la pila termina aquí ...

Estamos creando nuevas conexiones en cada solicitud, abrimos y cerramos try / catch / finally para asegurar el correcto cierre de la conexión, y todo se envuelve en un bloque using (OracleConnection yadayada) {...}. Este problema no aparece vinculado al reinicio de la aplicación ASP.Net después de ser desactivado por inactividad.

Aún tenemos que reproducir el problema nosotros mismos. Pensamientos, oraciones, ayuda?

Más: comprobado con TI, el firewall no está configurado para eliminar las conexiones entre esos servidores.


Verifique que no haya un firewall que esté terminando la conexión después de cierto período de tiempo (esta fue la causa de un problema similar que tuvimos)


El artículo mencionado anteriormente es bueno. http://forums.oracle.com/forums/thread.jspa?threadID=191750 (hasta donde llega)

Si esto no es algo que se ejecuta con frecuencia (no lo haga en su página de inicio), puede desactivar la agrupación de conexiones.

Hay otro "gotcha" que no se menciona en el artículo. Si lo primero que intenta hacer con la conexión es llamar a un procedimiento almacenado, ODP hará HANG !!!! No recibirá una condición de error para administrar, ¡solo HANG de un calibre completo! La única forma de solucionarlo es desactivar la agrupación de conexiones. Una vez que hicimos eso, todos los problemas desaparecieron.

La puesta en común es buena en algunas situaciones, pero a costa de una mayor complejidad en torno a la primera declaración de cada conexión.

Si el enfoque de manejo de errores es tan bueno, ¿por qué no lo hacen una opción para que ODP lo maneje por nosotros?


Agregar validar conexión = verdadero a su cadena de conexión.

Mira este blog para obtener más información.

DETALLES: Después de OracleConnection.Close (), la conexión de la base de datos real no finaliza. El objeto de conexión se vuelve a poner en el grupo de conexiones. El uso del conjunto de conexiones está implícito en ODP.NET. Si creas una nueva conexión, obtienes una del grupo. Si esta conexión está "abierta", el método OracleConnection.Open () realmente no crea una nueva conexión. Si la conexión real se rompe (por algún motivo) se produce un error al seleccionar, actualizar, insertar o eliminar primero.

Con Validate Connection, la conexión real se valida en el método Open ().


Puede probar este hack de registro:

[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters] "DeadGWDetectDefault"=dword:00000001 "KeepAliveTime"=dword:00120000

Si funciona, simplemente siga aumentando KeepAliveTime . Actualmente está configurado para 2 minutos.


fin de archivo en el canal de comunicación:

Uno de los motivos de este error se debe a que la base de datos no puede escribir el registro cuando está en la etapa de apertura;

Solución: compruebe la base de datos si se ejecuta en ARCHIVELOG o NOARCHIVELOG

para verificar el uso

select log_mode from v$database;

si está en ARCHIVELOG intente cambiar a NOARCHIVELOG

usando sqlplus

  • montaje de inicio
  • alterar la base de datos noarchivelog;
  • alterar la base de datos abierta;

si funciona para esto

Entonces puede ajustar su área de recuperación de flash, es posible que su área de recuperación de flash esté llena -> luego de confirmar que su área de recuperación de flash tiene el espacio, puede alterar su base de datos en el ARCHIVELOG


Este mensaje de error puede aparecer en los registros de la aplicación cuando el problema real es que el servidor de la base de datos Oracle se quedó sin espacio.

Después de corregir el problema de espacio, este mensaje de error en particular desapareció.


ORA-03113: fin de archivo en el canal de comunicación

Es la base de datos que le informa que la conexión de red ya no existe. Esto podría ser porque:

  1. Un problema de red: conexión defectuosa o problema del cortafuegos
  2. El proceso del servidor en la base de datos que lo está atendiendo murió inesperadamente.

Para 1) (firewall) busque tahiti.oracle.com para SQLNET.EXPIRE_TIME. Este es un parámetro sqlnet.ora que enviará regularmente un paquete de red a un intervalo configurable, es decir: si configura esto, el firewall creerá que la conexión está activa.

Para 1) (red) hable con su administrador de red

Para 2) Verifique el error de alert.log, si el proceso del servidor falló habrá un mensaje de error aquí y un archivo de rastreo se habrá escrito para permitir que el soporte identifique el problema. El mensaje de error hará referencia al archivo de rastreo.

Los problemas de soporte pueden plantearse en metalink.oracle.com con un Identificador de Servicio al Cliente (CSI) adecuado