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;

概要

最も古いオープン中 (コミットもロールバックもされていない) のトランザクションと、それを保持しているセッションを表示する。オープン中のトランザクションはログの切り捨てを妨げる (LOG_REUSE_WAIT = ACTIVE_TRANSACTION)。

使用する場面

ログバックアップを取得してもログが縮小せず、log_reuse_wait_desc = ACTIVE_TRANSACTION の場合に根本原因を特定するため。

注意

長時間オープン中のトランザクションを保持しているセッションを KILL する前に、業務オーナーに確認する。ロールバックに長時間かかる場合がある。照会のみでリスクなし。

DBAtlas で開く →

関連項目