web-dev-qa-db-ja.com

SQL Server 2000データベースで開いているトランザクションを一覧表示する方法はありますか?

SQL Server 2000データベースで開いているトランザクションをリストする方法を知っている人はいますか?

SQL 2005(およびそれ以降)のデータベースバージョンでビューsys.dm_tran_session_transactionsをクエリできることは承知していますが、これはSQL 2000では使用できません。

90
James Wiseman

すべてのデータベースのクエリsys.sysprocesses

SELECT * FROM sys.sysprocesses WHERE open_tran = 1

現在のデータベースの場合:

DBCC OPENTRAN
134
gbn

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

ログにアクティブなトランザクションがない場合、情報メッセージが表示されます。

DBCC OPENTRAN

22
codingbadger

以下のクエリを使用して、アクティブなトランザクションのすべての情報を取得できます

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

セッションIDを参照して、以下のヘルプKILLクエリでそのトランザクションを閉じます。

KILL 77
17
Rinoy Ashokan