Power Builder - problema bloqueos oracle

 
Vista:

problema bloqueos oracle

Publicado por samuel (61 intervenciones) el 29/12/2006 17:30:23
Hola a todos,
tengo desarrollada una aplicación en powerbuilder 8.0 atacando una base de datos Oracle 8i y tengo el problema siguiente:
en un momento de la ejecución un usuario A hace un update en una tabla X. Por razones de programacion no cierro la transacción (mediante commit o rollback) inmediatamente
despues de ejecutar el update, tiene que pulsar un botón para ejecutar un commit pero el usuario A puede dejar el programa abierto sin pulsar el botón y por lo tanto no se cierra la transacción. Si en ese momento un usuario B intenta hacer un delete en otra tabla Y que tiene por clave externa la clave primaria de la tabla X el programa se queda bloqueado.
Alguien sabe porque puede suceder esto.
Gracias de antemano
Nota: lei en este foro que al hacer un cursor FOR UPDATE sucedia algo parecido y habia que cerrar la transaccion mediante commit o rollback, pero en este caso no es un cursor FOR UPDATE el que produce el bloqueo, si no un UPDATE normal.
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:problema bloqueos oracle

Publicado por Milson Cardona (613 intervenciones) el 29/12/2006 18:47:33
Un saludo especial desde Colombia

Hola amigo..

al hacer el UPDATE en tu datawindow, ORACLE automaticamente marca las filas como listas para actualizar, es decir hace un FOR UPDATE implicito...

por este motivo te sucede los mismo que con un FOR UPDATE aunque tu no hayas ejecutado tal sentencia explicitamente...

no lo vayas a tomar a mal, pero como consejo, no debes hacer UPDATE y dejar que el usuario haga el commit cuando le venga en gana (vulgarmente hablando).
esto es una mala practica de programación, como también lo son las sentencias SQL embebidas en el código, y también los update parciales en evento que no son el GUARDAR.

te aconsejo, que solo tengas un evento donde hagas UPDATE de todos tus datawindows (generalmente el guardar), e inmediatamente despues de validar que los UPDATES están bien, hacer el COMMIT, o el ROLLBACK en el caso de que alguno de ellos falle

espero haber aportado para solucionar tu problema
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

Gracias Milson

Publicado por samuel (61 intervenciones) el 05/01/2007 13:06:18
Hola Milson,
Efectivamente era como decias un update el que producia los bloqueos.
Gracias amigo,

PD: Podrias explicar mas eso de que es mala tecnica de programación lo de usar SQL embebido: porque es mala técnica, que recomiendas utilizar en vez de el sql embebido...
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