Risposte:
No, SQL Server non mantiene alcuna cronologia delle transazioni interrotte / ripristinate che è banale da raggiungere e non introduce ulteriori potenziali problemi (come indicato nella risposta di @ ooutwire ). O anche le transazioni che sono state impegnate.
Dovrai eseguire la tua registrazione all'interno della gestione degli errori o acquisire eventi specifici relativi alla transazione utilizzando la traccia lato server o Eventi estesi.
Tracciare:
Eventi estesi:
Quando dici transazioni "fallite", cosa intendi esattamente?
Se si desidera visualizzare le transazioni correnti sull'istanza, è possibile utilizzare il sys.dm_tran_active_transactions
DMV.
Inoltre, sys.dm_exec_sessions
ha open_transaction_count
ciò che può darti queste informazioni per sessione. Di seguito è una query diagnostica per estrarre tutti i processi utente che hanno transazioni aperte:
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;
Queste informazioni possono anche essere estratte da sys.dm_tran_session_transactions
:
select
session_id,
is_user_transaction,
open_transaction_count
from sys.dm_tran_session_transactions;
Se si desidera acquisire quando sono state ripristinate le transazioni (presupponendo così tanto dal desiderio di transazioni "non riuscite"), è possibile acquisire l' rollback_tran_completed
evento Eventi estesi . Se stai cercando una vista "tutto" delle transazioni, puoi catturare l' sql_transaction
evento, come definito da SQL Server
Si verifica quando una transazione di SQL Server inizia, completa, ripristina o esegue un punto di salvataggio. Utilizzare questo evento per monitorare il comportamento delle transazioni durante la risoluzione dei problemi di applicazioni, trigger o procedure memorizzate.
È possibile utilizzare fn_dblog () e trovare gli ID transazione per le transazioni interrotte e una serie di altre informazioni utili.
SELEZIONARE * FROM fn_dblog (NULL, NULL) WHERE Operation = 'LOP_ABORT_XACT'; PARTIRE
Esegue la scansione di tutto il registro delle transazioni nella parte attiva del registro. Questo può essere superato usando il flag di traccia 2537, che ti permetterà di tornare il più lontano possibile all'inizio del più vecchio VLF "non riutilizzato". Prestare attenzione quando si utilizza questa funzione, poiché esegue la scansione del registro in modo casuale e il registro non può cambiare durante l'esecuzione della scansione; quindi, potresti vedere una crescita del registro.
È inoltre possibile utilizzare fn_dump_dblog su un file di backup del registro.