В некоторых случая требуется почистить SQL базы от множества Events, которые переполнили базы.
Следующим запросом выясняем и запоминаем EventID, который заполнил базу больше всего:
select top 10 Count(e.ThreatEventID) as [Count], e.ThreatEventID as EventID, f.[Description] as 'Event Description', e.AnalyzerName as 'Event Source' from EPOEvents e (nolock) left join EPOEventFilterDesc (nolock) f on e.ThreatEventID = f.EventId where f.[Language] = '0409' group by e.ThreatEventID, f.[Description], e.AnalyzerName order by [Count] desc
Далее подставляем этот EventID в запрос по очистке:
declare @EventID int = 1092; declare @Is510 bit; declare @rowcount int = 1; if OBJECT_ID('tempdb.dbo.#PurgeEvents', 'U') IS NOT NULL drop table #PurgeEvents; create table #PurgeEvents (AutoID bigint); if exists (select 1 from sys.objects where [name] = 'EPOEventsMT' and type = 'SN') set @Is510 = 1; else set @Is510 = 0; while (@rowcount > 0) begin begin transaction; delete top(10000) EPOEvents output deleted.AutoID into #PurgeEvents where ThreatEventID = @EventID; if (@Is510 = 1) delete A from EPOEventsReference A join #PurgeEvents B ON A.AutoID = B.AutoID; set @rowcount = @@ROWCOUNT; truncate table #PurgeEvents; commit transaction; if @rowcount > 0 waitfor delay '00:00:05'; end drop table #PurgeEvents;
После данной процедуре остается только сделать Shrink базе.