2010-10-28 32 views

Respuesta

7

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).

+3

¡Y necesitas un machete o una escopeta para deshacerte de él! ... Hombre, me encanta I.T. trabajo. 80) – Keng

Cuestiones relacionadas