DBAtlas · 데이터베이스 운영 아틀라스

가장 오래된 열린 트랜잭션 찾기 (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;

하는 일

가장 오래된 열린(커밋/롤백되지 않은) 트랜잭션과 이를 보유한 세션을 보여 준다. 열린 트랜잭션은 로그 truncate를 막는다(LOG_REUSE_WAIT = ACTIVE_TRANSACTION).

사용 시점

로그 백업을 해도 로그가 줄지 않고 log_reuse_wait_desc = ACTIVE_TRANSACTION일 때 근본 원인을 찾기 위해.

주의

긴 열린 트랜잭션을 보유한 세션을 KILL하기 전에 업무 담당자와 확인한다. 롤백이 오래 걸릴 수 있다. 조회 전용이며 위험 없음.

DBAtlas에서 열기 →

관련 항목