ORA-03113 en .NET, que significa??

|

Como es de costumbre en una de mis implantaciones tuve un poco de problemas, en un principio todo iba bien hasta que subitamente la aplicacion se comportaba de un modo extraño, como si dejara de funcionar por momentos, revisando los servicios y los logs resulta que comenzaba a dar errores como el ORA-031315: connection lost contact seguido del ORA-03114: not conected to oracle, la verdad era muy extraño por que definitivamente todas las buenas practicas se estaban siguiendo, es mas la parte del manejo de datos recaia completamente en Enterprise Library 3.1, el driver que usaba era el standar de MS con un cliente Oracle 10.2.0.3, de cierto modo parecia que por alguna razon la base de datos desconectaba a quienes estuvieran como por un timeout, pues bien buscando un poco por los foros encontramos unos parametros de la base de datos que podrian ayudarnos un poco, estos estan en el archivo sqlnet.ora y no vienen escritos por defecto:

SQLNET.EXPIRE_TIME =10
SQLNET.INBOUND_CONNECT_TIMEOUT = 300
SQLNET.SEND_TIMEOUT = 300
SQLNET.RECV_TIMEOUT = 300

Al agregarlos el DBA dijo que solo hacia falta reiniciar el listener, yo la verdad por precaucion reiniciaria el servidor...

Con esto la verdad que se estabilizo bastante, por un rato... Como dije el DBA solo reinicio el listener de la base de datos, despues de otros ORA que aparecieron un tanto erraticos como por ejemplo un ORA-01041 que algunos reportaban como un bug en la base de datos, pues despues volvio a estabilizarse con un ORA-03113: end-of-file on communication channel, y ahora que?? Pues en ese punto ya estaba un poco complicado con la gente de infraestrutura por cuanto ellos insistian en que no hay nada raro en la red, bueno suponiendo eso todo estaba aun mas complicado por cuanto uno usa el pool de conexiones por defecto en .NET y claro no puedes mas que ajustar la cadena de conexion y/o ver los contadores de rendimiento, pero si subitamente las conexiones simplemente se desconectan?? pues las opciones anteriores no son muy valiosas las verdad, pues bueno conversamos un poco, intercambiamos experiencias y todo pero nada era eficaz contra el problema, y claro como normalmente sucede solo a mi aplicacion le pasaba esto y era un hecho que para la gente que maneja la infraestrutura demostraba que algo no estaba bien en mi codigo, de cierto modo tienen razon, pero en que parte!!!

Al dia siguiente se inicio una serie de pruebas que ya estaban fuera de este tema, y fruto de estas pruebas vi la luz!! Sucedio que estaba conectado a la dichosa base de datos con un TOAD, y otra maquina igual, despues de un cierto tiempo, que no medi, TOAD tambien me dio el mismo error un ORA-03113!! y en la otra maquina tambien!! genial!! por que no era el codigo!! Y que es?? Pues parece que entre la base de datos y los clientes existen un par de routers y firewalls, uno de ellos tenia por politica cortar las conexiones a ese servidor despues de un cierto tiempo, este comportamiento ya nos habian comentado que era el mas posible, a uno de los consultores en otro proyecto ya le habia pasado y nosotros no hicimos mas que dar vueltas!!
Soluciones a esto?? Pues hay un parametro en todo sistema operativo para que las conexiones TCP usen un metodo muy conocido llamado KeepAlive, el cual envia cada cierto tiempo una señal a indicar que esta vivo y claro con esto el Firewall las tomaba como conexiones activas, no tanto pero activas al fin, o cambiar las reglas del firewall para que no corte las conexiones bajo ciertas condiciones claro, entonces resumiendo:

Si tienen un error ORA-03113 en cualquiera aplicacion, en mi caso .NET, revisen si alguien no les esta cortando las conexiones!! Prueba simple? Pongan el servidor de base de datos en el mismo switch junto con la maquina que tiene el problema y revisen que no hayan firewalls molestando por ahi, definitivamente con esto pueden probar que su aplicacion esta bien!!

Preguntas? Comentarios? Con gusto los ayudo!!

2 comments:

Unknown said...

Gracias por tu ayuda, me está pasando lo mismo con una aplicación .NET, el problema es que pasa en producción para una funcionalidad especifica de la aplicación (no es algo crítico), y no en el ambiente de desarrollo. Tu explicación aclara muy bien lo que puede estar sucediendo.
Saludos

Anonymous said...

Nice fill someone in on and this enter helped me alot in my college assignement. Gratefulness you as your information.