Sauvegardes : Vérifier la présence des fichiers de backup sur le système de fichiers

Il peut être intéressant de vérifier si les sauvegardes les plus récentes sont bien présentes sur le système de fichier. Des fichiers de sauvegarde peuvent être déplacés ou supprimés en raison d’un manque de place disque par exemple. Cela permet donc d’anticiper et d’éviter de se retrouver piéger si vous devez effectuer une restauration en urgence en se posant la question : Mais où sont mes sauvegardes ?

Pour la détection des fichiers sur disque, mon choix s’est porté sur l’utilisation de la commande xp_cmdshell qui doit donc être autorisé pour que le script suivant puisse fonctionner (cf surface de configuration de sqlserver ou sp_configure). On aurait très bien pu créer une assembly pour effectuer cette même tâche.

DECLARE @cmd VARCHAR(100) 
DECLARE @path VARCHAR(50)
DECLARE @startDate DATETIME
DECLARE @endDate DATETIME
DECLARE @backupType CHAR(1)

SET @path =  » — Chemin des backups (Ex : G:\BAK\)

SET @cmd = ‘dir /S /B ‘ + @path;

SET @startDate =  »; — Date début backup (AAAAMMJJ)
SET @endDate =  »; — Date fin backup
SET @backupType =  »; — Type backup (D: Full, I : Differential, L : Transaction)

DECLARE @t_filebackup TABLE
(
    [file] VARCHAR(100)
);

INSERT INTO @t_filebackup
EXEC master..xp_cmdshell @cmd;

WITH CTE_BACKUP
AS
(
    SELECT
        s.database_name,
        m.physical_device_name,
        s.backup_start_date,
        CASE s.[type]
            WHEN ‘D’ THEN ‘1 – Full’
            WHEN ‘I’ THEN ‘2- Differential’
            WHEN ‘L’ THEN ‘3- Transaction Log’
        END as BackupType
    FROM msdb.dbo.backupset s
    INNER JOIN msdb.dbo.backupmediafamily m
    ON s.media_set_id = m.media_set_id
    WHERE backup_start_date BETWEEN @startDate AND @endDate
     AND (s.[type] = @backupType OR @backupType =  »)
)
SELECT
    b.*,
    CASE
        WHEN [file] IS NULL THEN ‘Non’
        ELSE ‘Oui’
    END AS Present_sur_disque
FROM CTE_BACKUP b
LEFT OUTER JOIN @t_filebackup f
ON b.physical_device_name  = [file]
ORDER BY b.BackupType, b.database_name, b.backup_start_date;

Bonne surveillance  !!!

David BARBARIN (Mikedavem)
Elève ingénieur CNAM Lyon

Laisser un commentaire