Відповіді:
Ні, SQL Server не підтримує жодної історії трансакцій, які були перервані / відмовлені назад, що є тривіальним для отримання та не створює додаткових потенційних проблем (як зазначено у відповіді @ ooutwire ). Або навіть угоди, які були вчинені.
Вам доведеться проводити власний журнал у процесі обробки помилок або фіксувати конкретні події, пов’язані з транзакціями, використовуючи трасування на стороні сервера або Розширені події.
Слід:
Розширені події:
Коли ви говорите "невдалі" транзакції, що саме ви маєте на увазі?
Якщо ви хочете побачити поточні транзакції на екземплярі, ви можете використовувати sys.dm_tran_active_transactions
DMV.
Також sys.dm_exec_sessions
є те, open_transaction_count
що може надати вам цю інформацію за сеансом. Нижче наводиться діагностичний запит, щоб витягнути всі користувацькі процеси, які мають відкриті транзакції:
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;
Цю інформацію можна також отримати з sys.dm_tran_session_transactions
:
select
session_id,
is_user_transaction,
open_transaction_count
from sys.dm_tran_session_transactions;
Якщо ви хочете зафіксувати, коли трансакції були відмовлені назад (якщо ви так сильно бачитесь на "невдалі" транзакції), ви можете зафіксувати rollback_tran_completed
подію Extended Events . Якщо ви шукаєте перегляд транзакцій "все", ви можете зафіксувати sql_transaction
подію, яку визначає SQL Server
Виникає, коли транзакція SQL Server починається, завершується, повертається назад або виконується точка збереження. Використовуйте цей захід для моніторингу поведінки транзакцій під час усунення несправностей із програмами, тригерами або збереженими процедурами.
Ви можете використовувати fn_dblog () і знайти ідентифікатори транзакцій для перерваних транзакцій, а також безліч іншої корисної інформації.
ВИБІР * FN_dblog (NULL, NULL) WHERE Операція = 'LOP_ABORT_XACT'; ПОВЕРНУТИСЯ
Він сканує весь журнал транзакцій в активній частині журналу. Це можна перекрити, використовуючи прапор трас 2537, який дозволить вам повернутися якомога далі до початку найдавнішого "повторно використаного" VLF. Будьте обережні, використовуючи цю функцію, оскільки вона сканує журнал випадковим чином і журнал не може змінюватися, коли відбувається сканування; Таким чином, ви можете побачити зростання журналу.
Ви також можете використовувати fn_dump_dblog проти файлу резервного копіювання журналу.