DBAtlas · Atlas de operaciones de bases de datos

Encontrar la transacción abierta más antigua (ACTIVE_TRANSACTION)

SQL ServerBackup y log

Comando

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;

Qué hace

Muestra la transacción abierta (sin commit/rollback) más antigua y la sesión que la mantiene. Una transacción abierta impide el truncado del log (LOG_REUSE_WAIT = ACTIVE_TRANSACTION).

Cuándo usarlo

Para encontrar la causa raíz cuando el log no se reduce a pesar de los backups de log y log_reuse_wait_desc = ACTIVE_TRANSACTION.

Precaución

Confirme con el responsable de negocio antes de hacer KILL a la sesión que mantiene una transacción abierta larga; el rollback puede tardar mucho. Solo consulta; sin riesgo.

Abrir en DBAtlas →

Relacionado