Existe-t-il un moyen de répertorier les transactions ouvertes sur la base de données SQL Server 2000?

100

Quelqu'un connaît-il un moyen de répertorier les transactions ouvertes sur la base de données SQL Server 2000?

Je sais que je peux interroger la vue sys.dm_tran_session_transactionssur les versions de base de données SQL 2005 (et ultérieures), mais cela n'est pas disponible sur SQL 2000.

James Wiseman
la source

Réponses:

157

Pour toutes les bases de données, interrogez sys.sysprocesses

SELECT * FROM sys.sysprocesses WHERE open_tran = 1

Pour l'utilisation actuelle de la base de données:

DBCC OPENTRAN
gbn
la source
34

Vous pouvez obtenir toutes les informations de la transaction active à l'aide de la requête ci-dessous

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

et il donnera ci-dessous un résultat similaire entrez la description de l'image ici

et vous fermez cette transaction à l'aide de l'aide ci-dessous la requête KILL en référençant l'identifiant de session

KILL 77
Rinoy Ashokan
la source
Wow, celui-ci est très agréable, j'aime la quantité de données fournies, le seul inconvénient est que vous devez être administrateur pour l'exécuter, DBCC OPENTRAN a besoin de moins d'autorisations. Mais
quand
Très utile, merci! Si elle a répondu à la question du PO (SQL 2000), elle aurait dû être la réponse acceptée. Avoir un vote favorable ...
Ingénieur inversé
Génial, j'ai obtenu ce que je voulais.
Vipul
23

DBCC OPENTRAN aide à identifier les transactions actives qui peuvent empêcher la troncature du journal. DBCC OPENTRAN affiche des informations sur la transaction active la plus ancienne et les transactions répliquées distribuées et non distribuées les plus anciennes, le cas échéant, dans le journal des transactions de la base de données spécifiée. Les résultats ne sont affichés que s'il existe une transaction active dans le journal ou si la base de données contient des informations de réplication.

Un message d'information s'affiche s'il n'y a pas de transactions actives dans le journal.

DBCC OPENTRAN

codingbadger
la source
0

Utilisez ceci parce que chaque fois que la transaction ouvre plus d'une transaction, alors ci-dessous fonctionnera SELECT * FROM sys.sysprocesses WHERE open_tran <> 0

kanti
la source