Files
sql-scripts/TPDT-268 - ACP in task sequence/dba_storedProcedures/bkp_Purge_Log.sql
2024-03-07 16:52:14 +01:00

126 lines
3.0 KiB
Transact-SQL

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