web-dev-qa-db-fra.com

Comment vérifier les transactions actives dans SQL Server 2014?

J'utilise SQL Server 2014 et je veux savoir comment vérifier mes transactions actives?

17
Jason Clark
  1. Requête avec sys.sysprocesses

    SELECT * FROM sys.sysprocesses WHERE open_tran = 1
    
  2. 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 sont affichés uniquement s'il existe une transaction active qui existe 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 aucune transaction active dans le journal.

  3. sys.dm_tran_active_transactions

Renvoie des informations sur les transactions pour l'instance de SQL Server. Syntaxe

enter image description here

Vous vous interrogez sur la transaction?

Une transaction est une seule unité d'oeuvre. Si une transaction réussit, toutes les modifications de données apportées au cours de la transaction sont validées et deviennent une partie permanente de la base de données.

En savoir plus sur docs

36
Tharif

Traduction de la requête 3. commentée par 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

Si vous souhaitez en savoir plus sur les sessions actives telles que l'ID de session, le nom d'hôte, le nom de connexion, l'ID de transaction, le nom de transaction, l'heure de début de la transaction, l'ID de la base de données, le nom de la base de données, vous pouvez utiliser la requête SQL 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 vous obtiendrez le résultat quelque chose comme enter image description here

6
Rinoy Ashokan

ou utilisez la commande DBCC

DBCC OPENTRAN
2
Madhivanan