-- Nibble Delete Job History USE MSDB GO DECLARE @OldestJobHistoryDate DATETIME DECLARE @DaysToLeave INT DECLARE @DaysToDeleteAtOnce INT DECLARE @DeleteDate DATETIME DECLARE @Counter INT DECLARE @CounterText VARCHAR(100) DECLARE @datepart INT SELECT @OldestJobHistoryDate = convert(datetime,rtrim(run_date)) FROM msdb..sysjobhistory WHERE instance_id = (select MIN(instance_id) FROM msdb..sysjobhistory) SELECT @OldestJobHistoryDate SET @DaysToLeave = 30 SET @DaysToDeleteAtOnce = 1 SELECT @Counter = DATEDIFF(DAY,@OldestJobHistoryDate,GETDATE()) WHILE @Counter >= @DaysToLeave BEGIN SET @CounterText = CONVERT(VARCHAR(30),GETDATE(),21) + ' processing ' + CONVERT(VARCHAR(30),DATEADD(DAY, -@Counter,GETDATE()),21) SELECT @DeleteDate = CONVERT(VARCHAR(30),DATEADD(DAY, -@Counter,GETDATE()),21) RAISERROR (@CounterText , 10, 1) WITH NOWAIT SET @datepart = CONVERT(INT, CONVERT(VARCHAR, @DeleteDate, 112)) DELETE FROM msdb.dbo.sysjobhistory WHERE (run_date < @datepart) SELECT @Counter = @Counter - @DaysToDeleteAtOnce END GO
Thursday, 23 June 2011
SQL Sysadmin : Clear Job History (nibble delete)
This post is a minor change to my Clear Backup History (nibble delete) script to apply the same technique to Deleting Sql Agent Job history.
If you find a server where no one has done this for a while (ever?) or where maintenance plans are missing, you'll need this script.
Once again, nibble deleting history tables prevents large transactions that could cause server slowdowns.
This works, 1 day at a time, starting with the oldest record.
If you are wondering why I do this rather than looping sp_purge_jobhistory, that is because it only takes a date parameter on sql 2005+
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment