有没有办法列出SQL Server 2000数据库上的未清事务?


100

有谁知道在SQL Server 2000数据库上列出未完成的事务的任何方式?

我知道可以查询sys.dm_tran_session_transactionsSQL 2005(和更高版本)数据库版本的视图,但是SQL 2000上不可用。

Answers:


157

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

SELECT * FROM sys.sysprocesses WHERE open_tran = 1

对于当前数据库,请使用:

DBCC OPENTRAN

34

您可以通过以下查询获取活动交易的所有信息

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

它会给出下面类似的结果 在此处输入图片说明

然后通过引用会话ID通过KILL查询下面的帮助关闭该事务

KILL 77

哇,这非常好,我喜欢所提供的数据量,唯一的缺点是您需要成为管理员才能运行它,DBCC OPENTRAN需要的权限更少。但是仍然...非常好
Yogurtu

非常有用,谢谢!如果它回答了OP的问题(SQL 2000),则应该已经被接受。有一个赞...
逆向工程师,

太棒了,得到了我想要的。
Vipul

23

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

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

DBCC OPENTRAN


0

使用此选项是因为每当事务打开一个以上的事务时,下面的命令就会起作用 SELECT * FROM sys.sysprocesses WHERE open_tran <> 0

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.