如何在SQL Server 2014中检查活动事务?

Jas*_*ark 17 sql sql-server-2014

我正在使用SQL Server 2014,想知道如何检查我的活动交易?

Tha*_*rif 39

  1. 查询 sys.sysprocesses

    SELECT * FROM sys.sysprocesses WHERE open_tran = 1
    
    Run Code Online (Sandbox Code Playgroud)
  2. DBCC OPENTRAN:帮助识别可能阻止日志截断的活动事务.DBCC OPENTRAN在指定数据库的事务日志中显示有关最早的活动事务以及最早的分布式和非分布式复制事务(如果有)的信息.仅当日志中存在活动事务或数据库包含复制信息时,才会显示结果.如果日志中没有活动事务,则显示信息性消息.

  3. sys.dm_tran_active_transactions

返回有关SQL Server实例的事务的信息. 句法

在此输入图像描述

想知道交易?

交易是一个单一的工作单位.如果事务成功,则在事务期间进行的所有数据修改都将被提交并成为数据库的永久部分.

在docs上查找更多内容


Ali*_*mes 9

翻译3.查询Tharif评论.

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
Run Code Online (Sandbox Code Playgroud)


Rin*_*kan 8

如果您想了解有关活动会话的更多详细信息,例如会话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
Run Code Online (Sandbox Code Playgroud)

你会得到类似的结果 在此处输入图片说明