web-dev-qa-db-ja.com

SQL Server 2014でアクティブなトランザクションを確認する方法は?

SQL Server 2014を使用していますが、アクティブなトランザクションを確認する方法を知りたいですか?

17
Jason Clark
  1. sys.sysprocessesを使用したクエリ

    SELECT * FROM sys.sysprocesses WHERE open_tran = 1
    
  2. DBCC OPENTRAN:ログの切り捨てを妨げている可能性のあるアクティブなトランザクションを識別するのに役立ちます。 DBCC OPENTRANは、指定されたデータベースのトランザクションログ内に、最も古いアクティブトランザクションと、最も古い分散および非分散レプリケートトランザクションに関する情報を表示します。結果が表示されるのは、ログにアクティブなトランザクションが存在する場合、またはデータベースにレプリケーション情報が含まれている場合のみです。ログにアクティブなトランザクションがない場合、情報メッセージが表示されます。

  3. sys.dm_tran_active_transactions

SQL Serverのインスタンスのトランザクションに関する情報を返します。 構文

enter image description here

トランザクションについて疑問に思っていますか?

トランザクションは単一の作業単位です。トランザクションが成功すると、トランザクション中に行われたすべてのデータ変更がコミットされ、データベースの永続的な一部になります。

ドキュメントをもっと見つける

36
Tharif

Tharifがコメントするクエリを翻訳します。

select transaction_id, name, transaction_begin_time
 ,case transaction_type 
    when 1 then '1 = Read/write transaction'
    when 2 then '2 = Read-only transaction'
    when 3 then '3 = System transaction'
    when 4 then '4 = Distributed transaction'
end as transaction_type 
,case transaction_state 
    when 0 then '0 = The transaction has not been completely initialized yet'
    when 1 then '1 = The transaction has been initialized but has not started'
    when 2 then '2 = The transaction is active'
    when 3 then '3 = The transaction has ended. This is used for read-only transactions'
    when 4 then '4 = The commit process has been initiated on the distributed transaction'
    when 5 then '5 = The transaction is in a prepared state and waiting resolution'
    when 6 then '6 = The transaction has been committed'
    when 7 then '7 = The transaction is being rolled back'
    when 8 then '8 = The transaction has been rolled back'
end as transaction_state
,case dtc_state 
    when 1 then '1 = ACTIVE'
    when 2 then '2 = PREPARED'
    when 3 then '3 = COMMITTED'
    when 4 then '4 = ABORTED'
    when 5 then '5 = RECOVERED'
end as dtc_state 
,transaction_status, transaction_status2,dtc_status, dtc_isolation_level, filestream_transaction_id
from sys.dm_tran_active_transactions
8
Alisson Gomes

セッションID、ホスト名、ログイン名、トランザクションID、トランザクション名、Trnasaction開始時間、データベースID、データベース名など、アクティブなセッションに関する詳細を知りたい場合は、以下のSQLクエリを使用できます

SELECT
trans.session_id AS [SESSION ID],
ESes.Host_name AS [Host NAME],login_name AS [Login NAME],
trans.transaction_id AS [TRANSACTION ID],
tas.name AS [TRANSACTION NAME],tas.transaction_begin_time AS [TRANSACTION 
BEGIN TIME],
tds.database_id AS [DATABASE ID],DBs.name AS [DATABASE NAME]
FROM sys.dm_tran_active_transactions tas
JOIN sys.dm_tran_session_transactions trans
ON (trans.transaction_id=tas.transaction_id)
LEFT OUTER JOIN sys.dm_tran_database_transactions tds
ON (tas.transaction_id = tds.transaction_id )
LEFT OUTER JOIN sys.databases AS DBs
ON tds.database_id = DBs.database_id
LEFT OUTER JOIN sys.dm_exec_sessions AS ESes
ON trans.session_id = ESes.session_id
WHERE ESes.session_id IS NOT NULL

結果は のようなものになりますenter image description here

6
Rinoy Ashokan

または、DBCCコマンドを使用します

DBCC OPENTRAN
2
Madhivanan