【问题标题】:Blocked data after transaction交易后阻塞的数据
【发布时间】:2017-10-30 17:46:49
【问题描述】:

我想对一张表(我们可以将其命名为“table1”)进行一些更新,并且由于我们的生产服务器,我想使用事务。

我写了一个这样的脚本:

BEGIN TRANSACTION T1

UPDATE table1 SET ...

SELECT * FROM table1 WHERE ...

如你所见,我忘记了提交/回滚语句。

之后,我想在此表上进行另一次选择,但出现查询超时错误。

我猜到我的事务阻塞了我的表,所以我又做了一次完全相同的事务,但这次使用了提交语句。

但我的表仍然阻塞,我不知道如何提交/回滚第一个等待事务。

我还尝试使用“COMMIT TRANSACTION T1”编写一个新查询,但我收到一条错误消息,告诉我 COMMIT 语句需要相应的 BEGIN 语句。

我该怎么做?

【问题讨论】:

    标签: sql sql-server sql-server-2008 transactions


    【解决方案1】:

    您运行第一个查询的会话仍处于活动状态。如果您通过 SSMS 运行此操作,则使用该会话从那里运行 Commit\Rollback。如果找不到,请使用 Activity Monitor 或 sp_who2 或其他类型的方法来定位会话并将其终止。

    您不能在另一个会话上修改事务。

    【讨论】:

    • 我运行了 sp_who2,它只返回了我的会话,状态为 RUNNABLE,而 BlkBy 中没有任何内容。此外,我在 SSMS 中运行了第一个事务,但我没有任何仍在运行的查询。如果我只是断开与服务器的连接,它会停止剩余的交易吗?
    • 如果表仍然阻塞,那么会话仍然存在。查询不会运行,但它会处于活动状态。查看所有 SSMS 选项卡以了解当前会话。如有疑问,请终止 SSMS(从而回滚事务)。如果这不起作用,请回到这里。
    • 好的,我只有 2 个 SMSS 选项卡处于活动状态,所以我尝试退出 SMSS。当我关闭它时,它说仍有未提交的事务并询问我是否要提交它们。我说不,我的桌子现在解锁了!谢谢!
    • 很高兴听到您再次启动并运行!
    猜你喜欢
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    • 2016-03-17
    • 2020-07-10
    • 2023-03-09
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多