initial commit

This commit is contained in:
Thierry Schork
2022-12-30 12:10:12 +01:00
commit 7cf858256a
127 changed files with 12534 additions and 0 deletions

View 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

View File

@@ -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>

View 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