USE [HCITools] GO /****** Object: StoredProcedure [dbo].[bkp_Dump] Script Date: 10/15/2015 10:58:14 ******/ IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[bkp_Dump]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[bkp_Dump] GO USE [HCITools] GO /****** Object: StoredProcedure [dbo].[bkp_Dump] Script Date: 10/15/2015 10:58:14 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[bkp_Dump] @in_debug int = null, @in_Recovery_Model varchar(25) = null AS /*============================================================================= Explication du traitement realise par la SP ------------------------------------------- Cette SP sert à créer les backups des bases de données. Suivant la version de SQL Server, la compression se fait ou pas avec la possibilité de choisir les bases par mode de recovery Contexte d'utilisation ---------------------- Cette SP est appelée par le D91010 - Backup of several databases D91040 - Backup of simple databases D91050 - Backup of full databases Parametres ---------- @in_debug : Si 1 alors on fait un print des commandes de backup @@in_Recovery_Model : Choix du mode de recovery des bases. si null : All recovery model sinon recovery model défini Creation : 15.10.15 / FLA Modifications : 21.07.16 / FLA : Séléction uniquement des bases de données online (state = 0) 28.11.16 / FLA : Correct bug in checking version 24.05.17 / FLA : Ajout du choix du mode de recovery des bases à backuper 28.08.18 / FLA : Suppression gestion version car bug detecté et plus nécessaire 17.03.22 / FLA : Change DBA mail =============================================================================*/ set nocount on; declare @result_sp int, @errno int, @errmsg varchar(255) /*------------------- Declaration des variables --------------------*/ declare @name varchar (255), @cmd varchar (8000), @messageError varchar (8000), @xml XML, @delimiter VARCHAR(1), @param_group_counter_list NVARCHAR(3000) IF @in_Recovery_Model is null SET @in_Recovery_Model = 'FULL,SIMPLE,BULK-LOGGED' SELECT @param_group_counter_list = HCIP_value FROM dbo.HCI_PARAMS WHERE HCIP_key = 'BKP_NOT_DB' SET @delimiter = ',' SET @xml = CAST((''+REPLACE(@param_group_counter_list, @delimiter, '')+''+''+REPLACE(@in_Recovery_Model, @delimiter, '')+'') AS XML) declare c_databases cursor local forward_only static for SELECT name FROM sys.databases WHERE LOWER(name) not in (SELECT C.value('.', 'varchar(3000)') AS value FROM @xml.nodes('X') AS X(C)) AND state = 0 AND recovery_model_desc IN (SELECT C.value('.', 'varchar(3000)') AS value FROM @xml.nodes('Y') AS X(C)) ORDER BY name /*------------ Affectation des parametres aux variables ------------*/ select @errno = 0 ; SET @messageError = '' ; SET @errmsg = '' ; /*-------------------------- Traitement ---------------------------*/ open c_databases ; FETCH NEXT FROM c_databases into @name ; while @@fetch_status = 0 begin /* DUMP */ select @cmd = 'BACKUP DATABASE [' + @name + '] TO [' + @name + '_Dump] WITH INIT, NOUNLOAD, NAME = N''' + @name + ' backup'', SKIP , STATS = 10, FORMAT, COMPRESSION, CHECKSUM; RESTORE VERIFYONLY FROM [' + @name + '_Dump];' ; BEGIN TRY IF (@in_debug = 1) print @cmd; ELSE exec (@cmd) ; END TRY BEGIN CATCH select @messageError = @messageError + 'Backup failed : ' + @name + ' ' + ERROR_MESSAGE() + CHAR(13) ; SET @errno = @errno + 1 ; END CATCH ; FETCH NEXT FROM c_databases into @name ; end ; close c_databases ; deallocate c_databases ; if @errno > 0 BEGIN exec aps_Send_Mail_with_template @in_param_varchar_2 = 'DBA_operator;', @in_job_type = 3, /* 3 = warning */ @in_param_varchar_3 = @messageError ; select @errno = 70003, @errmsg = '(BKP) Erreur lors du job de backup' goto error_99 END ; /*------------------ Retour au programme appelant -----------------*/ return(@@error); /*---------------------- Traitement des erreurs ----------------------*/ error_99: raiserror (@errmsg, 16, 1); return(@errno); GO