web-dev-qa-db-ja.com

SQL Server 2005でまだコミットされていないトランザクションがあることを確認する方法は?

SQL Server 2005にコミットされていないトランザクションがあるかどうかを確認するコマンドを知っている人はいますか?

31
pang

@@ trancount または sys.dm_tran_active_transactions を使用して、SQL 2005、2008のDMV

39
Mladen Prajdic

XACT_STATE()は、セッションのトランザクション状態を報告し、セッションにアクティブなトランザクションがあるかどうか、およびトランザクションをコミットできるかどうかを示します。次の3つの値を返します。

  • 1、セッションにはアクティブなトランザクションがあります。セッションは、データの書き込みやトランザクションのコミットなど、あらゆるアクションを実行できます。
  • 0、セッションに対してアクティブなトランザクションはありません。
  • -1セッションにはアクティブなトランザクションがありますが、エラーが発生し、トランザクションがコミット不能なトランザクションとして分類されました。セッションは、トランザクションをコミットすることも、セーブポイントにロールバックすることもできません。トランザクションの完全なロールバックのみを要求できます。セッションは、トランザクションをロールバックするまで書き込み操作を実行できません。セッションは、トランザクションをロールバックするまで読み取り操作のみを実行できます。トランザクションがロールバックされた後、セッションは読み取り操作と書き込み操作の両方を実行でき、新しいトランザクションを開始できます。

@@ TRANCOUNT現在の接続のアクティブなトランザクションの数を返します。

  • 0、トランザクションではない
  • 1、トランザクションで
  • n、ネストされたトランザクション内
25
KM.

走る

DBCC OPENTRAN
7
Mitch Wheat
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

--DB名は、SELECT @@ TRANCOUNTコマンドの実行時にのみ取得されます。

上記のコードを実行します...トランザクションが発生するセッションの詳細を提供します。

5
Itachi

sp_who2 sp_lock

0
DForck42