【发布时间】:2010-10-28 13:39:07
【问题描述】:
我偶然发现zombie transaction 在SqlTransaction 代码中被提及。那么,什么是僵尸交易?
【问题讨论】:
我偶然发现zombie transaction 在SqlTransaction 代码中被提及。那么,什么是僵尸交易?
【问题讨论】:
僵尸事务是无法提交(由于不可恢复的错误)但仍处于打开状态的事务。
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返回一条记录;最外面的没有)。
【讨论】: