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

Posted

技术标签:

【中文标题】有没有办法在 SQL Server 2000 数据库上列出打开的事务?【英文标题】:Is there a way to list open transactions on SQL Server 2000 database? 【发布时间】:2011-05-25 21:12:55 【问题描述】:

有谁知道在 SQL Server 2000 数据库上列出打开的事务的任何方法吗?

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

【问题讨论】:

【参考方案1】:

使用这个是因为只要交易打开了多个交易,那么下面的交易就会起作用 SELECT * FROM sys.sysprocesses WHERE open_tran 0

【讨论】:

【参考方案2】:

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

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

它会给出类似的结果

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

KILL 77

【讨论】:

哇,这个非常好,我喜欢提供的数据量,唯一的缺点是您需要成为管理员才能运行它,DBCC OPENTRAN 需要更少的权限。但仍然......非常好 很有用,谢谢!如果它回答了 OP 的问题(SQL 2000),它应该是公认的答案。投赞成票...【参考方案3】:

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

SELECT * FROM sys.sysprocesses WHERE open_tran = 1

对于当前数据库使用:

DBCC OPENTRAN

【讨论】:

【参考方案4】:

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

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

DBCC OPENTRAN

【讨论】:

以上是关于有没有办法在 SQL Server 2000 数据库上列出打开的事务?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server2000的数据库存储地址怎么改

从 SQL Server 2000 中恢复已删除的行

sql server 2000,Log.LDF文件丢失,附加数据库失败的解决办法[转]

将DBF数据表导入到sql server2000中的问题

ODBC不能连接部分sql2000数据库,急求解决办法(送高分)。

在 SQL Server 2000 上模拟 sp_OA*