web-dev-qa-db-fra.com

Comment vérifier qu'il existe une transaction qui n'est pas encore validée dans SQL Server 2005?

Quelqu'un connaît-il la commande pour vérifier s'il existe une transaction non validée dans SQL Server 2005?

31
pang

utilisez @@ trancount ou sys.dm_tran_active_transactions DMV dans SQL 2005, 2008

39
Mladen Prajdic

XACT_STATE () signale l'état de transaction d'une session, indiquant si la session a ou non une transaction active, et si la transaction peut ou non être validée. Il renvoie trois valeurs:

  • 1, la session a une transaction active. La session peut effectuer toutes les actions, y compris l'écriture de données et la validation de la transaction.
  • 0, aucune transaction n'est active pour la session.
  • -1, la session a une transaction active, mais une erreur s'est produite qui a entraîné la classification de la transaction comme transaction non validable. La session ne peut pas valider la transaction ou revenir à un point de sauvegarde; il peut uniquement demander un retour en arrière complet de la transaction. La session ne peut effectuer aucune opération d'écriture tant qu'elle n'a pas annulé la transaction. La session peut uniquement effectuer des opérations de lecture jusqu'à ce qu'elle annule la transaction. Une fois la transaction annulée, la session peut effectuer des opérations de lecture et d'écriture et peut commencer une nouvelle transaction.

@@ TRANCOUNT Renvoie le nombre de transactions actives pour la connexion actuelle.

  • 0, pas dans une transaction
  • 1, dans une transaction
  • n, dans une transaction imbriquée
25
KM.

courir

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

--Le nom DB n'obtiendra que lorsqu'une commande SELECT @@ TRANCOUNT s'exécutera.

exécuter le code ci-dessus ... Donnera les détails de la session dans laquelle la transaction se produit ..

5
Itachi

Pour résumer, il existe plusieurs méthodes:

  1. SELECT @@ trancount
  2. DBCC OPENTRAN
  3. SELECT XACT_STATE ()
  4. sp_lock
  5. SELECT * FROM sys.dm_tran_active_transactions
3
Mark Varnas

sp_who2 sp_lock

0
DForck42