Ver Mensaje Individual
  #2  
Antiguo 24-06-2004
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Reputación: 22
sur-se Va por buen camino
Question Replanteamiento del problema.

Hola. Replanteo el problema que he expuesto para ver si alguien le ha ocurrido lo mismo y saber como lo ha solucionado.
Supongamos que tenemos una tabla de artículos y uno de los campos es el stock actual de cada artículo. Desde varios equipo se realizan ventas de artículos, lo que repercute en acceder a dicho campo y disminuir el stock en la cantidad vendida. Por otra parte otros ordenadores están introduciendo compras, lo que repercute en el aumento de ese campo stock para cada artículo en concreto. Básicamente esto es lo que he simulado con la prueba descrita en el post anterior. Un registro que es actualizado simultáneamente desde varios equipos. El resultado final de las actualizaciones debe dejar un valor correcto de stock. Las premisas son las mismas:
- Las transacciones deben durar poco tiempo (el tiempo del update).
- Los recursos se toman y liberarn en el mismo orden (primero se actualiza una tabla y después la otra).
- Una transacción debería esperar (hacer wait) hasta que puediese actualizar el campo correspondiente, cuando otra transacción concurrente lo liberarse.

En el caso de tener configurado la transacción como No Wait, se captura la excepción y se genera un rollback que debería deshacer todo lo hecho.

Pues bien, la prueba que he hecho es básicamente lo descrito, pero si al final se mira el valor del campo que se incrementa y decrementa, el resultado no es el correcto, aun restando (por supuesto) las veces que dió error de deadlock (que por otra parte no debería dar pues puse la opción wait en la transacción ).

Alguien habrá resuelto esta cuestión de alguna manera ¿no?.
Gracias.
Responder Con Cita