Below script can be used to capture DDL modifications into a table and trigger an email notification for the same.
Script to create a trigger : This will capture even the user and hostname.
USE DBAAdmin
GO
/****** Object: DDLTrigger [object_change_notification] Script Date: 5/3/2018 11:54:06 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [object_change_notification]
ON DATABASE
FOR CREATE_TABLE,DROP_TABLE,ALTER_TABLE,CREATE_VIEW,DROP_VIEW,ALTER_VIEW,CREATE_PROCEDURE,DROP_PROCEDURE,ALTER_PROCEDURE
AS
Declare @Hostname varchar(20) = HOST_NAME()
DECLARE @sys_usr char(30) SET @sys_usr = SYSTEM_USER
Declare @executiontime datetime =getdate()
DECLARE @data XML = EVENTDATA()
DECLARE @eventType nvarchar(100)= CONCAT ('EVENT: ',@data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),+ CHAR(13))
DECLARE @TsqlCommand nvarchar(2000)=CONCAT('COMMAND: ',@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)'))
DECLARE @BodyMsg nvarchar(2100)=CONCAT(@eventType , @sys_usr, @Hostname ,@executiontime , @TsqlCommand)
insert into DBAAdmin.dbo.Audit_Object select @sys_usr,@Hostname,@executiontime,@data,@eventType,@TsqlCommand,@BodyMsg
GO
Use the below, stored procedure to schedule a job as per needs( I suggest daily once at 9PM). This will update all the modification done in the day.
Use DBAAdmin
go
Create Procedure Audit_Notification
As
DECLARE @Body VARCHAR(8000)
DECLARE @Qry varchar(8000)
if exists (select * from OperationsDB.dbo.Audit_Object where convert(DATE,executiontime)=CONVERT(date,getdate()-1)
Begin
DECLARE @tab char(1) = CHAR(9)
SET @Body ='Hi All,'
SET @Qry='set nocount on;
select * from OperationsDB.dbo.Audit_Object where convert(DATE,executiontime)=CONVERT(date,getdate()-1)
'
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'MAIL_Profile',
@recipients = 'adil9025@gmail.com',
--@blind_copy_recipients='mailid',
@body= @Body,
@query=@Qry,
@subject='The following object(s) was/were changed',
@attach_query_result_as_file = 1,
@query_attachment_filename='AuditSheet.xls',
@query_result_separator=@tab,
@query_result_no_padding=1
End
go
By Mohammed Adil
No comments:
Post a Comment