initial commit
This commit is contained in:
BIN
OCTPDBA-345 - monitor dbmail/.vs/OCTPDBA-345/v15/.ssms_suo
Normal file
BIN
OCTPDBA-345 - monitor dbmail/.vs/OCTPDBA-345/v15/.ssms_suo
Normal file
Binary file not shown.
22
OCTPDBA-345 - monitor dbmail/OCTPDBA-345.ssmssln
Normal file
22
OCTPDBA-345 - monitor dbmail/OCTPDBA-345.ssmssln
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# SQL Server Management Studio Solution File, Format Version 18.00
|
||||
VisualStudioVersion = 15.0.28307.421
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{4F2E2C19-372F-40D8-9FA7-9D2138C6997A}") = "OCTPDBA-345", "OCTPDBA-345\OCTPDBA-345.ssmssqlproj", "{AB935609-D0BA-4D5E-8EA9-DAA22DEEAFBB}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Default|Default = Default|Default
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{AB935609-D0BA-4D5E-8EA9-DAA22DEEAFBB}.Default|Default.ActiveCfg = Default
|
||||
{DD6A9FEB-284B-4FAC-A1A2-BE32F857ED4D}.Default|Default.ActiveCfg = Default
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {8490A918-22C6-46B7-B726-FD2B66824BB5}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0"?>
|
||||
<SqlWorkbenchSqlProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="OCTPDBA-345">
|
||||
<Items>
|
||||
<LogicalFolder Name="Connections" Type="2" Sorted="true">
|
||||
<Items>
|
||||
<ConnectionNode Name="(local):CENTRALINFRA\ua208700">
|
||||
<Created>2022-10-18T14:18:35.0573868+02:00</Created>
|
||||
<Type>SQL</Type>
|
||||
<Server>(local)</Server>
|
||||
<UserName />
|
||||
<Authentication>Windows Authentication</Authentication>
|
||||
<InitialDB />
|
||||
<LoginTimeout>30</LoginTimeout>
|
||||
<ExecutionTimeout>0</ExecutionTimeout>
|
||||
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
|
||||
<ApplicationName>Microsoft SQL Server Management Studio - Query</ApplicationName>
|
||||
</ConnectionNode>
|
||||
<ConnectionNode Name="ssunbqmsdb02.sunstore.ch\apssql:CENTRALINFRA\ua208700">
|
||||
<Created>2022-10-18T14:24:06.6989503+02:00</Created>
|
||||
<Type>SQL</Type>
|
||||
<Server>ssunbqmsdb02.sunstore.ch\apssql</Server>
|
||||
<UserName />
|
||||
<Authentication>Windows Authentication</Authentication>
|
||||
<InitialDB />
|
||||
<LoginTimeout>30</LoginTimeout>
|
||||
<ExecutionTimeout>0</ExecutionTimeout>
|
||||
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
|
||||
<ApplicationName>Microsoft SQL Server Management Studio - Query</ApplicationName>
|
||||
</ConnectionNode>
|
||||
</Items>
|
||||
</LogicalFolder>
|
||||
<LogicalFolder Name="Queries" Type="0" Sorted="true">
|
||||
<Items>
|
||||
<FileNode Name="check dbmail status.sql">
|
||||
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:ssunbqmsdb02.sunstore.ch\apssql:True</AssociatedConnectionMoniker>
|
||||
<AssociatedConnSrvName>ssunbqmsdb02.sunstore.ch\apssql</AssociatedConnSrvName>
|
||||
<AssociatedConnUserName />
|
||||
<FullPath>check dbmail status.sql</FullPath>
|
||||
</FileNode>
|
||||
</Items>
|
||||
</LogicalFolder>
|
||||
<LogicalFolder Name="Miscellaneous" Type="3" Sorted="true">
|
||||
<Items />
|
||||
</LogicalFolder>
|
||||
</Items>
|
||||
</SqlWorkbenchSqlProject>
|
||||
177
OCTPDBA-345 - monitor dbmail/OCTPDBA-345/check dbmail status.sql
Normal file
177
OCTPDBA-345 - monitor dbmail/OCTPDBA-345/check dbmail status.sql
Normal file
@@ -0,0 +1,177 @@
|
||||
USE [HCITools];
|
||||
SET NOCOUNT ON;
|
||||
|
||||
IF OBJECT_ID('dbo.mon_get_dbMail_status') IS NOT NULL BEGIN
|
||||
DROP PROCEDURE dbo.mon_get_dbMail_status;
|
||||
END;
|
||||
GO
|
||||
/*=============================================================================
|
||||
|
||||
Vérifie que tout les composants nécessaire à db_mail soient actif et configuré, ainsi que l'on ait pas de mail(s) en erreurs
|
||||
adapté depuis https://www.mssqltips.com/sqlservertip/5258/sql-server-database-mail-health-check-for-all-sql-servers/
|
||||
|
||||
Les composants vérifiés sont:
|
||||
* Sql express
|
||||
db_mail n'est pas disponible sur cette version
|
||||
* Est-ce que l'agent SQL tourne ?
|
||||
* Est-ce que db_mail est actif ?
|
||||
* Est-ce qu'un profil db_mail existe
|
||||
* Est-ce qu'un accompte mail existe ?
|
||||
* Est-ce que l'agent SQL à la fonction mail active ?
|
||||
* Est-ce que le profil db_mail est associé à l'agent SQL ?
|
||||
* Est-ce que l'ont trouve des entrées en erreur dans le log des mails dans les derniers X jours (défaut = 7) ?
|
||||
|
||||
Si aucun de ces composants est en echec, la valeur de "mails_are_sent" dans l'output est à 1.
|
||||
Si n'importe quel de ces composant empêche l'envoi de mails, ou que des mails sont en erreur, la valeur est 0
|
||||
Le champ "notes" contient un détail en toute lettre de ce qui peut bloquer / est bloquant lorsque "mails_are_sent" = 0
|
||||
|
||||
Contexte d'utilisation
|
||||
----------------------
|
||||
Sur tous les serveurs où db_mail est supposé tourner
|
||||
|
||||
Création : 18.10.2022 / TSC
|
||||
=============================================================================*/
|
||||
CREATE PROCEDURE dbo.mon_get_dbMail_status @check_failed_mail_in_past_days INT = 7
|
||||
AS BEGIN
|
||||
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%'
|
||||
OR servicename LIKE 'sqlagent$%'
|
||||
;
|
||||
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 x days
|
||||
--SELECT @failed_email_error = CASE
|
||||
-- WHEN COUNT(*) > 0 THEN 1
|
||||
-- ELSE 0 END
|
||||
SELECT @failed_email_error = COUNT(1)
|
||||
--SELECT *
|
||||
FROM msdb.dbo.sysmail_event_log
|
||||
WHERE event_type = 'error'
|
||||
AND log_date > DATEADD(DAY, @check_failed_mail_in_past_days * -1, CURRENT_TIMESTAMP);
|
||||
|
||||
/*
|
||||
--check each conditions
|
||||
SELECT
|
||||
@SQLAgentEnabled AS SQLAgentEnabled
|
||||
,@SQLAgentStarted AS SQLAgentStarted
|
||||
,@DBMailEnabled AS DBMailEnabled
|
||||
,@MailProfileEnabled AS MailProfileEnabled
|
||||
,@MailAccountEnabled AS MailAccountEnabled
|
||||
,@SQLAgentMailEnabled AS SQLAgentMailEnabled
|
||||
,@SQLAgentMailProfileEnabled AS SQLAgentMailProfileEnabled
|
||||
,@failed_email_error AS failed_email_error
|
||||
;
|
||||
*/
|
||||
|
||||
-- Final report
|
||||
SELECT
|
||||
@@SERVERNAME AS Server_Name
|
||||
,CAST(CURRENT_TIMESTAMP AS SMALLDATETIME) AS Run_Date
|
||||
,@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) AS mails_are_sent
|
||||
,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 @SQLAgentStarted = 0 THEN 'SQL Agent is stopped; '
|
||||
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
|
||||
'found ' + CAST(@failed_email_error AS VARCHAR(10)) + ' failed email(s) during last '
|
||||
+ CONVERT(VARCHAR(5), @check_failed_mail_in_past_days) + ' days; '
|
||||
ELSE ''
|
||||
END
|
||||
END AS Notes;
|
||||
END;
|
||||
GO
|
||||
|
||||
--sur ssunbqmsdb02.sunstore.ch\apssql, l'agent est stoppé et il y a des mails en erreur depuis le 12.10.22
|
||||
EXECUTE HCITools.[dbo].[mon_get_dbMail_status] @check_failed_mail_in_past_days = 30; -- int
|
||||
Reference in New Issue
Block a user