AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Ayuda / WLanguage / Administrar bases de datos / HFSQL / Gestión de transacciones
  • 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
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Transacciones Cliente/Servidor: Modos de aislamiento disponibles
HFSQL Client/ServerDisponible solo con este tipo de conexión
Presentació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.
Versión mínima requerida
  • Versión 19
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 27/05/2022

Señalar un error o enviar una sugerencia | Ayuda local