Réponses:
Non, SQL Server ne conserve aucun historique sur les transactions qui ont été abandonnées / annulées, ce qui est trivial à atteindre et n'introduit pas de problèmes potentiels supplémentaires (comme indiqué dans la réponse de @ ooutwire ). Ou même des transactions qui ont été engagées.
Vous devrez effectuer votre propre journalisation dans le cadre de la gestion des erreurs ou capturer des événements spécifiques liés aux transactions à l'aide de la trace côté serveur ou des événements étendus.
Trace:
Événements prolongés:
Lorsque vous dites des transactions «échouées», que voulez-vous dire exactement?
Si vous souhaitez voir les transactions en cours sur l'instance, vous pouvez utiliser le sys.dm_tran_active_transactions
DMV.
Aussi, sys.dm_exec_sessions
a le open_transaction_count
qui peut vous donner ces informations par session. Voici une requête de diagnostic pour extraire tous les processus utilisateur qui ont des transactions ouvertes:
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;
Ces informations peuvent également être extraites de sys.dm_tran_session_transactions
:
select
session_id,
is_user_transaction,
open_transaction_count
from sys.dm_tran_session_transactions;
Si vous souhaitez capturer lorsque les transactions ont été annulées (en supposant que votre désir de transactions "ait échoué"), vous pouvez capturer l' rollback_tran_completed
événement Événements étendus . Si vous recherchez une vue «tout» des transactions, vous pouvez capturer l' sql_transaction
événement qui, tel que défini par SQL Server, est
Se produit lorsqu'une transaction SQL Server commence, se termine, annule ou exécute un point de sauvegarde. Utilisez cet événement pour surveiller le comportement des transactions lors du dépannage des applications, des déclencheurs ou des procédures stockées.
Vous pouvez utiliser fn_dblog () et trouver les ID de transaction pour les transactions abandonnées ainsi qu'une foule d'autres informations utiles.
SELECT * FROM fn_dblog (NULL, NULL) WHERE Operation = 'LOP_ABORT_XACT'; ALLER
Il analyse tous les journaux de transactions dans la partie active du journal. Cela peut être remplacé à l'aide de l'indicateur de trace 2537, qui vous permettra de remonter le plus loin possible au début du plus ancien VLF "non réutilisé". Soyez prudent lorsque vous utilisez cette fonction, car elle analyse le journal de façon aléatoire et le journal ne peut pas changer lorsque l'analyse se produit; ainsi, vous pouvez voir une croissance du journal.
Vous pouvez également utiliser fn_dump_dblog sur un fichier de sauvegarde de journal.