6
Encontré accidentalmente zombie transaction
se menciona en el código SqlTransaction
. Entonces, ¿qué es la transacción zombie?¿Qué es una transacción zombie?
Encontré accidentalmente zombie transaction
se menciona en el código SqlTransaction
. Entonces, ¿qué es la transacción zombie?¿Qué es una transacción zombie?
Una transacción zombie es una transacción que no se puede confirmar (debido a un error irrecuperable) pero que aún está abierta.
CREATE TABLE mytable (id INT NOT NULL PRIMARY KEY)
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRANSACTION
INSERT
INTO mytable
VALUES (1)
INSERT
INTO mytable
VALUES (1)
COMMIT
END TRY
BEGIN CATCH
PRINT XACT_STATE()
SELECT *
FROM mytable
ROLLBACK;
END CATCH
SELECT *
FROM mytable
Aquí, el segundo INSERT
emite la zombi transacción.
Ya no se puede escribir y se debe revertir, pero aún se puede leer en su alcance (el SELECT
más interno devuelve un registro; el más externo no).
¡Y necesitas un machete o una escopeta para deshacerte de él! ... Hombre, me encanta I.T. trabajo. 80) – Keng