Antworten:
Nein, SQL Server verwaltet keinen Verlauf von Transaktionen, die abgebrochen / zurückgesetzt wurden, was trivial ist und keine zusätzlichen potenziellen Probleme mit sich bringt (wie in der Antwort von @ ooutwire beschrieben ). Oder sogar Transaktionen, die festgeschrieben wurden.
Sie müssen Ihre eigene Protokollierung im Rahmen Ihrer Fehlerbehandlung durchführen oder bestimmte transaktionsbezogene Ereignisse mithilfe der serverseitigen Ablaufverfolgung oder der erweiterten Ereignisse erfassen.
Spur:
Erweiterte Veranstaltungen:
Was genau meinen Sie mit "fehlgeschlagenen" Transaktionen?
Wenn Sie aktuelle Transaktionen auf der Instanz anzeigen möchten, können Sie die sys.dm_tran_active_transactions
DMV verwenden.
Hat sys.dm_exec_sessions
auch das open_transaction_count
, das Ihnen diese Informationen nach Sitzung geben kann. Im Folgenden finden Sie eine Diagnoseabfrage zum Abrufen aller Benutzerprozesse mit offenen Transaktionen:
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;
Diese Informationen können auch abgerufen werden aus sys.dm_tran_session_transactions
:
select
session_id,
is_user_transaction,
open_transaction_count
from sys.dm_tran_session_transactions;
Wenn Sie erfassen möchten, wann Transaktionen zurückgesetzt wurden (vorausgesetzt, Sie möchten "fehlgeschlagene" Transaktionen wünschen), können Sie das Ereignis "Erweiterte Ereignisse" erfassen rollback_tran_completed
. Wenn Sie nach einer "Alles" -Ansicht von Transaktionen suchen, können Sie sql_transaction
das von SQL Server definierte Ereignis erfassen
Tritt auf, wenn eine SQL Server-Transaktion einen Sicherungspunkt beginnt, abschließt, zurücksetzt oder ausführt. Verwenden Sie dieses Ereignis, um das Transaktionsverhalten bei der Fehlerbehebung bei Anwendungen, Triggern oder gespeicherten Prozeduren zu überwachen.
Sie können fn_dblog () verwenden und die Transaktions-IDs für abgebrochene Transaktionen sowie eine Vielzahl anderer nützlicher Informationen finden.
WÄHLEN * FROM fn_dblog (NULL, NULL) WHERE Operation = 'LOP_ABORT_XACT'; GEHEN
Es durchsucht das gesamte Transaktionsprotokoll im aktiven Teil des Protokolls. Dies kann mit dem Trace-Flag 2537 überschrieben werden, mit dem Sie so weit wie möglich zum Start des ältesten "nicht wiederverwendeten" VLF zurückkehren können. Seien Sie vorsichtig, wenn Sie diese Funktion verwenden, da das Protokoll zufällig gescannt wird und sich das Protokoll während des Scanvorgangs nicht ändern kann. Möglicherweise sehen Sie ein logarithmisches Wachstum.
Sie können fn_dump_dblog auch für eine Protokollsicherungsdatei verwenden.