/*AT Server Level*/
[ddl_trig_database]
ON ALL SERVER
FOR DROP_DATABASE
AS
declare @results varchar(max)
declare @subjectText varchar(max)
declare @databaseName VARCHAR(255)
SET @subjectText = 'DATABASE Droped on ' + @@SERVERNAME + ' by ' + SUSER_SNAME()
SET @results =
(SELECT EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)'))
SET @databaseName = (SELECT EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]', 'VARCHAR(255)'))
--Uncomment the below line if you want to not be alerted on certain DB names
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'DB_Profile',
@recipients = 'abc@xyzcom',
@body = @results,
@subject = @subjectText
GO
ENABLE TRIGGER [ddl_trig_database] ON ALL SERVER
GO
/*AT DB Level*/
[TRG_Monitor]
ON DATABASE
AFTER
CREATE_TABLE,ALTER_TABLE,CREATE_PROCEDURE,DROP_TABLE,DROP_PROCEDURE,CREATE_VIEW,DROP_VIEW,ALTER_VIEW,CREATE_FUNCTION,DROP_FUNCTION,ALTER_FUNCTION
AS
BEGIN
SET NOCOUNT ON
DECLARE @Object_Name SYSNAME,@Obj_Type varchar(25),@EventType varchar(25),@Mail_Flag Bit,@Act_U_Name Varchar(100),@Emp_id Varchar(10),@Receipt Varchar(1000),@CC Varchar(500),@App Varchar(100)
Set @Mail_Flag = 0
Set @Act_U_Name = ''
Set @Emp_id = ''
SELECT @Object_Name = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','SYSNAME')
SELECT @Obj_Type = EVENTDATA().value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(25)')
SELECT @EventType = EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(50)')
Select @EventType = Replace(Upper(@EventType),'_',SPACE(1))
Select @Act_U_Name = Isnull([USER_NAME],''),@Emp_id = Isnull(Emp_Id,'') from [User_Empid_Mapping]
Where PC_Name = HOST_NAME() And Active_Flag = 'A'
declare @results varchar(max)
declare @subjectText varchar(max)
--declare @databaseName VARCHAR(255)
Select @subjectText = Convert(Varchar(255),@EventType)+' ALERT on '+DB_NAME()+' database - ' + @@SERVERNAME
SET @results =
(SELECT EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','SYSNAME'))
--SET @databaseName = (SELECT EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]', 'VARCHAR(255)'))
-- ==================================================================
Insert Into DDL_Track(ServerName,DBName,HostName,IP_Address,UserName,UserName_Actual,ObjectType,ObjectName)
Select @@SERVERNAME,DB_Name(),HOST_NAME(),CONVERT(Varchar(50),CONNECTIONPROPERTY('client_net_address')), SUSER_SNAME(),@Act_U_Name,@EventType,@Object_Name
-- =================================================================
-- Set Mail flag
-- =================================================================
If Not Exists(Select 1 from DBA_User_Info Where UserName = SUSER_SNAME())
Begin
If(Left(@EventType,6) ='CREATE' OR @EventType ='DROP_TABLE')
Set @Mail_Flag = 1
End
--If(@EventType In('DROP_TABLE','DROP_PROCEDURE','DROP_FUNCTION','DROP_VIEW'))
If(@EventType ='DROP_PROCEDURE' OR @EventType ='DROP_VIEW' OR @EventType ='DROP_FUNCTION')
Set @Mail_Flag = 1
If(@Mail_Flag = 1)
Begin
-- =============================================================
--Check for the recpient; If DB is not configured then set default
-- =============================================================
If Exists(Select Top 1 [DB_ID] from DB_Blocking_Reciepient_List Where [DB_Name] = DB_Name())
Begin
Select @Receipt = recipients,@CC = CC,@App = [Application_Name] from DB_Blocking_Reciepient_List Where [DB_Name] = DB_Name()
End
Else
Begin
Select @Receipt = 'abc@xyz.com',@CC = '',@App = ''
End
-- =============================================================
-- Header portion
-- =============================================================
Select @results = '<td><font face="Calibri"><font color="#2471A3"><font style="font-size: 11pt;">Hi All,</font></font></font></td><br></tr>'
--Select @results = @results + '<td><font face="Calibri"><font color="#2471A3"><font style="font-size: 11pt;">'+'The operation <b>'+Convert(Varchar(255),@EventType)+'</b> (for object name - <font color="Red"><b>'+Convert(Varchar(255),@Object_Name)+'</font></b>) has been occurred on <b>'+DB_Name()+'</b> database of <b>' + @@SERVERNAME + '</b> by <b>' + SUSER_SNAME() +'</b> (on host name <font color="Red"><b>' + HOST_NAME() +'</b></font> IP Address - '+CONVERT(Varchar(50),CONNECTIONPROPERTY('client_net_address'))+').<br>Please do the needful if required. </font></font></font></td><br>'
Select @results = @results + '<td><font face="Calibri"><font color="#2471A3"><font style="font-size: 11pt;">'+'The operation <b>'+Convert(Varchar(255),@EventType)+'</b> (for object name - <font color="Red"><b>'+Convert(Varchar(255),@Object_Name)+'</font></b>) has been occurred on <b>'+DB_Name()+'</b> database of <b>' + @@SERVERNAME + '</b> by <b>' + SUSER_SNAME() +'</b>.<br>Please find below the additional details and do the needful if required. </font></font></font></td><br>'
-- =============================================================
-- Table portion
-- =============================================================
Select @results = @results+'<br><font color="#1A5276"><td><font face="Calibri"><font style="font-size: 15pt;"><b>Additional Information:</b></font></font></font></td></tr><br>'
--1 Server_name ,
Set @results = @results + '<table border=8 ><tr><td bgcolor="#E7F5FE"><font color="#2471A3"><font face="Calibri"><font style="font-size: 11pt;">'+'Server Name'+'</font></font></font></td>'
Set @results = @results + '<td><font face="Calibri"><font color="#1A5276"><font style="font-size: 11pt;">'+Convert(Varchar(100),@@SERVERNAME)+'</font></font></font></td></tr>'
--2 DB_name
Set @results = @results + '<td bgcolor="#E7F5FE"><font color="#2471A3"><font face="Calibri"><font style="font-size: 11pt;">'+'Database Name'+'</font></font></font></td>'
Set @results = @results + '<td><font face="Calibri"><font color="#1A5276"><font style="font-size: 11pt;">'+Convert(Varchar(100),DB_Name())+'</font></font></font></td></tr>'
--3 HostName
Set @results = @results + '<td bgcolor="#E7F5FE"><font color="#2471A3"><font face="Calibri"><font style="font-size: 11pt;">'+'Host Name'+'</font></font></font></td>'
Set @results = @results + '<td><font face="Calibri"><font color="#1A5276"><font style="font-size: 11pt;">'+Convert(Varchar(100),HOST_NAME())+'</font></font></font></td></tr>'
--4 IP_Address
Set @results = @results + '<td bgcolor="#E7F5FE"><font color="#2471A3"><font face="Calibri"><font style="font-size: 11pt;">'+'IP Address'+'</font></font></font></td>'
Set @results = @results + '<td><font face="Calibri"><font color="#1A5276"><font style="font-size: 11pt;">'+Convert(Varchar(100),CONNECTIONPROPERTY('client_net_address'))+'</font></font></font></td></tr>'
--5 Emp Id
If(LEN(@Emp_id)>1)
Begin
Set @results = @results + '<td bgcolor="#E7F5FE"><font color="#2471A3"><font face="Calibri"><font style="font-size: 11pt;">'+'Employee Id'+'</font></font></font></td>'
Set @results = @results + '<td><font face="Calibri"><font color="#1A5276"><font style="font-size: 11pt;">'+@Emp_id+'</font></font></font></td></tr>'
End
--6 UserName
Set @results = @results + '<td bgcolor="#E7F5FE"><font color="#2471A3"><font face="Calibri"><font style="font-size: 11pt;">'+'Login Name'+'</font></font></font></td>'
Set @results = @results + '<td><font face="Calibri"><font color="#1A5276"><font style="font-size: 11pt;">'+SUSER_SNAME()+'</font></font></font></td></tr>'
If(LEN(@Act_U_Name)>1)
Begin
--7 UserName_Actual
Set @results = @results + '<td bgcolor="#E7F5FE"><font color="#2471A3"><font face="Calibri"><font style="font-size: 11pt;">'+'User Name'+'</font></font></font></td>'
Set @results = @results + '<td><font face="Calibri"><font color="#1A5276"><font style="font-size: 11pt;">'+@Act_U_Name+'</font></font></font></td></tr>'
End
--8 ObjectType
Set @results = @results + '<td bgcolor="#E7F5FE"><font color="#2471A3"><font face="Calibri"><font style="font-size: 11pt;">'+'Event Type'+'</font></font></font></td>'
Set @results = @results + '<td><font face="Calibri"><font color="#1A5276"><font style="font-size: 11pt;"><font color="Red"><b>'+@EventType+'</font></b></font></font></font></td></tr>'
--9 ObjectName
Set @results = @results + '<td bgcolor="#E7F5FE"><font color="#2471A3"><font face="Calibri"><font style="font-size: 11pt;">'+'Object Name'+'</font></font></font></td>'
Set @results = @results + '<td><font face="Calibri"><font color="#1A5276"><font style="font-size: 11pt;">'+@Object_Name+'</font></font></font></td></tr>'
Select @results = @results+'</table>'
-- =============================================================
-- Footer Portion
-- =============================================================
Select @results = @results+'<br><br><td><font color="#2471A3"><font face="Calibri"><font style="font-size: 11pt;">Thanks & Regards,</font></font></font></td><br><br></tr>'
Select @results = @results+'<td><b><font color="#2471A3"><font face="Calibri"><font style="font-size: 11pt;">Team</font></font></font></b></td><br></tr>'
Select @results = @results+'<br>'
Select @results = @results+'<td><b><font color="Blue"><font face="Calibri"><font style="font-size: 11pt;">Note : System generated mail, For any concern revert back to DBA team (abc@xyz.com).</font></font></font></b></td></tr>'
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Profile_DB',
@recipients = 'abc@xyz.com',
@body = @results,
@subject = @subjectText,
@body_format = 'HTML'
/*Emp_ID;User_Name;PC_Name;Proj_ID;Network_ID;Active_Flag
DDL_Track - Row_id;ServerName;DBName;HostName;IP_Address;UserName;UserName_Actual;ObjectType;ObjectName;Time_Stamp */
End
SET NOCOUNT OFF
END
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
DISABLE TRIGGER [TRG_Monitor] ON DATABASE
GO
ENABLE TRIGGER [TRG_Monitor] ON DATABASE
GO
No comments:
Post a Comment