【问题标题】:What is zombie transaction?什么是僵尸交易?
【发布时间】:2010-10-28 13:39:07
【问题描述】:

我偶然发现zombie transactionSqlTransaction 代码中被提及。那么,什么是僵尸交易?

【问题讨论】:

    标签: sql-server transactions


    【解决方案1】:

    僵尸事务是无法提交(由于不可恢复的错误)但仍处于打开状态的事务。

    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返回一条记录;最外面的没有)。

    【讨论】:

    • 而你需要一把砍刀或霰弹枪来摆脱它!...伙计,我爱 IT。工作。 80)
    猜你喜欢
    • 2011-03-14
    • 2019-02-05
    • 2013-09-24
    • 2013-04-11
    • 2013-05-01
    • 2021-08-24
    • 1970-01-01
    • 2015-07-04
    • 2011-09-09
    相关资源
    最近更新 更多