Files
sql-scripts/DBG - check_db_mail.sql
Thierry Schork 42fb2e851c cleanup
2023-01-05 11:32:51 +01:00

97 lines
4.5 KiB
Transact-SQL

SET NOCOUNT ON;
USE [master];
DECLARE @SQLAgentEnabled INT = 0,
@SQLAgentStarted INT = 0,
@DBMailEnabled INT = 0,
@MailProfileEnabled INT = 0,
@MailAccountEnabled INT = 0,
@SQLAgentMailEnabled INT = 0,
@SQLAgentMailProfileEnabled sysname,
@failed_email_error INT = 0;
-- SQL Server Agent enabled
SELECT @SQLAgentEnabled = CAST(value_in_use AS INT)
FROM sys.configurations
WHERE [name] = 'Agent XPs';
-- SQL Server Agent status
IF (SELECT CAST(SERVERPROPERTY('Edition') AS VARCHAR(30))) NOT LIKE 'Express Edition%'
BEGIN
SELECT @SQLAgentStarted = CASE
WHEN status_desc = 'Running' THEN 1
ELSE 0 END
FROM sys.dm_server_services
WHERE servicename LIKE 'SQL Server Agent%';
END;
-- SQL Database Mail is enabled
SELECT @DBMailEnabled = CAST(value_in_use AS INT)
FROM sys.configurations
WHERE [name] = 'Database Mail XPs';
-- @SQLAgentMailEnabled
SELECT @MailProfileEnabled = CASE
WHEN COUNT(*) > 0 THEN 1
ELSE 0 END
FROM msdb.dbo.sysmail_profile;
-- @MailAccountEnabled
SELECT @MailAccountEnabled = CASE
WHEN COUNT(*) > 0 THEN 1
ELSE 0 END
FROM msdb.dbo.sysmail_account;
-- SQL Server Agent is enabled to use Database Mail
EXECUTE master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent',
N'UseDatabaseMail',
@SQLAgentMailEnabled OUTPUT;
-- SQL Server Agent is enabled to use Database Mail and Mail Profile is assigned
EXECUTE master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent',
N'DatabaseMailProfile',
@SQLAgentMailProfileEnabled OUTPUT;
-- Check if there are failed email send in the last 7 days
SELECT @failed_email_error = CASE
WHEN COUNT(*) > 0 THEN 1
ELSE 0 END
FROM msdb.dbo.sysmail_event_log
WHERE event_type = 'error'
AND log_date > DATEADD(DAY, -7, GETDATE());
-- Final report
SELECT @@SERVERNAME AS Server_Name,
CAST(GETDATE() AS SMALLDATETIME) AS Run_Date,
MailsAreSent = @SQLAgentEnabled * @SQLAgentStarted * @DBMailEnabled * @MailProfileEnabled * @MailAccountEnabled
* @SQLAgentMailEnabled * (CASE
WHEN @SQLAgentMailProfileEnabled IS NOT NULL THEN 1
ELSE 0 END) * (CASE
WHEN ISNULL(@failed_email_error, 0) = 0 THEN 1
ELSE 0 END),
Notes = CASE
WHEN CAST(SERVERPROPERTY('Edition') AS VARCHAR(30)) LIKE 'Express Edition%' THEN
'Express Edition, DB Mail not supported'
ELSE
CASE
WHEN @SQLAgentEnabled = 0 THEN 'SQL Agent disabled; '
ELSE '' END + CASE
WHEN @DBMailEnabled = 0 THEN 'DB Mail disabled; '
ELSE '' END
+ CASE
WHEN @MailProfileEnabled = 0 THEN 'Mail Profile disabled; '
ELSE '' END + CASE
WHEN @MailAccountEnabled = 0 THEN 'Mail Account disabled; '
ELSE '' END
+ CASE
WHEN @SQLAgentMailEnabled = 0 THEN 'SQL Agent Mail disabled; '
ELSE '' END + CASE
WHEN @SQLAgentMailProfileEnabled IS NOT NULL THEN ''
ELSE 'SQL Agent Mail Profile disabled; ' END
+ CASE
WHEN @failed_email_error > 0 THEN 'failed email(s) during last 7 days; '
ELSE '' END
END