【问题标题】:Disable trigger hangs?禁用触发器挂起?
【发布时间】:2010-01-11 22:11:22
【问题描述】:

我需要从 ASP.NET Web 应用程序执行此操作:

Alter Table Contacts Disable Trigger All 
-- Do some stuff
Alter Table Contacts Enable Trigger All

在某些情况下,Disable Trigger 语句会挂起。我应该从哪里开始寻找导致这种情况的原因?如果我重新启动 SQL Server,它会恢复正常运行。

【问题讨论】:

    标签: sql sql-server triggers


    【解决方案1】:

    从 SSMS 中查看活动监视器以了解 为什么它会阻塞。或者您可以查看blocking_session_id 列是sys.dm_exec_requests

    我的猜测:架构更改需要对表进行架构修改锁定。任何操作(如 SELECT、UPDATE 等)都会在表上放置模式稳定性锁,阻止任何 ALTER 直到 SELECT 完成。所以禁用触发器 ALTER 被所有待处理的表访问 (SELECT) 语句阻塞。

    【讨论】:

    • 感谢您为我指明正确的方向。我使用 SQL Profiler 来查看发生了什么,你是绝对正确的。 FWIW:上面的代码在通过 LINQ to SQL IEnumerable 的循环中。如果我先执行查询并获得结果(使用 .ToList)然后遍历列表,一切都很好。
    猜你喜欢
    • 2021-03-01
    • 2013-02-09
    • 2017-07-29
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2018-05-25
    相关资源
    最近更新 更多