Respuestas:
No, SQL Server no mantiene ningún historial sobre las transacciones que fueron canceladas / revertidas que es trivial y no presenta problemas potenciales adicionales (como se describe en la respuesta de @ ooutwire ). O incluso transacciones que se han comprometido.
Tendrá que realizar su propio registro dentro de su manejo de errores, o capturar eventos específicos relacionados con transacciones usando el rastreo del lado del servidor o Eventos extendidos.
Rastro:
Eventos extendidos:
Cuando dice transacciones "fallidas", ¿qué quiere decir exactamente?
Si desea ver las transacciones actuales en la instancia, puede utilizar el sys.dm_tran_active_transactions
DMV.
Además, sys.dm_exec_sessions
tiene el open_transaction_count
que puede darle esta información por sesión. A continuación se muestra una consulta de diagnóstico para extraer todos los procesos de usuario que tienen transacciones abiertas:
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 información también se puede obtener de sys.dm_tran_session_transactions
:
select
session_id,
is_user_transaction,
open_transaction_count
from sys.dm_tran_session_transactions;
Si desea capturar cuándo se retrotraeron las transacciones (suponiendo tanto su deseo de transacciones "fallidas"), puede capturar el rollback_tran_completed
evento Eventos extendidos . Si está buscando una vista de "todo" de las transacciones, puede capturar el sql_transaction
evento, que según lo definido por SQL Server es
Ocurre cuando una transacción de SQL Server comienza, completa, revierte o ejecuta un punto de rescate. Use este evento para monitorear el comportamiento de las transacciones al solucionar problemas de aplicaciones, disparadores o procedimientos almacenados.
Puede usar fn_dblog () y buscar los ID de transacción para transacciones canceladas, así como una gran cantidad de otra información útil.
SELECCIONE * DE fn_dblog (NULL, NULL) WHERE Operación = 'LOP_ABORT_XACT'; VAMOS
Escanea todo el registro de transacciones en la parte activa del registro. Esto se puede anular utilizando el indicador de traza 2537, que le permitirá volver lo más lejos posible al inicio del VLF "no reutilizado" más antiguo. Tenga cuidado al usar esta función, ya que escanea el registro al azar y el registro no puede cambiar cuando se realiza el escaneo; entonces, puede ver el crecimiento del registro.
También puede usar fn_dump_dblog contra un archivo de respaldo de registro.