Trouver la plus ancienne transaction ouverte (ACTIVE_TRANSACTION)
SQL ServerSauvegarde et journalCommande
USE [Customer];
DBCC OPENTRAN;
-- Detailed: show long-running open transactions and their owners:
SELECT s.session_id, s.login_name, s.host_name, s.program_name,
t.transaction_id,
DATEDIFF(SECOND, t.transaction_begin_time, GETDATE()) AS duration_sec,
t.transaction_begin_time
FROM sys.dm_tran_active_transactions t
JOIN sys.dm_tran_session_transactions st ON st.transaction_id = t.transaction_id
JOIN sys.dm_exec_sessions s ON s.session_id = st.session_id
ORDER BY t.transaction_begin_time;Ce que fait la commande
Affiche la plus ancienne transaction ouverte (ni validée ni annulée) et la session qui la détient. Une transaction ouverte empêche la troncature du journal (LOG_REUSE_WAIT = ACTIVE_TRANSACTION).
Quand l'utiliser
Pour trouver la cause racine quand le journal ne se réduit pas malgré les sauvegardes du journal et que log_reuse_wait_desc = ACTIVE_TRANSACTION.
Attention
Confirmez avec le responsable métier avant de faire un KILL sur la session qui détient une longue transaction ouverte ; le rollback peut durer longtemps. Requête seule ; aucun risque.
Voir aussi
- Effectuer une sauvegarde du journal des transactions
- Effectuer des sauvegardes FULL et DIFFERENTIAL
- Pourquoi le fichier journal a grossi / pourquoi il ne se tronque pas
- Réduire le fichier journal
- Afficher le nombre de VLF (Virtual Log File)
- Effectuer une sauvegarde ponctuelle sans rompre la chaîne (COPY_ONLY, striping, débit)