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'
| Host Name |
SPID |
Database Name |
Schema Name |
Object Name |
Event Type |
Application Name |
Post Time |
' + @html_table + N'
'
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