|
|
|
|
- Presentación
- Modo de aislamiento READ UNCOMMITTED
- Principio
- Ejemplo: Gestión de existencias
- Ejemplo: Modificar un cliente
- Implementar el modo de aislamiento READ UNCOMMITTED
- Modo de aislamiento READ COMMITTED
- Principio
- Ejemplo: Gestión de existencias
- Ejemplo: Modificar un cliente
- Implementar el modo de aislamiento READ COMMITTED
- Modo de aislamiento REPEATABLE READ
- Principio
- Ejemplo: Gestión de existencias
- Ejemplo: Modificar un cliente
- Implementar el modo de aislamiento REPEATABLE READ
Transacciones Cliente/Servidor: Modos de aislamiento disponibles
Disponible solo con este tipo de conexión
El motor HFSQL propone aislar las transacciones: las modificaciones realizadas en una transacción se aíslan de las modificaciones realizadas en otras transacciones que se ejecutan al mismo tiempo, hasta que la primera se confirme. Existen varios modos de aislamiento: Esta página de ayuda presenta estos diferentes modos de aislamiento y explica cómo implementarlos. Modo de aislamiento READ UNCOMMITTED Principio Cuando un equipo inicia una transacción, los demás equipos ven los datos modificados tan pronto como se ha hecho la modificación (inserciones, actualizaciones, eliminaciones), y no solo cuando se ha confirmado la transacción. Aunque no se haya confirmado la transacción (COMMIT), los demás equipos pueden leer los nuevos datos. Si se cancela la transacción (ROLLBACK), los demás equipos leerán datos inválidos. Ejemplo: Gestión de existencias Tomemos como ejemplo un archivo PRODUCTO en el que hay 10 artículos "Art01" en existencias. - El equipo A inicia una transacción (función HTransactionStart o HTransaction). El equipo A modifica el artículo "Art01" y resta 2 de la cantidad (función HModify). La cantidad de existencias cambia a 8 pero la transacción aún no se ha confirmado.
- El equipo B usa el modo de aislamiento READ UNCOMMITTED y lee el artículo "Art01". Este equipo lee 8 artículos en existencias: el equipo A aún no ha confirmado la transacción, pero el equipo B lee la cantidad de existencias como si ya se hubiera confirmado.
- El equipo A tiene dos opciones:
- Confirmar la transacción (COMMIT). En ese caso, la cantidad en existencias sigue siendo 8.
- Cancelar la transacción (ROLLBACK). En ese caso, la cantidad en existencias pasa a 10.
- Mientras no se haya confirmado o cancelado la transacción, el equipo B ve 8 artículos, lo cual es falso si se cancela la transacción.
Ejemplo: Modificar un cliente - El equipo A modifica un registro en una transacción. En esta transacción, "Ann" cambia a "Juliet". La transacción no ha sido confirmada.
- El equipo B lee el mismo registro en modo READ UNCOMMITTED. Este equipo lee "Juliet" directamente.
Implementar el modo de aislamiento READ UNCOMMITTED Para implementar el modo de aislamiento READ UNCOMMITTED, es necesario: Modo de aislamiento READ COMMITTED Principio En este modo, mientras no se haya confirmado la transacción (COMMIT), los demás equipos leen SIEMPRE los datos iniciales, es decir, los datos tal como se encontraban antes de las modificaciones realizadas durante la transacción (inserciones, actualizaciones, eliminaciones). Las modificaciones realizadas durante la transacción solo se podrán ver cuando esta se confirme (COMMIT). Ejemplo: Gestión de existencias Tomemos como ejemplo un archivo PRODUCTO en el que hay 10 artículos "Art01" en existencias. - El equipo A inicia una transacción (función HTransactionStart o HTransaction). El equipo A modifica el artículo "Art01" y resta 2 de la cantidad (función HModify). La cantidad de existencias cambia a 8 pero la transacción aún no se ha confirmado.
- El equipo B usa el modo de aislamiento READ COMMITTED y lee el artículo "Art01". Este equipo lee 10 artículos en existencias.
- El equipo A tiene dos opciones:
- Confirmar la transacción (COMMIT). En ese caso, la cantidad en existencias pasa a 8.
- Cancelar la transacción (ROLLBACK). En ese caso, la cantidad en existencias sigue siendo 10.
- Mientras no se haya confirmado o cancelado la transacción, el equipo B ve 10 artículos, como si la cantidad no hubiera cambiado.
Ejemplo: Modificar un cliente - El equipo A modifica un registro en una transacción. En esta transacción, "Ann" cambia a "Juliet". La transacción no ha sido confirmada.
- El equipo B lee el mismo registro en modo READ COMMITTED. Este equipo lee "Ann".
Implementar el modo de aislamiento READ COMMITTED Para implementar el modo de aislamiento READ COMMITTED, es necesario: Modo de aislamiento REPEATABLE READ Principio Este modo se utiliza para necesidades específicas. En este modo, si el equipo que inició la transacción lee de nuevo la base de datos, leerá los datos tal como se encontraban al inicio de la transacción, incluso si otros equipos han confirmado transacciones que modifican dichos datos. Durante la transacción, el mismo equipo lee una "instantánea" de la base de datos tomada al inicio de la transacción, y no los datos confirmados por otros equipos. Ejemplo: Gestión de existencias Tomemos como ejemplo un archivo PRODUCTO en el que hay 10 artículos "Art01" en existencias. - Los equipos A y B utilizan el modo de aislamiento REPEATABLE READ.
- El equipo A inicia una transacción (función HTransactionStart o HTransaction). Este equipo lee el artículo "Art01" y ve que hay 10 unidades.
- El equipo B inicia una transacción (función HTransactionStart o HTransaction). Este equipo modifica el artículo "Art01" y resta 2 de la cantidad (función HModify). Luego, confirma la transacción. La cantidad de existencias cambia a 8.
- Cuando el equipo B confirma la transacción (COMMIT), el equipo A sigue leyendo 10 unidades del artículo "Art01".
- Cuando el equipo A confirme la transacción, la próxima vez que lea la cantidad de existencias verá 8 artículos. Solo cuando el equipo A haya confirmado su transacción verá el nuevo valor de las existencias.
Ejemplo: Modificar un cliente - Dos equipos A y B inician una transacción.
- En la transacción del equipo A, "Ann" cambia a "Juliet". La transacción se confirma
- El equipo B lee el mismo registro. Este equipo seguirá leyendo "Ann" hasta que haya confirmado su transacción.
Implementar el modo de aislamiento REPEATABLE READ Para implementar el modo de aislamiento REPEATABLE READ, es necesario: - Utilizar archivos HFSQL en modo Client/Server.
- Utilizar un servidor HFSQL en la versión 19 (o posterior).
- Activar el modo REPEATABLE READ en cada archivo del análisis incluido en la transacción. Esta opción está disponible en la pestaña "Detalles" de la ventana de descripción del archivo. Se requiere una modificación automática de los archivos de datos para tener en cuenta este parámetro. Atención: si esta opción está activada, el archivo no es compatible con la versión 18 y anteriores.
- Utilizar la función HTransactionIsolation con la constante hRepeatableRead.
- Utilizar sintaxis que manipulen conexiones en las funciones de gestión de transacciones (HTransactionStart, HTransaction, HTransactionEnd y HTransactionCancel).
Consejo: Para saber si el modo REPEATABLE READ está activado en un archivo de datos, utilice la propiedad RepeatableReadSupported.
Esta página también está disponible para…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|