Ver Mensaje Individual
  #6  
Antiguo 07-04-2008
Avatar de brunoweb
brunoweb brunoweb is offline
Registrado
 
Registrado: jun 2006
Ubicación: Buenos Aires
Posts: 2
Reputación: 0
brunoweb Va por buen camino
¿Qué significa que "solo abres la transacción cuando se inicia la aplicación"?
Tené en cuenta que las transacciones debes cerrarlas tan pronto como puedas desde que fueron abiertas. Estando en un ámbito de trabajo monousuario puedes trabajar tranquilo, como lo venías haciendo, pero cuando los accesos son múltiples a la base de datos, se hace imperioso que la duración de las transacciones sea de apenas segundos.

Si este es el problema que tenés, abrir la transacción al iniciar y en forma automática sin ser necesaria y esperando que el usuario la cierre, entonces es muy probable que se dén estos infames deadlocks. Las soluciones o paleativos son muchos y variados.

Tendrías que dar algunos datos más, por ejemplo, con qué componente de acceso a datos estás trabajando. Yo tuve el problema de los deadlocks y lo resolví trabajando sobre las propiedades del IB_Transaction de IBObjects. Leyendo por ahí y allá, encontré que la mejor configuración de este componente es:

- Isolation=tiCommited
- RecVersion=False
- LockWait=True
- ServeAutoCommit=True

Esta última propiedad solo se puede establecer en True si la aplicación está accediendo desde otra pc en la red, ya que si te encuentras en la misma pc donde está la base de datos, el componente arroja error automáticamente.

También fíjate mucho en los triggers que si realizas una inserción/modificación simultánea desde dos terminales que dispare un trigger que toque la misma tabla y el mismo registro (la misma clave primaria), como puede ser un trigger de actualización de stock, el deadlock solo puede evitarse con la combinación de propiedades antes mencionada.

Bueno, espero haber ayudado, sino guíanos un poco más porque quizás entendí mal el problema.


Saludos.
Responder Con Cita