DBAtlas · Atlas für Datenbankbetrieb

Backup-Historie aus msdb und Prüfung auf fehlende Backups

SQL ServerBackup & Log

Befehl

-- 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;

Was es tut

Listet für jede Datenbank den Zeitpunkt des letzten FULL-/DIFF-/LOG-Backups und das Alter des Log-Backups; für eine Datenbank die Backup-Kette mit LSN-Abfolge, komprimierter Größe, Checksum-Flag und Dateipfad.

Wann einsetzen

Beim morgendlichen Check, um herauszufinden, welche Dateien ein Restore braucht, um in einem Audit "wann war das letzte Backup" zu beantworten oder um bei einem Log-voll-Alarm zu sehen, ob Log-Backups laufen.

Vorsicht

msdb kennt nur Backups dieser Instanz; Backups auf einem anderen Server oder einer anderen AG-Replica sind nicht sichtbar (in einer AG jede Replica prüfen). Die first_lsn eines Log-Backups muss der last_lsn des vorherigen entsprechen; eine Lücke bedeutet, dass die Kette unterbrochen ist. Bei Recovery Model FULL bedeutet ein NULL in last_log, dass das Log nie gesichert wird und weiter wächst. Reine Leseabfrage; sicher.

In DBAtlas öffnen →

Verwandte Einträge