Copy the script to the maintenance Database and Create the Proc.
Run it per the instructuions.
Copy the script to the maintenance Database and Create the Proc.
Run it per the instructuions.
IF OBJECT_ID(N'[dbo].[usp_readFromErrorLog]') IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[usp_readFromErrorLog]
END
GO
Create Proc usp_readFromErrorLog (@dbmail_profile varchar(100) = NULL, @dbmail_recipient varchar(100) = NULL)
as
Begin
Begin TRY
/* Description: Sends Back Critical Alerts from ErrorLog occurred in the last 24 Hrs. You can even modify the data [Check @start and change the value]
RUN:=EXEC usp_readFromErrorLog
@dbmail_profile= 'Operators',
@dbmail_recipient = 'mymail@myemail.com';
*/
SET NOCOUNT ON
CREATE TABLE #temp
(
[ErrorLogDate] DATETIME,
[ProcessInfo] VARCHAR(50),
[Text] NVARCHAR(4000),
[CapturedDate] SMALLDATETIME NOT NULL default getdate()
);
CREATE TABLE #temp1
(
[ErrorLogDate] DATETIME,
[ProcessInfo] VARCHAR(50),
[Text] NVARCHAR(4000),
);
-- Extract data from errorlog older than a day
DECLARE @start varchar(40), @end varchar(40), @MinLogDate varchar(40);
SET @start = (select RTRIM(convert(varchar(40), GETDATE() - 1, 121)))
SET @end = (select RTRIM(convert(varchar(40), GETDATE(), 121)))
--PRint @start
--PRint @end
Insert into #temp1 ( ErrorLogDate , processinfo , [text] )
EXEC sp_readerrorlog 0,1
SET @MinLogDate = (select Min(Errorlogdate) from #temp1); -- 2015-05-14 02:50:43.220
-- Include the Kind Of Alerts from SQL ErrorLog.
Insert into #temp (ErrorLogDate, processinfo , text )
EXEC xp_readerrorlog 0, 1,N'Failed', N'Login' ,@start,@end , 'desc';
Insert into #temp (ErrorLogDate, processinfo , text )
EXEC xp_readerrorlog 0, 1,N' 5', N'State:' ,@start,@end , 'desc';
Insert into #temp (ErrorLogDate, processinfo , text )
EXEC xp_readerrorlog 0, 1, NULL, N'deadlock' ,@start,@end , 'desc';
Insert into #temp (ErrorLogDate, processinfo , text )
EXEC xp_readerrorlog 0, 1,NULL, N'fail' ,@start,@end , 'desc';
Insert into #temp (ErrorLogDate, processinfo , text )
EXEC xp_readerrorlog 0, 1,NULL, N'Warning' ,@start,@end , 'desc';
Insert into #temp (ErrorLogDate, processinfo , text )
EXEC xp_readerrorlog 0, 1, N'stack', N'dump' ,@start,@end , 'desc';
Insert into #temp (ErrorLogDate, processinfo , text )
EXEC xp_readerrorlog 0, 1, N'back', N'rolled' ,@start,@end , 'desc';
SELECT Count(*) AS [Failed Occurrence Count],
Substring(Substring(text, Charindex('''', text) + 1, Len(text) - Charindex('''', text)), 0,
Charindex('''', Substring(text, Charindex('''', text) + 1,
Len(text) - Charindex( '''', text)))) AS [Login Name],
Dateadd(dd, 0, Datediff(dd, 0, ErrorLogDate)) AS DATE_Captured
INTO #TEMP2 -- Enters data to Table.
FROM #temp
GROUP BY Substring(Substring(text, Charindex('''', text) + 1,
Len(text) - Charindex('''',
text)
), 0, Charindex('''', Substring(text,
Charindex('''', text)
+ 1,
Len(text) - Charindex(
'''', text)))),
Dateadd(dd, 0, Datediff(dd, 0, ErrorLogDate))
select * from #temp;
select * from #TEMP2
where [Login Name] like '%\%'
select * from #TEMP2
--SELECT PATINDEX('%\%',[Login Name])
--FROM #TEMP2
--where PATINDEX('%\%',[Login Name]) 0
DECLARE @bodyMsg nvarchar(max)
DECLARE @subject nvarchar(max)
DECLARE @tableHTML nvarchar(max)
DECLARE @Table NVARCHAR(MAX) = N''
IF (select count(*) from #temp) > 0
BEGIN
SELECT @subject = 'SQL Errorlog Events:= ' + ' '+ Substring(@@servername, 1, 20);
-- SELECT @body = 'Reading Crtitical Events from SQL ErrorLog:= ' + Substring(@@servername, 1, 20);
SET @tableHTML =
N'<H1> <Font Color="red"> SQL Server Errorlog Critical Events : </font> </H1>' +
N'<H3> <Font Color="red"> Server: ' + @@servername + '</H3></font>' +
N'<h3> <Font Color="red"> First Logged Date in the ErrorLog File := '+' <Font Color="magenta">' + @MinLogDate +' </h3></font>' +
N'<table border="1">' +
N'<tr> <th>Failed Occurrence Count</th>' +
N'<th>Login Name</th>
<th>CapturedDate</th></tr>' +
CAST ( ( SELECT td = count(*), '',
td = Substring(Substring(text, Charindex('''', text) + 1, Len(text) - Charindex('''', text)), 0,
Charindex('''', Substring(text, Charindex('''', text) + 1,
Len(text) - Charindex( '''', text)))) , '',
td = Convert(varchar(20),Dateadd(dd, 0, Datediff(dd, 0, ErrorLogDate)))
FROM #temp
GROUP BY Substring(Substring(text, Charindex('''', text) + 1,
Len(text) - Charindex('''',
text)
), 0, Charindex('''', Substring(text,
Charindex('''', text)
+ 1,
Len(text) - Charindex(
'''', text)))),
Dateadd(dd, 0, Datediff(dd, 0, ErrorLogDate))
FOR XML PATH('tr'), ELEMENTS
) AS NVARCHAR(MAX) ) +
N'</table>'
+ '<BR>' + '<BR>' + '<BR>' +
N'<table border="1">' +
N'<tr> <th>ErrorlogDate</th>
<th>ProcessInfo</th>' +
N'<th>Text</th>
<th>CapturedDate</th></tr>' +
CAST ( ( SELECT td = Convert(varchar(20), ErrorlogDate,120), '',
td = ProcessInfo, '',
--td = ISNULL(ObjName,'NO Data Found'), '',
td = [Text], '',
td = Convert(varchar(20), [CapturedDate], 120)
FROM #temp
ORDER By ErrorlogDate desc
FOR XML PATH('tr'), ELEMENTS
) AS NVARCHAR(MAX) ) +
N'</table>' ;
-- SHOW HTML Content
--SELECT (@tableHTML1);
-- DECLARE @subss VARCHAR(1024)
--DECLARE @bodys VARCHAR(1024)
--DECLARE @filename VARCHAR(50)
--SET @subss = 'File from: '+ CONVERT(VARCHAR, GETDATE())
--SET @bodys = 'attached file for the date '+ CONVERT(VARCHAR, GETDATE())
--SET @filename = 'file.txt'
IF (@dbmail_profile IS NOT NULL) OR (@dbmail_recipient IS NOT NULL)
BEGIN
-- Sending Email to Recipients.
EXEC msdb.dbo.Sp_send_dbmail
@profile_name = @dbmail_profile,
@recipients = @dbmail_recipient,
@subject = @subject,
@body = @tableHTML,
@importance = 'HIGH',
@body_format = 'HTML'
END
END
--@attach_query_result_as_file = 1,
--@query_attachment_filename ='C:\SQLJObOutput\dbcccheckdbOutPut.txt'
/*
--Test Queued Email. ...
Query 1 : SELECT [profile_id]
,[name]
,[description]
,[last_mod_datetime]
,[last_mod_user]
,'EXEC msdb.dbo.sp_send_dbmail
@profile_name = ''' + name + ''',
@recipients = ''mymail@myemail.com'',
@subject = ''Test'',
@body = ''Message'',
@body_format = ''HTML'';' AS TestSQL
FROM [msdb].[dbo].[sysmail_profile]
*/
-- Cleanup Table.
drop table #temp
drop table #temp1
drop table #TEMP2
SET NOCOUNT OFF
END TRY
begin catch
print ERROR_MESSAGE(); -- save to log, etc.
end catch
END