不,SQL Server 不会维护任何关于中止/回滚的事务的历史记录,这些历史记录很简单,也不会引入其他潜在问题(如@ooutwire 的回答中所述)。甚至已经提交的事务。
您必须在错误处理中执行自己的日志记录,或者使用服务器端跟踪或扩展事件捕获特定的事务相关事件。
痕迹:
扩展事件:
当您说“失败”交易时,您到底是什么意思?
如果您想查看实例上的当前事务,可以使用 DMV sys.dm_tran_active_transactions
。
此外,sys.dm_exec_sessions
还有open_transaction_count
可以按会话为您提供此信息的工具。下面是一个诊断查询,用于提取所有具有开放事务的用户进程:
select
s.session_id,
s.login_name,
s.open_transaction_count,
st.text as most_recent_sql_text
from sys.dm_exec_sessions s
inner join sys.dm_exec_connections c
on s.session_id = c.session_id
outer apply sys.dm_exec_sql_text(c.most_recent_sql_handle) st
where s.is_user_process = 1
and s.open_transaction_count > 0;
Run Code Online (Sandbox Code Playgroud)
此信息也可以从以下位置获取sys.dm_tran_session_transactions
:
select
session_id,
is_user_transaction,
open_transaction_count
from sys.dm_tran_session_transactions;
Run Code Online (Sandbox Code Playgroud)
如果您想捕获事务回滚的时间(假设您希望“失败”事务),您可以捕获扩展事件事件rollback_tran_completed
。如果您正在寻找事务的“一切”视图,您可以捕获事件sql_transaction
,SQL Server 定义的事件是
当 SQL Server 事务开始、完成、回滚或执行保存点时发生。在对应用程序、触发器或存储过程进行故障排除时,使用此事件来监视事务行为。
归档时间: |
|
查看次数: |
12693 次 |
最近记录: |