Power Builder - Conexiones que se quedan activas

 
Vista:

Conexiones que se quedan activas

Publicado por Milson Cardona (613 intervenciones) el 22/07/2003 17:10:31
Un saludo especial desde COLOMBIA

Bueno señores y señoras, la duda es la siguiente:
¿alguien sabe porque cuando se presenta un error en el código de PB que interrumpe y obliga a salir de la ejecución del programa la conexión a la DB se queda activa consumiendo recursos?

este problema se me presento cuando estaba revizando un script, en una parte de él tenía una línea que me sacaba error y me obligaba a salir de programa, este problema no me importaba en ese momento porque estaba concentrado en otra cosa.....pero resulta que cuando consulte las conexiones de DB activas tenía como 20 de la aplicación que estaba ejecutando y en la que salía error..... cuando me dí cuenta que PB cada que saca error, sea cual sea la aplicación deja la conexión a la DB activa...

trabajo con PB 8.0.3 y DB Oracle 9i, conectandome con drivers nativos desde PB y el cliente de oracle que utilizo en mi máquina es el de 8i

si alguién ya detecto este problema(no importa que trabaje con otro motor de DB) y sabe a que se debe se lo agradecería bastante, porque aunque no es muy significativo siempre es bueno saber el origen de las cosas.... será que el problema es solo con oracle o también se presenta con otros motores?... ¿será que Sybase tendrá un parche para corregir el problema?..¿será problema del cliente oracle?

bueno cualquier sugerencia es bien recibida.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Conexiones que se quedan activas

Publicado por Ricardo (1957 intervenciones) el 23/07/2003 02:23:52
Hola que tal:

He notado que al levantar un broker de la base de datos en sybase y sql server pasa lo mismo, con ello descartamos que solo sea con Oracle.

Deja las conexiones activas, esto debido a que la conexion y la sesion son totalmente independientes, aunque haya forma de hacerlo por medio de la aplicacion, por lo tanto al finalizar la aplicacion abruptamente la conexion sigue activa, levantamos otra y pasa lo mismo y sigue. A ver si alguien encuentra una razon basada en argumentos tecnicos.

Saludo y suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ya tengo una teoría

Publicado por Milson Cardona (613 intervenciones) el 23/07/2003 03:52:49
Un saludo especial desde COLOMBIA

Hola Ricardo, gracias por interesarte en el tema, he estado investigando y encontré una solución al problema y una posible teoría de porque ese comportamiento de PB... que aunque extraño, talvez tenga su razón de ser (es una conclusión mía y esta sugeta a debates).

1- la teoría del por qué
al parecer cuando se produce un error de programación en PB, lo que este hace es un HALT CLOSE, esta instrucción cierra el aplicativo inmediatamente sin comprobar conexión, update, commit ni nada....es explicable, ya que SYBASE se cura en salud ¿porque? pues como cada usuario configura su conexión como quiera, commit on disconect, case sensitive, etc si PB se pone a salir de una forma elegante(desconectando la DB) es posible que se grabe información a la que se le había hecho UPDATE antes del error (por la propiedad commit on disconect en lo usuarios que así lo tengan configurado)... saliendo sin desconectar aseguran que en nada se afecta la DB por un error en el código.

la solución en el siguiente post

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

parte 2 la solución

Publicado por Milson Cardona (613 intervenciones) el 23/07/2003 03:57:56
viene del anterior post

2- la solución
un punto que refuerza mi teoría es el hecho de que PB proporcione herramientas para tratar los errores en tiempo de ejecución, como el evento SYSTEMERROR del objeto APLICATION y el mismo objeto ERROR que ya esta creado por default. diciendo de esta manera... "vea programador, le entrego la forma de tratar los errores elegantemente, así que cualquier información erronea en la DB por no hacer el rollback es responsabilidad suya"

ya esta solución la había propuesto Salvador Alanis en post anteriores (perdón si me equivoco de protagonista)

- crear una ventana donde vamos a mostrar los datos del error, sacados de las propiedades del objeto error como (error.number, error.text,error.object, error.line etc), el diseño lo dejo a su imaginación.

- en el evento SYSTEMERROR colocar el siguente script
OPEN(ventana_que_muestra_el_error)
ROLLBACK USING vble_transaccion; //desasemos cambios en la DB
DISCONNECT USING vble_transaccion; //quitamos la conexión
HALT CLOSE //ahora si interrumpimos el programa.. aqui no funciona la instrucción CLOSE

espero que sirva de algo la idea, y recuerden que las teoría son para debatir y así aprender un poco todos.... mi propuesta esta en la mesa, espero las de ustedes y sacamos conclusiones para que todos aprendamos algo hasta el momento deconocido para mí...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar