la actualización entra en conflicto con la actualización concurrente

En este artículo, discutiremos la descripción general de la transacción, el interbloqueo y nos centraremos en los conflictos de actualización con la actualización concurrente y lo entenderemos con la ayuda de un ejemplo. Discutámoslo uno por uno.

Transacción :
Una transacción es una unidad lógica de trabajo que puede tener una o más sentencias SQL. Una transacción finaliza cuando la confirma o la revierte por completo.

Interbloqueo :
se produce un interbloqueo cuando se mantienen bloqueos exclusivos en los recursos requeridos por múltiples procesos y esos procesos no pueden continuar hasta su finalización.

Conflictos de interbloqueo y actualización con la actualización concurrente:
se produce una excepción de «conflicto de interbloqueo de actualización con actualización concurrente» cuando varias transacciones desean modificar la misma fila al mismo tiempo (o en un momento diferente antes de que la otra confirme). Solo un actualizador puede realmente cambiar la fila y confirmar. Mientras la primera transacción no se haya confirmado, la actualización en la segunda/otras transacciones esperará (indefinidamente o hasta el tiempo de espera configurado). Tan pronto como se confirme la primera transacción, la actualización en la segunda finalizará con este error. NOTA: Si, en cambio, la primera transacción se hubiera revertido, la segunda habría continuado porque la actualización realizada por la transacción 1 se revirtió.

Evitar interbloqueo :
Para evitar interbloqueo, es decir, para evitar que el bloqueo sea retenido en un recurso (Fila aquí) por múltiples procesos, firebird genera este tipo de excepción. Ahora veamos un ejemplo para entender claramente este tipo de problema de la siguiente manera.

Ejemplo:
aquí, entenderemos el concepto con la ayuda de un ejemplo. 

  • Supongamos que ya hemos creado una tabla con el nombre «Emp» en la base de datos ‘Test1.fdb’ que guarda la identificación de los empleados y el nombre de los empleados. Los datos de la tabla son los siguientes.
IDENTIFICACIÓN NOMBRE
100 Rita
20 John
3 Alberto 
  • Supongamos que tenemos 2 transacciones: Trans1 y Trans2. Trans1 comenzó en el tiempo t1 y Trans2 comenzó en el tiempo t2. Ahora ambos querían actualizar la misma fila, fila con nombre = ‘Juan’. 
  • La transacción Trans1 inició la actualización a la hora t3. Antes de que Trans1 se confirme, Transaction Trans2 intenta actualizar la misma fila que Trans1 actualizó. Entonces, Trans2 espera el estado, esperando que Trans1 se comprometa o retroceda.
  • Vea la figura de la línea de tiempo para entenderlo más claramente de la siguiente manera.
Tiempo Trans1 Trans2
t1 comienzo  
t2   comienzo
t3 Actualizar fila con nombre = John  
t4   Actualizar fila con nombre = John
t5 Comprometerse Conflicto de actualización

Nota :

  • Si se confirma Trans1 — Trans2 sale del estado de espera y mensaje de error — “punto muerto; se mostrarán los conflictos de actualización con la actualización concurrente”.
  • Si Trans1 ROLLBACK — Trans2 sale del estado de espera y puede completar la actualización en la misma fila.
  • Para verificar esto, abra 2 ventanas de Firebird ISQL Tool y ejecute Trans1 en 1 ventana y Trans2 en la otra.

  • En la ventana de arriba, en Trans1, aún no te has comprometido.
  • Después de confirmar Trans1, aparece el mensaje de error: “punto muerto; la actualización entra en conflicto con la actualización concurrente” se mostrará en la ventana de Trans2.

Para evitar este tipo de mensaje de error:
realice una reversión en la transacción Trans1 o inicie la actualización en la misma fila en Trans2 solo cuando Trsan1 se confirme.

Publicación traducida automáticamente

Artículo escrito por sameekshakhandelwal1712 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *