[SQL Server] Vérifier les sauvegardes (Utiliser OPENROWSET)

CREATE PROCEDURE [dbo].[usp_RapportBackup]

      @SERVEURS NVARCHAR(100)= NULL

      WITH EXECUTE AS OWNER

 AS

/*

Auteur : KHARROUBI Zouhaier

Date Création : 01/06/2009

Objectif : afficher le rapport des sauvegardes des serveurs SQLServer

--Important : le contenu du parametre @SERVEURS doit etre comme le suivant : 'SQLSERVER_1,SQLSERVER_2,SQLSERVER_3,'

*/

      SET DATEFORMAT DMY

 

      DECLARE @LISTE_SERVEUR VARCHAR(MAX)

      DECLARE @REQUETE NVARCHAR(1000)

      DECLARE @NOM_SRV_LIEN    VARCHAR(35)

      DECLARE @NOM_SERVEUR    VARCHAR(35)

      DECLARE @SEPARATEUR CHAR(1)

      DECLARE @POSITION INT

      DECLARE @DEBUT    INT

      DECLARE @TAILLE   INT  

      DECLARE @BACKUP_START_DATE DATETIME

 

      SET @SEPARATEUR = ','

      SET @BACKUP_START_DATE = CAST(FLOOR(CAST(DATEADD(DAY,-1,GetDate()) AS FLOAT)) AS DATETIME)

 

 

      SET NOCOUNT ON

 

      IF EXISTS(SELECT * FROM tempdb..sysobjects WHERE id = object_id(N'[tempdb]..[#BACKUP_DERNIER]'))

      DROP TABLE #BACKUP_DERNIER

 

      CREATE TABLE #BACKUP_DERNIER

    (

     SERVER_NAME NVARCHAR(35),

       DBASE_NAME NVARCHAR(35),

       BACKUP_START_DATE DATETIME

    )

      IF @SERVEURS IS NULL OR @SERVEURS='ALL'

            BEGIN

                  SET @LISTE_SERVEUR = 'SQLSERVER_1' + @SEPARATEUR + 'SQLSERVER_2' + @SEPARATEUR + 'SQLSERVER_3' + @SEPARATEUR

            END

      ELSE

            SET @LISTE_SERVEUR=@SERVEURS + @SEPARATEUR

           

      SET @POSITION = CHARINDEX(@SEPARATEUR, @LISTE_SERVEUR)

      SET @DEBUT = 1

      WHILE @POSITION <= LEN(@LISTE_SERVEUR) AND @POSITION>0

         BEGIN

            SET @TAILLE=@POSITION-@DEBUT

            SET @NOM_SRV_LIEN = SubString(@LISTE_SERVEUR, @DEBUT, @TAILLE ) 

            SET @DEBUT = @POSITION + 1

            SET @POSITION = CHARINDEX(@SEPARATEUR, @LISTE_SERVEUR,@POSITION+1)    

                 

                  SELECT @NOM_SERVEUR = dbo.ServerName(@NOM_SRV_LIEN)

                  IF @NOM_SERVEUR <> 'SQLSERVER_1'

                        BEGIN

                                         -- Vérifier la sauvegarde pour les serveurs liés

                             SET @REQUETE = N'INSERT INTO #BACKUP_DERNIER SELECT ''' + @NOM_SERVEUR + ''' AS ServerName,'

                             SET @REQUETE = @REQUETE + N'database_name, backup_start_date '

                             SET @REQUETE = @REQUETE + N'FROM OPENROWSET(''SQLNCLI'', ''Server=' + @NOM_SRV_LIEN + N';Trusted_Connection=yes;'','

                             SET @REQUETE = @REQUETE + N'''SELECT BK.database_name, BK.type, Max(BK.backup_start_date) backup_start_date '

                             SET @REQUETE = @REQUETE + N'FROM msdb..backupset BK '

                             SET @REQUETE = @REQUETE + N'JOIN master..sysdatabases DB ON DB.name=BK.database_name '  

                             SET @REQUETE = @REQUETE + N'WHERE type = ''''D'''''             

                             SET @REQUETE = @REQUETE + N'GROUP BY BK.database_name,BK.type'')'

 

                             END

                  Else

                        BEGIN

                             -- Vérifier la sauvegarde pour le serveurs principal

                             SET @REQUETE = N'INSERT INTO #BACKUP_DERNIER SELECT ''' + 'SQLSERVER_1' + ''' AS ServerName,'

                             SET @REQUETE = @REQUETE + N'BK.database_name, Max(BK.backup_start_date) backup_start_date '

                             SET @REQUETE = @REQUETE + N'FROM msdb..backupset BK '

                             SET @REQUETE = @REQUETE + N'JOIN master..sysdatabases DB ON DB.name=BK.database_name '

                             SET @REQUETE = @REQUETE + N'WHERE BK.type = ''' + 'D ' + ''''

                             SET @REQUETE = @REQUETE + N'GROUP BY BK.database_name'

                        END

                  EXEC  (@REQUETE)

         END

     

      SET NOCOUNT OFF

      SELECT * FROM #BACKUP_DERNIER

      ORDER BY SERVER_NAME,DBASE_NAME ASC

 

 

      DROP TABLE #BACKUP_DERNIER