有没有办法在SQL Server 2000数据库中列出打开的事务?

时间:2010-12-15 12:10:53

标签: sql sql-server transactions sql-server-2000

有没有人知道在SQL Server 2000数据库中列出打开事务的任何方法?

我知道我可以在SQL 2005(及更高版本)数据库版本上查询视图sys.dm_tran_session_transactions,但这在SQL 2000上不可用。

4 个答案:

答案 0 :(得分:127)

对于所有数据库查询sys.sysprocesses

SELECT * FROM sys.sysprocesses WHERE open_tran = 1

对于当前数据库使用:

DBCC OPENTRAN

答案 1 :(得分:22)

DBCC OPENTRAN 有助于识别可能阻止日志截断的活动事务。 DBCC OPENTRAN在指定数据库的事务日志中显示有关最早的活动事务以及最早的分布式和非分布式复制事务(如果有)的信息。仅当日志中存在活动事务或数据库包含复制信息时,才会显示结果。

如果日志中没有活动的事务,则会显示信息性消息。

DBCC OPENTRAN

答案 2 :(得分:15)

您可以通过以下查询

获取活动交易的所有信息
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

它会在下面给出类似的结果enter image description here

并通过引用会话ID

通过 KILL 查询下方的帮助关闭该交易

KILL 77

答案 3 :(得分:0)

使用此选项是因为每当一个交易打开多个交易时,下面的交易就会起作用 SELECT * FROM sys.sysprocesses,其中open_tran <> 0