USE [HCITools] GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[mon_DDL_Audit_Alerts]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[mon_DDL_Audit_Alerts] GO USE [HCITools] GO SET ANSI_NULLS ON GO CREATE PROCEDURE [dbo].[mon_DDL_Audit_Alerts] @in_debug tinyint = 0 AS /*============================================================================= Explication du traitement realise par la SP ------------------------------------------- La SP va rechercher les modifications de DDL dans [master].[dba].[DDL_audit] Contexte d'utilisation ---------------------- Appelé depuis le job D92120 - DDL Audit Alerts Parametres ---------- @in_debug : non utilisé Creation : 13.04.21 / RTC Modifications : 11.08.2021 / spe : #TFS65583# Migrate personal email address from [hcisolutions.ch] to [galenica.com] =============================================================================*/ SET QUOTED_IDENTIFIER ON DECLARE @subject NVARCHAR(MAX), @html_msg NVARCHAR(MAX), @html_table NVARCHAR(MAX) /* Run only on centrals Validation and Dev */ IF NOT EXISTS (SELECT 1 FROM [master].[cfg].[InstanceContext] WHERE [Business] = 'TPCENT' AND [TYPE] in ('DEVE','VALI')) RETURN BEGIN TRY /* Formatage du message et envoi */ SELECT @subject = @@SERVERNAME + ' - DDL Audit' SET @html_table = N'' SELECT @html_table = @html_table + '' + '' + DA_Host_Name + '' + '' + ISNULL(SPID,'') + '' + '' + ISNULL(DatabaseName,'') + '' + '' + ISNULL(SchemaName,'') + '' + '' + ISNULL(ObjectName,'') + '' + '' + ISNULL(EventType,'') + '' + '' + DA_App_Name + '' + '' + CONVERT(NVARCHAR(25),PostTime) + '' + '' FROM (SELECT DA_Host_Name, DA_Event_Xml.value('(./EVENT_INSTANCE/SPID)[1]','NVARCHAR(MAX)') AS SPID, DA_Event_Xml.value('(./EVENT_INSTANCE/PostTime)[1]','NVARCHAR(MAX)') AS PostTime, DA_App_Name, DA_Event_Xml.value('(./EVENT_INSTANCE/EventType)[1]','NVARCHAR(MAX)') AS EventType, DA_Event_Xml.value('(./EVENT_INSTANCE/DatabaseName)[1]','NVARCHAR(MAX)') AS DatabaseName, DA_Event_Xml.value('(./EVENT_INSTANCE/SchemaName)[1]','NVARCHAR(MAX)') AS SchemaName, DA_Event_Xml.value('(./EVENT_INSTANCE/ObjectName)[1]','NVARCHAR(MAX)') AS ObjectName FROM [master].[dba].[DDL_audit] WHERE ISNULL(DA_App_Name,'') NOT IN ('SQLCMD','.Net SqlClient Data Provider', 'ActivePharmacy.ArizonaServerService', 'ActivePharmacy.ActivePosClientService', 'ActivePharmacyStock', 'Microsoft® Windows® Operating System', 'SQLAgent - Initial Boot Probe', 'SQLAgent - Enabling/disabling Agent XPs', 'Microsoft SQL Server', 'APS® TriaOne-Cash' ) AND DA_App_Name not like 'SQLAgent - TSQL%' AND ISNULL(DA_Event_Xml.value('(./EVENT_INSTANCE/DatabaseName)[1]','NVARCHAR(MAX)'),'') NOT IN ('tempdb','ArizonaCUST','master','PharmIndexTP') AND DA_Event_Xml.value('(./EVENT_INSTANCE/PostTime)[1]','NVARCHAR(MAX)') > GETDATE()-1 ) AS myEventsTable GROUP BY DA_Host_Name, SPID, DA_App_Name, EventType, DatabaseName, SchemaName, ObjectName, PostTime ORDER BY DA_Host_Name, DatabaseName, SchemaName, ObjectName, PostTime ASC IF @@ROWCOUNT > 0 BEGIN SET @html_msg = N'

DDL Audit by SQL operators

' + N'' + N'' + @html_table + N'
Host Name SPID Database Name Schema Name Object Name Event Type Application Name Post Time
' EXEC msdb.dbo.sp_send_dbmail @recipients= 'laurent.perroud@galenica.com;raphael.mognetti@galenica.com', @subject = @subject, @body = @html_msg, @body_format = 'HTML' ; END END TRY BEGIN CATCH /* Traitement des erreurs (avec RaiseError) */ EXEC dbo.get_Error_Info @in_RaiseError = 1 END CATCH