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