DBAtlas · Atlas für Datenbankbetrieb

Die älteste offene Transaktion finden (ACTIVE_TRANSACTION)

SQL ServerBackup & Log

Befehl

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;

Was es tut

Zeigt die älteste offene (nicht committete/zurückgerollte) Transaktion und die Session, die sie hält. Eine offene Transaktion verhindert das Kürzen des Logs (LOG_REUSE_WAIT = ACTIVE_TRANSACTION).

Wann einsetzen

Um die Ursache zu finden, wenn das Log trotz Log-Backups nicht schrumpft und log_reuse_wait_desc = ACTIVE_TRANSACTION ist.

Vorsicht

Stimme dich mit dem fachlich Verantwortlichen ab, bevor du die Session mit einer lange offenen Transaktion per KILL beendest; das Rollback kann lange dauern. Nur Abfrage; kein Risiko.

In DBAtlas öffnen →

Verwandte Einträge