Files
sql-scripts/TPDT-268 - ACP in task sequence/dba_storedProcedures/mon_Check_Broker_queues.sql
2024-03-07 16:52:14 +01:00

133 lines
3.5 KiB
Transact-SQL

USE [HCITools]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[mon_Check_Broker_queues]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[mon_Check_Broker_queues]
GO
USE [HCITools]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[mon_Check_Broker_queues]
@in_debug tinyint = 0
AS
/*=============================================================================
Explication du traitement realise par la SP
-------------------------------------------
La SP va vérifier si l'ensemble des queues du broker ne sont pas désactivées pour chaque base de données
Contexte d'utilisation
----------------------
Appelé depuis le job DR92110 - Check Broker Queues
Parametres
----------
@in_debug : non utilisé
Creation : 31.10.16 / FLA
Modifications : 17.03.2022 - FLA : Change DBA mail
=============================================================================*/
set nocount on;
/*------------------- Declaration des variables --------------------*/
declare @DbName sysname,
@QueueName sysname,
@ErrorMsg varchar(2000),
@cmd varchar(5000)
declare c_database_broker cursor local forward_only static for
select name from sys.databases
WHERE database_id > 4
AND is_broker_enabled = 1
create table #ListBrokerQueues (
DbName sysname,
QueueName sysname)
/*------------ Affectation des parametres aux variables ------------*/
SET @ErrorMsg = ''
/*-------------------------- Traitement ---------------------------*/
BEGIN TRY
open c_database_broker
FETCH NEXT FROM c_database_broker
into @DbName
WHILE @@fetch_status = 0
BEGIN
SET @cmd = 'INSERT INTO #ListBrokerQueues
SELECT '''+@DbName+''',name FROM '+ @DbName +'.sys.service_queues
WHERE name NOT IN (''QueryNotificationErrorsQueue'',''EventNotificationErrorsQueue'',''ServiceBrokerQueue'')
and (is_activation_enabled = 0 OR is_receive_enabled = 0 OR is_enqueue_enabled = 0)'
exec (@cmd)
FETCH NEXT FROM c_database_broker
into @DbName
END
CLOSE c_database_broker
DEALLOCATE c_database_broker
declare c_queues cursor local forward_only static for
select DbName, QueueName from #ListBrokerQueues
open c_queues
FETCH NEXT FROM c_queues
into @DbName, @QueueName
WHILE @@fetch_status = 0
BEGIN
SET @ErrorMsg = @ErrorMsg + 'Error in queue ' + @QueueName + ' of Database ' + @DbName + CHAR(13) + CHAR(10)
FETCH NEXT FROM c_queues
into @DbName, @QueueName
END
CLOSE c_queues
DEALLOCATE c_queues
DROP TABLE #ListBrokerQueues
/* S'il y a une erreur, on envoie un mail aux DBA */
IF @ErrorMsg <> ''
BEGIN
exec aps_Send_Mail_with_template
@in_param_varchar_2 = 'DBA_operator;',
@in_job_type = 3, /* 3 = warning */
@in_param_varchar_3 = @ErrorMsg
RAISERROR ('Erreur dans la SP [dbo].[mon_Check_Broker_queues]',16,1)
END
/*---------------------- Traitement des erreurs ----------------------*/
END TRY
BEGIN CATCH
/* Traitement des erreurs (avec RaiseError) */
EXEC dbo.get_Error_Info @in_RaiseError = 1
END CATCH