Ver Mensaje Individual
  #2  
Antiguo 14-06-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Reputación: 24
kinobi Va por buen camino
Hola,

Cita:
Posteado originalmente por IcebergDelphi
Funciona bien el contador si abro solamente una vez la aplicacion pero si se abre en dos maquinas...
El problema es en si, que si habro dos veces la aplicacion o lo pruebo en dos maquinas al mismo tiempo
el contador de la segunda aplicacion atrapa el numero de la Primera aplicacion, es decir: no se actualiza y
los dos se quedan con el mismo numero correspondiente, ...
en realidad la segunda aplicación (transacción) no "atrapa el numero de la Primera aplicacion", sino que debido al aislamiento entre ambas transacciones (la de la primera y segunda aplicación), las dos ven el mismo valor para el contador, a pesar de que la primera haya modificado su valor.

Una regla a tener en cuenta: dos transacciones concurrentes tendrán la misma visión de los datos (la que tenían cuando se abrieron), a pesar de que una de ellas los modifique, mientras no se confirmen los cambios y desde la segunda se tenga un nivel de aislamiento lo suficientemente bajo (p. ej. READ COMMITTED) para poder ver estos cambios confirmados (commit).

Algunas alternativas:

1. Abrir una transacción independiente para leer y actualizar el valor del contador; mejor a tavés de un procedimiento almacenado, para que el servidor haga el trabajo, cerrando la transacción lo más rápido posible. Como podrían aparecer errores de actulización (que dos transacciones intenten modificar a la vez el contador), habría que controlar en el cliente que de producirse el mismo, se volviese a ejecutar el proceso que obtiene un nuevo valor del contador.

2. Si el valor del contador es un entero, utilizar un mecanismo que no dependa de las transacciones ... los generadores. A tener en cuenta que los generadores, al estar fuera del control transaccional, no le afecta la cancelación de los cambios aplicados (rollback), con lo que pueden aparecer huecos en la secuencia.

Podemos desarrollar más en detalle estas u otras alternativas.

Saludos.
Responder Con Cita