Où sont mes backups ?

SQL Server stocke un historique des backups effectués dans les tables système de MSDB.

Il est utile d'interroger ces tables, par exemple pour savoir de quand date la dernière sauvegarde, à quel emplacement le fichier de backup a-t-il été créé...) : on peut avoir des surprises !

La requête suivante vous permet d'obtenir rapidement cette information :

  • Quelles bases sont sauvegardées ou non
  • Où se trouve le device de la dernière sauvegarde : fichier disque ou device réseau
  • Et ces informations de backup même si une base a été supprimée (ou renommée)
/*-------------------------------------------------------------------
[SCRIPT]
[DATABASE]
[DESCRIPTION] Derniers fichiers ou devices de sauvegarde full
[MAJ PAR] DATAFLY - Arian Papillon
[DATEMAJ] 5/04/2013
-------------------------------------------------------------------*/
SELECT CASE WHEN sd.NAME IS NULL THEN '*** Backup of non existant db : ' ELSE '' END + COALESCE(sd.name,filebackup.database_name) AS database_name
,filebackup.backup_date
,filebackup.type
,filebackup.physical_device_name
,filebackup.device_type
FROM master.sys.databases sd
FULL JOIN ( SELECT bk.database_name
,MAX(bk.backup_finish_date) AS backup_date
,bm.device_type
FROM msdb..backupset bk
JOIN msdb..backupmediafamily bm ON bk.media_set_id = bm.media_set_id
WHERE bk.type = 'D'
-- AND bm.device_type = 2 -- pour fichiers disque
GROUP BY bk.database_name
,bm.device_type
) AS lastbackup
INNER JOIN ( SELECT bk.database_name
,bk.backup_finish_date AS backup_date
,bk.type
,bm.physical_device_name
,device_type
FROM msdb..backupset bk
JOIN msdb..backupmediafamily bm ON bk.media_set_id = bm.media_set_id
WHERE bk.type = 'D'
) AS filebackup ON lastbackup.database_name = filebackup.database_name
AND lastbackup.backup_date = filebackup.backup_date
ON sd.name = filebackup.database_name
ORDER BY sd.name,backup_date