Respostas:
Não, o SQL Server não mantém histórico de transações que foram abortadas / revertidas, o que é trivial e não apresenta problemas potenciais adicionais (conforme descrito na resposta do @ ooutwire ). Ou mesmo transações que foram confirmadas.
Você precisará executar seu próprio log no tratamento de erros ou capturar eventos específicos relacionados à transação usando o rastreamento do lado do servidor ou Eventos Estendidos.
Vestígio:
Eventos estendidos:
Quando você diz transações "com falha", o que exatamente você quer dizer?
Se você quiser ver as transações atuais na instância, poderá utilizar o sys.dm_tran_active_transactions
DMV.
Além disso, sys.dm_exec_sessions
possui o open_transaction_count
que pode fornecer essas informações por sessão. Abaixo está uma consulta de diagnóstico para extrair todos os processos do usuário que possuem transações abertas:
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;
Esta informação também pode ser extraída de sys.dm_tran_session_transactions
:
select
session_id,
is_user_transaction,
open_transaction_count
from sys.dm_tran_session_transactions;
Se você deseja capturar quando as transações foram revertidas (assumindo o desejo de transações "com falha"), você pode capturar o rollback_tran_completed
evento Eventos Estendidos . Se você estiver procurando por uma exibição "tudo" das transações, poderá capturar o sql_transaction
evento, conforme definido pelo SQL Server.
Ocorre quando uma transação do SQL Server começa, é concluída, reverte ou executa um ponto de salvamento. Use este evento para monitorar o comportamento da transação ao solucionar problemas de aplicativos, gatilhos ou procedimentos armazenados.
Você pode usar fn_dblog () e encontrar os IDs de transação para transações abortadas, bem como uma série de outras informações úteis.
SELECT * FROM fn_dblog (NULL, NULL) WHERE Operação = 'LOP_ABORT_XACT'; VAI
Ele verifica todo o log de transações na parte ativa do log. Isso pode ser substituído usando o sinalizador de rastreamento 2537, que permitirá retornar o mais longe possível ao início do VLF "não reutilizado" mais antigo. Tenha cuidado ao usar esta função, pois ela verifica o log aleatoriamente e o log não pode ser alterado quando a verificação estiver ocorrendo; portanto, você pode ver o crescimento do log.
Você também pode usar o fn_dump_dblog em um arquivo de backup de log.