es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

En el programa pro*C, ¿por qué no se realiza el cierre del cursor en el proceso secundario?

En resumen, en este código se realiza una conexión a una base de datos en el proceso padre y se realiza un fork cada minuto, y el proceso hijo termina con exit (0) después de realizar consultas (DECLARE-> OPEN-> FETCH-> CLOSE).
No hubo problema porque se procesó hasta FETCH. Pero si CLOSE no funciona correctamente, pronto se produce un error ORA-01000: error máximo de respuesta abierta.
Cuando lo verifiqué realmente, se creó el proceso hijo y no se cerró cuando se terminó la tarea.

Después de buscar, descubrí que era un problema porque el proceso del servicio era uno, por lo que lo resolví dividiendo la conexión a la base de datos entre el proceso padre y el proceso hijo.

Lo resolví, pero quiero conocer el principio, así que dejo una pregunta aquí.
¿Puedo saber por qué se ejecutan DECLARE, OPEN y FETCH, pero no se ejecuta CLOSE?

Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Respuesta: Parece que el problema está relacionado con la forma en que Oracle maneja las conexiones y cursores de la base de datos en un entorno multiproceso. Cuando el proceso hijo termina, debería liberar los recursos que se asignaron durante su ejecución. Sin embargo, en este caso, la instrucción CLOSE que debería liberar el cursor no se ejecutó, lo que hizo que permaneciera abierto y consumiendo recursos.

    Una posible solución es llamar explícitamente a CLOSE antes de que el proceso hijo salga, para asegurarse de que todos los recursos se liberen adecuadamente. Otra opción es utilizar un conjunto compartido de conexiones que puedan ser accedidas por varios procesos, de manera que se evite la sobrecarga de establecer una nueva conexión para cada proceso hijo.

Comments are closed.