[TSQL] Procédure de vérification du dernier backup
Bonjour,
J'ai une procédure que vérifie la dat du dernier backup des bases de données dont voici le code (désolé si c pas propre) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
/*Procedure permettant de vérifier le dernier backup de chaque base applicative*/
CREATE PROCEDURE sp_CHECK_BACKUP
AS
DECLARE @dbname varchar(50)
DECLARE @sql nvarchar(4000)
DECLARE @plastbckp datetime
DECLARE @Para NVARCHAR(500)
DECLARE @sortie NVARCHAR (2000)
DECLARE @jobid varchar(100)
DECLARE @pjobtime int
set @sortie=''
DECLARE alldbname CURSOR FOR
-- On rΘcupΦre toutes les bases USER
SELECT name from master.dbo.sysdatabases
OPEN alldbname
--On initialise la variable @dbname avec la premiΦre valeur renvoyΘe par la requΩte
FETCH next from alldbname INTO @dbname
--Tant que l'on a des rΘsultats
WHILE @@fetch_status = 0
BEGIN
-- Si la base de donnΘes n'est pasune base system
if @dbname <> 'master' and @dbname <> 'model' and @dbname <> 'msdb' and @dbname <> 'Northwind' and @dbname <> 'pubs' and @dbname <> 'tempdb'
BEGIN
-- On rΘcupΦre la date du dernier backup
SET @Para = N'@lastbckp datetime OUTPUT'
set @sql = 'set nocount on '
set @sql = @sql + ' select @lastbckp = backup_finish_date from backupset where database_name = ''' + @dbname + ''' and type = ''D'' order by backup_finish_date asc'
exec sp_executesql @sql, @Para, @lastbckp = @plastbckp OUTPUT
-- Si la date du dernier backup est diffΘrente de la date du jour ou de la date de la veille
-- On affiche un message d'erreur
if CONVERT(char(8),@plastbckp,3)!= CONVERT(char(8),getdate(),3) and datename(dy,@plastbckp) != (datename(dy,getdate()) -1)
set @sortie = @sortie+'Probleme : le dernier backup de la base '+@dbname+' date du ' + CONVERT(char(8),@plastbckp,3)+'
'
END
FETCH next from alldbname INTO @dbname
END
-- S'il y a eu des erreurs (longeur de sortie > 0) alors on affiche le nom du serveur et les erreurs
if LEN(@sortie)> 0
BEGIN
PRINT ' '
PRINT @@servername+' : '
PRINT ' '
PRINT @sortie
END
CLOSE alldbname
DEALLOCATE alldbname
GO |
Le problème que j'ai est le suivant :
grâce a cette procédure j'envoie des mails tous les matins qui me donnent un compte rendu des backups en erreur. Je n'en ai pas eu ce matin, hors sur un serveur la sauvegarde n'as pas eu lieu depuis un moment.
Ce qui signifierai que l'on a une entrée dans la table backupset même si la sauvegarde échoue ce qui m'inquiète un peu. Ya t'il un moyen plus fiable de vérifer si la sauvegarde est correcte ? :(
Merci d'avance.