119 lines
3.0 KiB
Transact-SQL
119 lines
3.0 KiB
Transact-SQL
USE [HCITools]
|
|
GO
|
|
|
|
IF EXISTS(SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CleanUp_History]') AND type in (N'P', N'PC'))
|
|
DROP PROCEDURE [dbo].[CleanUp_History]
|
|
GO
|
|
|
|
SET ANSI_NULLS ON
|
|
GO
|
|
|
|
SET QUOTED_IDENTIFIER ON
|
|
GO
|
|
|
|
CREATE PROCEDURE [dbo].[CleanUp_History]
|
|
AS
|
|
/*=============================================================================
|
|
|
|
Explication du traitement realise par la SP
|
|
-------------------------------------------
|
|
La SP va purger l'historique des jobs plus ancien de 3 mois
|
|
|
|
Contexte d'utilisation
|
|
----------------------
|
|
Appelé depuis le job D93010 - Daily clean-up
|
|
|
|
Parametres
|
|
----------
|
|
|
|
Creation : 28.10.16 / FLA
|
|
|
|
Modifications : 08.03.2018 / RTC Reduce history for Repl-Distribution category jobs
|
|
09.02.2021 / SPE #TFS63542# - Adapt purge DR jobs daily treatment
|
|
18.02.2021 / SPE #TFS63542# - Adapt purge DR jobs daily treatment - Resolve bug Oldest_date at the top of cursor
|
|
|
|
=============================================================================*/
|
|
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @job_id UNIQUEIDENTIFIER,
|
|
@Oldest_date DATETIME,
|
|
@tot INT,
|
|
@daycount SMALLINT
|
|
|
|
BEGIN TRY
|
|
|
|
/* PURGE MORE THAN 3 MONTHS */
|
|
SET @Oldest_date = dateadd(mm,-3,GETDATE())
|
|
EXEC msdb..sp_delete_backuphistory @oldest_date=@Oldest_date
|
|
EXEC msdb..sp_maintplan_delete_log @oldest_time=@Oldest_date
|
|
EXEC msdb..sysmail_delete_mailitems_sp @sent_before=@Oldest_date
|
|
|
|
DECLARE c_jobs CURSOR LOCAL FORWARD_ONLY STATIC FOR
|
|
SELECT jobs.job_id
|
|
FROM msdb..sysjobs jobs
|
|
|
|
OPEN c_jobs
|
|
|
|
FETCH NEXT FROM c_jobs
|
|
INTO @job_id
|
|
|
|
WHILE @@fetch_status <> -1
|
|
BEGIN
|
|
IF @@fetch_status <> -2
|
|
BEGIN
|
|
|
|
SET @Oldest_date = dateadd(mm,-3,GETDATE())
|
|
|
|
/* PURGE MORE THAN 3 MONTHS JOB BY JOB */
|
|
EXEC msdb.dbo.sp_purge_jobhistory
|
|
@job_id = @job_id,
|
|
@oldest_date = @Oldest_date
|
|
|
|
/* PURGE ALL IF MORE THAN 2000 HISTORY DAY BY DAY */
|
|
SELECT @tot = count(*)
|
|
FROM msdb.dbo.sysjobhistory h with (nolock)
|
|
JOIN msdb.dbo.sysjobs j with (nolock)
|
|
ON j.job_id = h.job_id
|
|
WHERE j.job_id = @job_id
|
|
|
|
SET @daycount = -90
|
|
|
|
WHILE (@tot > 2000)
|
|
BEGIN
|
|
SET @Oldest_date = dateadd(dd,@daycount,GETDATE())
|
|
|
|
EXEC msdb.dbo.sp_purge_jobhistory
|
|
@job_id = @job_id,
|
|
@oldest_date = @Oldest_date
|
|
|
|
SET @daycount = @daycount + 1
|
|
|
|
SELECT @tot = count(*)
|
|
FROM msdb.dbo.sysjobhistory h with (nolock)
|
|
JOIN msdb.dbo.sysjobs j with (nolock)
|
|
ON j.job_id = h.job_id
|
|
WHERE j.job_id = @job_id
|
|
|
|
END
|
|
END
|
|
|
|
FETCH NEXT FROM c_jobs
|
|
INTO @job_id
|
|
|
|
END
|
|
|
|
CLOSE c_jobs
|
|
DEALLOCATE c_jobs
|
|
|
|
/*---------------------- Traitement des erreurs ----------------------*/
|
|
END TRY
|
|
BEGIN CATCH
|
|
|
|
/* Traitement des erreurs (avec RaiseError) */
|
|
EXEC dbo.get_Error_Info @in_RaiseError = 1
|
|
|
|
END CATCH
|
|
|
|
GO
|