如何在SQL Server 2005中检查是否存在尚未提交的事务?

问题描述 投票:0回答:7

有谁知道SQL Server 2005中检查是否有未提交事务的命令吗?

sql sql-server sql-server-2005 transactions
7个回答
48
投票

在sql 2005、2008中使用@@trancountsys.dm_tran_active_transactionsDMV


33
投票

XACT_STATE()报告会话的事务状态,指示会话是否有活动事务,以及事务是否能够提交。它返回三个值:

  • 1、会话有活跃事务。会话可以执行任何操作,包括写入数据和提交事务。
  • 0, 会话中没有活动的事务。
  • -1,会话有一个活动事务,但发生了错误,导致该事务被归类为不可提交事务。会话无法提交事务或回滚到保存点;它只能请求事务的完全回滚。会话在回滚事务之前无法执行任何写入操作。会话只能执行读操作,直到回滚事务。事务回滚后,会话可以执行读取和写入操作,并且可以开始新事务。

@@TRANCOUNT 返回当前连接的活动事务数。

  • 0,不在交易中
  • 1、在一笔交易中
  • n,在嵌套事务中

10
投票

奔跑

DBCC OPENTRAN

7
投票
SELECT
    trans.session_id AS [SESSION ID],
    ESes.host_name AS [HOST NAME],login_name AS [Login NAME],
    trans.transaction_id AS [TRANSACTION ID],
    tas.name AS [TRANSACTION NAME],tas.transaction_begin_time AS [TRANSACTION BEGIN TIME],
    tds.database_id AS [DATABASE ID],DBs.name AS [DATABASE NAME]
FROM sys.dm_tran_active_transactions tas
JOIN sys.dm_tran_session_transactions trans
ON (trans.transaction_id=tas.transaction_id)
LEFT OUTER JOIN sys.dm_tran_database_transactions tds
ON (tas.transaction_id = tds.transaction_id )
LEFT OUTER JOIN sys.databases AS DBs
ON tds.database_id = DBs.database_id
LEFT OUTER JOIN sys.dm_exec_sessions AS ESes
ON trans.session_id = ESes.session_id
WHERE ESes.session_id IS NOT NULL

--只有当执行 SELECT @@TRANCOUNT 命令时才会获取数据库名称。否则为 NULL

执行上面的代码...将给出交易发生的会话详细信息..


6
投票

总结起来有以下几种方法:

  1. 选择@@trancount
  2. DBCC 开放传输
  3. 选择 XACT_STATE()
  4. sp_lock
  5. 从 sys.dm_tran_active_transactions 中选择 *

0
投票

sp_who2 sp_lock


0
投票

对于您会话中的交易

XACT_STATE()   
SELECT @@trancount
DBCC OPENTRAN 

对于来自另一个会话或程序的事务的问题

SELECT * FROM sys.sysprocesses WHERE open_tran = 1

显示其他会话事务以及 spid,以便您可以终止它

SELECT * FROM sys.dm_tran_active_transactions 

显示用户和系统事务,但有用的输出较少

sp_lock
显示所有被锁定的内容,而不仅仅是交易 - 与 SELECT * FROM sys.sysprocesses WHERE open_tran = 1 它告诉您要调查或终止哪个进程。

因此,如果您通过简单的会话检查来查看当前事务状态,那么 XACT_STATE()
选择@@trancount DBCC OPENTRAN

对于正确的事务问题,当您试图找出阻止事物/访问表等的原因时,然后 sp_who2 和

SELECT * FROM sys.sysprocesses WHERE open_tran = 1
© www.soinside.com 2019 - 2024. All rights reserved.