【问题标题】:Is it possible to see what queries have been run in an uncommitted transaction?是否可以查看在未提交的事务中运行了哪些查询?
【发布时间】:2008-12-01 17:40:26
【问题描述】:

我的应用程序(使用带有 SQL Server 2000 的 SQL Native Client 的 C++)一直处于挂起状态。我相信这是因为事务在表上的某个地方未提交,并且由于打开的事务,该表上的 SELECT 查询被阻塞。

不幸的是,我真的很难确定挂起的事务在我的代码中的位置。有什么方法可以让 SQL Server 指示在未提交的事务上运行了哪些查询?

【问题讨论】:

    标签: sql-server sql-server-2000


    【解决方案1】:

    如果您有管理员 (sa) 权限,则可以运行 sp_Who 或 sp_Who2 通过 Spid 显示所有服务器活动,运行

    Exec sp_Who2 [SpidNumber]  
    

    只看你感兴趣的一个会话...

    要直接查看打开的交易,请运行

    DBCC 开放式 (T-SQL) 显示有关指定数据库中最旧的活动事务以及最旧的分布式和非分布式复制事务(如果有)的信息。仅当存在活动事务或数据库包含复制信息时才会显示结果。如果没有活动的事务,则会显示一条信息性消息。

    Syntax
    DBCC OPENTRAN 
        (    {'database_name' | database_id}
        )    [    WITH TABLERESULTS [, NO_INFOMSGS]
            ]
    

    但是,当用户会话终止时,Sql Server 应该自动回滚任何打开的事务。

    【讨论】:

    • 这让我成功了一半。我有一个 SPID,现在很可能是罪魁祸首。有没有更深入的挖掘来查看在 SPID 中执行了哪些查询?
    • 您可以尝试运行“分析器”工具,它是安装在您的工作站上的 SQL Server 客户端工具之一。它不断监控/报告服务器上运行的所有内容,并具有 spid 过滤器(以及其他)
    • DBCC INPUTBUFFER 或声明@handle binary(20) select @handle = sql_handle from master.dbo.sysprocesses where spid = 84 select * from ::fn_get_sql(@handle)
    猜你喜欢
    • 2022-11-19
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    相关资源
    最近更新 更多