USE [HCITools] GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[bkp_Purge_Log]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[bkp_Purge_Log] GO USE [HCITools] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[bkp_Purge_Log] @in_debug int = null, @in_NbDays smallint AS /*============================================================================= Explication du traitement realise par la SP ------------------------------------------- Cette SP sert à supprimer les anciens fichiers de log de plus de X jours Contexte d'utilisation ---------------------- Cette SP est appelée par le job DR91020 - Log-backup Parametres ---------- @in_debug : non utilisé @in_NbDays : nombre de jours de rétention des logs Creation : 28.10.16 / FLA Modifications : 17.03.2022 - FLA : Change DBA mail =============================================================================*/ set nocount on; /*------------------- Declaration des variables --------------------*/ declare @DB_name varchar (255), @messageError varchar(8000), @dt datetime, @result_xp int, @BackupLogFolder varchar (4000), @path varchar (4000) declare @t_result TABLE (result_text VARCHAR(200)) /*------------ Affectation des parametres aux variables ------------*/ SELECT @BackupLogFolder=HCIP_value FROM dbo.HCI_PARAMS WHERE HCIP_key = 'BKP_DIR_L' select @dt = DateAdd(dd, -@in_NbDays, GetDate()) SET @messageError = '' /*-------------------------- Traitement ---------------------------*/ BEGIN TRY declare c_databases cursor local forward_only static for SELECT name FROM sys.databases WHERE LOWER(name) not in ('model') AND recovery_model_desc = 'FULL' ORDER BY name open c_databases FETCH NEXT FROM c_databases into @DB_name while @@fetch_status = 0 begin select @path = @BackupLogFolder+ @DB_name; INSERT INTO @t_result(result_text) EXECUTE @result_xp = master.dbo.xp_delete_file 0,@path,N'trn',@dt,1 if (@result_xp <> 0) BEGIN SELECT @messageError = @messageError + @DB_name + ': '+ result_text + CHAR(13) FROM @t_result WHERE result_text IS NOT NULL END delete from @t_result; FETCH NEXT FROM c_databases into @DB_name end close c_databases deallocate c_databases /* S'il y a une erreur, on envoie un mail aux DBA */ IF @messageError <> '' BEGIN exec aps_Send_Mail_with_template @in_param_varchar_2 = 'DBA_operator;', @in_job_type = 3, /* 3 = warning */ @in_param_varchar_3 = @messageError RAISERROR ('Erreur dans la SP [dbo].[bkp_Purge_Log]',16,1) END /*---------------------- Traitement des erreurs ----------------------*/ END TRY BEGIN CATCH /* Traitement des erreurs (avec RaiseError) */ EXEC dbo.get_Error_Info @in_RaiseError = 1 END CATCH GO