我的应用程序(使用带有 SQL Server 2000 的 SQL Native Client 的 C++)一直处于挂起状态。我相信这是因为事务在表上的某个地方未提交,并且由于打开的事务,该表上的 SELECT 查询被阻塞。
不幸的是,我真的很难确定挂起交易在我的代码中的位置。有什么方法可以让 SQL Server 指示在未提交的事务上运行了哪些查询?
我的应用程序(使用带有 SQL Server 2000 的 SQL Native Client 的 C++)一直处于挂起状态。我相信这是因为事务在表上的某个地方未提交,并且由于打开的事务,该表上的 SELECT 查询被阻塞。
不幸的是,我真的很难确定挂起交易在我的代码中的位置。有什么方法可以让 SQL Server 指示在未提交的事务上运行了哪些查询?
如果您有管理员 (sa) 权限,则可以运行 sp_Who 或 sp_Who2 以显示所有服务器活动,通过 Spid,运行
Exec sp_Who2 [SpidNumber]
只看你感兴趣的一个会话...
要直接查看未结交易,请运行
DBCC OPENTRAN (T-SQL) 显示有关指定数据库中最旧的活动事务以及最旧的分布式和非分布式复制事务(如果有)的信息。仅当存在活动事务或数据库包含复制信息时才会显示结果。如果没有活动事务,则会显示一条信息性消息。
Syntax
DBCC OPENTRAN
( {'database_name' | database_id}
) [ WITH TABLERESULTS [, NO_INFOMSGS]
]
但是,当用户会话终止时,Sql Server 应该自动回滚任何打开的事务。