Поиск самой старой открытой транзакции (ACTIVE_TRANSACTION)
SQL ServerБэкап и журналКоманда
USE [Customer];
DBCC OPENTRAN;
-- Detailed: show long-running open transactions and their owners:
SELECT s.session_id, s.login_name, s.host_name, s.program_name,
t.transaction_id,
DATEDIFF(SECOND, t.transaction_begin_time, GETDATE()) AS duration_sec,
t.transaction_begin_time
FROM sys.dm_tran_active_transactions t
JOIN sys.dm_tran_session_transactions st ON st.transaction_id = t.transaction_id
JOIN sys.dm_exec_sessions s ON s.session_id = st.session_id
ORDER BY t.transaction_begin_time;Что делает
Показывает самую старую открытую (не зафиксированную/не откатанную) транзакцию и удерживающую её сессию. Открытая транзакция мешает усечению журнала (LOG_REUSE_WAIT = ACTIVE_TRANSACTION).
Когда использовать
Для поиска первопричины, когда журнал не уменьшается несмотря на резервные копии журнала и log_reuse_wait_desc = ACTIVE_TRANSACTION.
Внимание
Перед KILL сессии с долгой открытой транзакцией согласуйте это с владельцем бизнес-процесса; откат может занять много времени. Только запрос; без риска.