Error:ORA-02049: timeout: distributed transaction wait

Yo había planteado este problema anteriormente. Es un job en oracle que se ejecuta cada 15 minutos y cada cierto tiempo puede ser dos días, o todos los días manda uno de los siguientes mensajes de error:
Error:ORA-03113: end-of-file on communication channel
Error:ORA-03135: connection lost contact
Error:ORA-02049: timeout: distributed transaction waiting for lock
Error:ORA-00060: deadlock detected while waiting for resource
Este job lee información de varios archivos txt y la agrega en una tabla de oracle.
Cuando uno de estos errores se dispara en un determinado archivo, éste no sube en el resto del día, hasta el día siguiente.
Si yo tomo los datos de ese archivo y lo ejecuto en la base de datos de prueba se ejecuta perfectamente y no da ningún problema. No se repite el arcchivo.
Lo que he optado por hacer es tomar los datos de esta base de datos de prueba y mandárselos al dba para que los inserte.
No soy dba y mi experiencia en oracle es mínima agradezco muchísimo tu ayuda. La DBA dice que el problema es de mi aplicación pero no se que hacer estoy desesperada.

1 respuesta

Respuesta
1
Veo que hay una transacción distribuida. ¿Lees o escirbes en otra bbdd con dblink?
Parece como si en determinado momento se perdiara la conexión con una BBDD remota.
¿La BBDD de pruebas y explotación están en la misma maquina o son maquinas diferentes?
Supongo que ya habrás descartado problema de permisos de ficheros o cosas así.
No se que quieres decir con "Cuando uno de estos errores se dispara en un determinado archivo, éste no sube en el resto del día, hasta el día siguiente."
¿Cuándo haces la prueba en la BBDD de prueba lo haces de la misma forma? ¿Con un job y leyendo el fichero?. Es importante que intentes reproducirlo lo más parecido posible.
Lo replique lo más que pude.
Lo tengo igual, pero no se me presenta el error.
Lo pude detectar es que cuando se abre el archivo de texto y la aplicación genera un error, el archivo queda abierto y al intentar leerlo nuevamente se corrompe.
El cambio que estoy haciendo es que cada vez que se presenta un error lo cierre el archivo y que si detecta que el archivo esta dañado que lo borre y espere una nuevo envío.
¿Tu consejo?
Gracias
Para darte un consejo me gustaría saber un poco más de como está montado. Lo que has hecho me parece bien como solución de urgencia pero lo suyo es saber cual es la causa que genera el error para poder solucionarlo, yo además generaría un raise o un rollback en el control de la excepción con el fin de que la sesión no bloqueara otras transacciones. Si estas realizando un transacción distribuida es posible que en producción al haber más registros y tardar más la transacción de algún tipo de timeout o bien se pierde la comunicación con la bbdd remota y al quedar la transacción a medias estén varias sesiones bloqueándose entre si. Es posible también que en producción haya más transacciones de otros procesos que tocan las mismas tablas que el job y estén bloqueándose entre si en determinados momentos, no siempre.
Otra cosa que se me ocurre que más de un proceso esté intentado abrir el mismo fichero. La verdad es muy difícil darte un solución exacta sin tener más datos.
Deberías mirar los directorios dump_dest de la BBDD y si hay una remota también para ver si hay errores que te den más pistas. En esto debería ayudarte tu DBA, aunque no lo veo muy colaborador, parezco yo más interesado en ayudarte que el o ella.
Gracias por tu ayuda.
Se encontró que el problema es la base de datos. Se va a proceder a reinstalar todo.
El resto de las aplicaciones comenzaron a dar problemas.
Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas