2010-10-28 3 views

답변

7

좀비 트랜잭션은 (복구 할 수없는 오류로 인해) 커밋 할 수 없지만 여전히 열려있는 트랜잭션입니다.

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 

여기서 두 번째 INSERT은 트랜잭션 좀비를 렌더링합니다.

더 이상 쓸 수 없으며 롤백해야하지만 범위는 여전히 읽을 수 있습니다 (가장 안쪽의 SELECT은 레코드를 반환하고 가장 바깥 쪽은 그렇지 않습니다).

+3

그리고 너는 그것을 없애기 위해 벌레 나 산탄 총이 필요해! ... 이봐, 나는 나 사랑해. 작업. 80) – Keng