No meu ambiente de produção, ocorrem raras transações não dispostas que mantêm o bloqueio em uma tabela. Quero consertar isso no código do meu aplicativo.
Posso obter o TransactionId e o SessionId ad hoc, mas como faço para que os comandos SQL sejam executados na transação para que eu possa rastreá-los até o código do aplicativo?
É assim que obtenho o ID da transação não descartada de longa duração:
SELECT trans.session_id AS [SESSION ID]
,login_name AS [Login NAME]
,trans.transaction_id AS [TRANSACTION ID]
,tas.name AS [TRANSACTION NAME]
,tas.transaction_begin_time AS [TRANSACTION BEGIN TIME]
FROM sys.dm_tran_active_transactions tas
JOIN sys.dm_tran_session_transactions trans ON (trans.transaction_id = tas.transaction_id)
Como você obtém o ID da transação da consulta que compartilhou conosco, a consulta a seguir pode ajudá-lo a usar DMVs para obter o texto SQL dessas consultas relacionadas à transação:
Alternativamente, você pode usar Eventos Estendidos para capturar todas as consultas em um arquivo XEL e posteriormente extrair consultas relacionadas a um ID de transação específico.