Historique des sauvegardes depuis msdb et contrôle des sauvegardes manquantes
SQL ServerSauvegarde et journalCommande
-- Last FULL / DIFF / LOG per database (never backed up first):
SELECT d.name AS db,
d.recovery_model_desc,
MAX(CASE WHEN b.type = 'D' THEN b.backup_finish_date END) AS last_full,
MAX(CASE WHEN b.type = 'I' THEN b.backup_finish_date END) AS last_diff,
MAX(CASE WHEN b.type = 'L' THEN b.backup_finish_date END) AS last_log,
DATEDIFF(MINUTE, MAX(CASE WHEN b.type = 'L' THEN b.backup_finish_date END), GETDATE()) AS log_age_min
FROM sys.databases d
LEFT JOIN msdb.dbo.backupset b
ON b.database_name = d.name AND b.is_copy_only = 0
WHERE d.name <> N'tempdb'
GROUP BY d.name, d.recovery_model_desc
ORDER BY last_full;
-- Chain for one DB over the last 7 days (LSN, size, file):
SELECT b.backup_start_date, b.backup_finish_date, b.type, b.is_copy_only,
b.first_lsn, b.last_lsn, b.database_backup_lsn,
CAST(b.backup_size / 1048576.0 AS DECIMAL(12,1)) AS size_mb,
CAST(b.compressed_backup_size / 1048576.0 AS DECIMAL(12,1)) AS compressed_mb,
b.has_backup_checksums, mf.physical_device_name
FROM msdb.dbo.backupset b
JOIN msdb.dbo.backupmediafamily mf ON mf.media_set_id = b.media_set_id
WHERE b.database_name = N'Musteri'
AND b.backup_start_date >= DATEADD(DAY, -7, GETDATE())
ORDER BY b.backup_start_date;Ce que fait la commande
Liste pour chaque base l'heure de la dernière sauvegarde FULL/DIFF/LOG et l'âge de la sauvegarde du journal ; pour une base, la chaîne de sauvegarde avec la séquence LSN, la taille compressée, l'indicateur checksum et le chemin du fichier.
Quand l'utiliser
Lors du contrôle du matin, pour savoir quels fichiers une restauration nécessite, pour répondre à "à quand remonte la dernière sauvegarde" lors d'un audit, ou pour voir si les sauvegardes du journal tournent pendant une alerte de journal plein.
Attention
msdb ne connaît que les sauvegardes prises par cette instance ; celles prises sur un autre serveur ou un autre réplica de l'AG ne sont pas visibles (vérifiez chaque réplica d'un AG). Le first_lsn d'une sauvegarde du journal doit être égal au last_lsn de la précédente ; un écart signifie que la chaîne est rompue. En récupération FULL, un last_log NULL signifie que le journal n'est jamais sauvegardé et va continuer de grossir. Requête en lecture seule ; sûre.
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)
- Trouver la plus ancienne transaction ouverte (ACTIVE_TRANSACTION)