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

StackOverflow https://stackoverflow.com/questions/83068

Pregunta

Tengo una carga equilibrada (no utilizando el estado de la Sesión) ASP.Net 2.0 aplicación en IIS 5 corriendo de vuelta a un único servidor de Oracle 10g, utilizando la versión 10.1.0.301 de la ODAC/ODP.Red de controladores.Después de un largo período de tiempo (un par de horas) de la aplicación, aparentemente al azar, va a lanzar un Oráculo de excepción:

Excepción:ORA-03113:final-de-archivo en el canal de comunicación en Oracle.DataAccess.Cliente.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Objeto de src, Cadena de procedimiento) en Oracle.DataAccess.Cliente.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior comportamiento) en Oracle.DataAccess.Cliente.OracleCommand.Sistema.De datos.IDbCommand.ExecuteReader()

...De Oracle parte de la pila se acaba aquí...

Estamos creando nuevas conexiones en cada petición, el abrir y cerrar envuelto en un try/catch/finally para garantizar la adecuada conexión de cierre, y todo está envuelto en un uso (OracleConnection yadayada) {...} bloque.Este problema no parece estar relacionada con el reinicio de la ASP.Net aplicación después de ser centrifugadas para la inactividad.

Todavía tenemos que reproducir el problema nosotros mismos.Pensamientos, oraciones, ayuda?


Más: Comprobado con ELLA, el firewall no está configurado para eliminar las conexiones entre los servidores.

¿Fue útil?

Solución

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

Es la base de datos que le permite saber que la conexión de red no es más.Esto podría ser debido a que:

  1. Un problema de red - conexión defectuosa, o firewall problema
  2. El proceso del servidor de la base de datos que es el servicio que murió de forma inesperada.

Para 1) (firewall búsqueda tahiti.oracle.com para SQLNET.EXPIRE_TIME.Este es un sqlnet.ora parámetro que se envía periódicamente un paquete de red en un intervalo configurable, es decir:ajuste esto hará que el firewall de creer que la conexión es en vivo.

Para 1) (red) hable con su administrador de red (conexión podría ser poco fiable)

2) Compruebe el alert.log para los errores.Si el servidor de error en el proceso, habrá un mensaje de error.También un archivo de traza se han escrito para habilitar el soporte para identificar el problema.El mensaje de error de referencia en el archivo de traza.

Apoyo cuestiones pueden ser planteadas en metalink.oracle.com con un adecuado Servicio de atención al Cliente Identificador (CSI)

Otros consejos

Agregar Validar la Conexión=true a la cadena de conexión.

Mira este blog para encontrar más acerca de.

DETALLES: Después De OracleConnection.Close() de la base de datos real no terminar la conexión.El objeto de conexión se vuelve a poner en conexión a la piscina.El uso de la conexión de la piscina está implícito en ODP.NET.Si crea una nueva conexión de obtener uno de la piscina.Si esta conexión es "todavía abierto" el OracleConnection.Método Open() en realidad no se crea una nueva conexión.Si la conexión real se rompe (por cualquier razón), se obtiene un error en el primer select, update, insert o delete.

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

Compruebe que no hay 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 hemos tenido)

final-de-archivo en el canal de comunicación:

Uno de los curso de este error es debido a la base de datos no escriben en el registro cuando se encuentra en la etapa de apertura;

Solución compruebe la base de datos si se está ejecutando en ARCHIVELOG o NOARCHIVELOG

para comprobar el uso de

select log_mode from v$database;

si en su ARCHIVELOG pruebe a cambiar en NOARCHIVELOG

mediante el uso de sqlplus

  • inicio de montaje
  • alterar la base de datos de noarchivelog;
  • alter database open;

si funciona para este

A continuación, puede ajustar su flashrecovery área de su, posiblemente, de que su flashrecovery zona está llena -> a continuación, después de confirmar que su flashrecovery área que tiene el espacio que usted puede modificar su base de datos en el ARCHIVELOG

Este mensaje de error puede ser lanzado en los registros de aplicación cuando el problema real es que la base de datos de oracle server acabó el espacio.

Después de corregir el problema del espacio, con este mensaje de error desapareció.

Usted podría tratar de este registro hack:

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

Si funciona, solo mantener el aumento de la KeepAliveTime.Se encuentra en la actualidad por 2 minutos.

El artículo anteriormente mencionado es buena. http://forums.oracle.com/forums/thread.jspa?threadID=191750 (tan lejos como se va)

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

Hay otro "problema" que no se menciona en el artículo.Si la primera cosa que tratamos de hacer con la conexión es llamar a un procedimiento almacenado, el PAO se CUELGA!!!!Usted no va a volver una condición de error para gestionar, sólo un agujero completo COLGAR!La única manera de solucionarlo es a su vez la agrupación de conexiones.Una vez que hicimos eso, todos los problemas que se fue.

La agrupación es buena en algunas situaciones, pero a costa de una mayor complejidad en torno a la primera instrucción de cada conexión.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top