【发布时间】:2015-11-04 15:50:43
【问题描述】:
我正在使用 SQL Server 2014 并且想知道如何检查我的活动事务?
【问题讨论】:
标签: sql sql-server-2014
我正在使用 SQL Server 2014 并且想知道如何检查我的活动事务?
【问题讨论】:
标签: sql sql-server-2014
使用sys.sysprocesses查询
SELECT * FROM sys.sysprocesses WHERE open_tran = 1
DBCC OPENTRAN :帮助识别可能阻止日志截断的活动事务。 DBCC OPENTRAN 在指定数据库的事务日志中显示有关最旧的活动事务以及最旧的分布式和非分布式复制事务(如果有)的信息。仅当日志中存在活动事务或数据库包含复制信息时,才会显示结果。如果日志中没有活动事务,则会显示一条信息性消息。
sys.dm_tran_active_transactions
返回有关 SQL Server 实例的事务的信息。 Syntax
想知道交易吗?
事务是单个工作单元。如果交易是 成功,事务期间所做的所有数据修改 已提交并成为数据库的永久部分。
【讨论】:
如果您想了解有关活动会话的更多详细信息,例如 会话 ID、主机名、登录名、事务 ID、事务名称、事务开始时间、数据库 ID、数据库名称,您可以在下面的 sql 查询中使用
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
【讨论】:
翻译 3. Tharif cmets 的查询。
select transaction_id, name, transaction_begin_time
,case transaction_type
when 1 then '1 = Read/write transaction'
when 2 then '2 = Read-only transaction'
when 3 then '3 = System transaction'
when 4 then '4 = Distributed transaction'
end as transaction_type
,case transaction_state
when 0 then '0 = The transaction has not been completely initialized yet'
when 1 then '1 = The transaction has been initialized but has not started'
when 2 then '2 = The transaction is active'
when 3 then '3 = The transaction has ended. This is used for read-only transactions'
when 4 then '4 = The commit process has been initiated on the distributed transaction'
when 5 then '5 = The transaction is in a prepared state and waiting resolution'
when 6 then '6 = The transaction has been committed'
when 7 then '7 = The transaction is being rolled back'
when 8 then '8 = The transaction has been rolled back'
end as transaction_state
,case dtc_state
when 1 then '1 = ACTIVE'
when 2 then '2 = PREPARED'
when 3 then '3 = COMMITTED'
when 4 then '4 = ABORTED'
when 5 then '5 = RECOVERED'
end as dtc_state
,transaction_status, transaction_status2,dtc_status, dtc_isolation_level, filestream_transaction_id
from sys.dm_tran_active_transactions
【讨论】:
或使用 DBCC 命令
DBCC OPENTRAN
【讨论】:
最有用的方法是;
DBCC opentran()
当您检查时,您将收到以下消息;
最旧的活动交易: SPID(服务器进程 ID):190 UID(用户 ID):-1 名称:implicit_transaction LSN : (500549:37333:1) 开始时间:2021年12月4日上午10:36:21:673
如果你多次运行 DBCC opentran 并且你总是得到相同的服务器进程 ID 然后系统然后一个事务被卡在数据库中。
因此,有必要先用下面的代码查看SPID的详细信息,然后杀死那个SPID进程。
exec sp_who2 190
exec sp_lock 190
KILL 190
【讨论】: