-- Escolha a base de dados para criar o Script /* Instrução de utilização: -- Alterar para o profile do seu servidor: @profile_name = 'MSSQLServer', --Alterar para o e-mail que você quer enviar o alerta @recipients = 'seue-mail@seudominio.com', */ /******************************************************************************************************************************* -- Tabela de controle que será utilizada para armazenar o Historico dos Alertas. *******************************************************************************************************************************/ CREATE TABLE [dbo].[Alerta] ( [Id_Alerta] INT IDENTITY PRIMARY KEY, [Nm_Alerta] VARCHAR(200), [Ds_Mensagem] VARCHAR(2000), [Fl_Tipo] TINYINT, -- 0: CLEAR / 1: ALERTA [Dt_Alerta] DATETIME DEFAULT(GETDATE()) ) GO CREATE PROCEDURE [dbo].[stpAlerta_Status_Databases] AS BEGIN SET NOCOUNT ON -- Declara as variaveis DECLARE @Subject VARCHAR(500), @Fl_Tipo TINYINT, @Importance AS VARCHAR(6), @EmailBody VARCHAR(MAX), @EmptyBodyEmail VARCHAR(MAX), @AlertaStatusDatabasesHeader VARCHAR(MAX), @AlertaStatusDatabasesTable VARCHAR(MAX) /******************************************************************************************************************************* -- ALERTA: DATABASE INDISPONIVEL *******************************************************************************************************************************/ -- Verifica o último Tipo do Alerta registrado -> 0: CLEAR / 1: ALERTA SELECT @Fl_Tipo = [Fl_Tipo] FROM [dbo].[Alerta] WHERE [Id_Alerta] = (SELECT MAX(Id_Alerta) FROM [dbo].[Alerta] WHERE [Nm_Alerta] = 'Database Indisponivel' ) /******************************************************************************************************************************* -- Verifica se alguma Database não está ONLINE *******************************************************************************************************************************/ IF EXISTS ( SELECT NULL FROM [sys].[databases] WHERE [state_desc] NOT IN ('ONLINE','RESTORING') ) BEGIN -- INICIO - ALERTA IF ISNULL(@Fl_Tipo, 0) = 0 -- Envia o Alerta apenas uma vez BEGIN /******************************************************************************************************************************* -- CRIA O EMAIL - ALERTA *******************************************************************************************************************************/ -------------------------------------------------------------------------------------------------------------------------------- -- ALERTA - HEADER -------------------------------------------------------------------------------------------------------------------------------- SET @AlertaStatusDatabasesHeader = '' SET @AlertaStatusDatabasesHeader = @AlertaStatusDatabasesHeader + '
Status das Databases
' SET @AlertaStatusDatabasesHeader = @AlertaStatusDatabasesHeader + '
' -------------------------------------------------------------------------------------------------------------------------------- -- ALERTA - BODY -------------------------------------------------------------------------------------------------------------------------------- SET @AlertaStatusDatabasesTable = CAST( ( SELECT td = [name] + '' + '' + [state_desc] + '' FROM ( -- Dados da Tabela do EMAIL SELECT [name], [state_desc] FROM [sys].[databases] WHERE [state_desc] NOT IN ('ONLINE','RESTORING') ) AS D ORDER BY [name] FOR XML PATH( 'tr' ), TYPE) AS VARCHAR(MAX) ) -- Corrige a Formatação da Tabela SET @AlertaStatusDatabasesTable = REPLACE( REPLACE( REPLACE( @AlertaStatusDatabasesTable, '<', '<'), '>', '>'), '', '') -- Títulos da Tabela do EMAIL SET @AlertaStatusDatabasesTable = '' + '' + REPLACE( REPLACE( @AlertaStatusDatabasesTable, '<', '<'), '>', '>') + '
Database Status
' -------------------------------------------------------------------------------------------------------------------------------- -- Insere um Espaço em Branco no EMAIL -------------------------------------------------------------------------------------------------------------------------------- SET @EmptyBodyEmail = '' SET @EmptyBodyEmail = '' + '' + REPLACE( REPLACE( ISNULL(@EmptyBodyEmail,''), '<', '<'), '>', '>') + '
' /******************************************************************************************************************************* -- Seta as Variáveis do EMAIL *******************************************************************************************************************************/ SELECT @Importance = 'High', @Subject = 'ALERTA: Existe alguma Database que não está ONLINE no Servidor: ' + @@SERVERNAME, @EmailBody = @AlertaStatusDatabasesHeader + @EmptyBodyEmail + @AlertaStatusDatabasesTable + @EmptyBodyEmail /******************************************************************************************************************************* -- ENVIA O EMAIL - ALERTA *******************************************************************************************************************************/ EXEC [msdb].[dbo].[sp_send_dbmail] @profile_name = 'MSSQLServer', @recipients = 'seue-mail@seudominio.com', @subject = @Subject, @body = @EmailBody, @body_format = 'HTML', @importance = @Importance /******************************************************************************************************************************* -- Insere um Registro na Tabela de Controle dos Alertas -> Fl_Tipo = 1 : ALERTA *******************************************************************************************************************************/ INSERT INTO [dbo].[Alerta] ( [Nm_Alerta], [Ds_Mensagem], [Fl_Tipo] ) SELECT 'Database Indisponivel', @Subject, 1 END END -- FIM - ALERTA ELSE BEGIN -- INICIO - CLEAR IF ISNULL(@Fl_Tipo, 0) = 1 BEGIN /******************************************************************************************************************************* -- CRIA O EMAIL - CLEAR *******************************************************************************************************************************/ -------------------------------------------------------------------------------------------------------------------------------- -- CLEAR - HEADER -------------------------------------------------------------------------------------------------------------------------------- SET @AlertaStatusDatabasesHeader = '' SET @AlertaStatusDatabasesHeader = @AlertaStatusDatabasesHeader + '
Status das Databases
' SET @AlertaStatusDatabasesHeader = @AlertaStatusDatabasesHeader + '
' -------------------------------------------------------------------------------------------------------------------------------- -- CLEAR - BODY -------------------------------------------------------------------------------------------------------------------------------- SET @AlertaStatusDatabasesTable = CAST( ( SELECT td = [name] + '' + '' + [state_desc] + '' FROM ( -- Dados da Tabela do EMAIL SELECT [name], [state_desc] FROM [sys].[databases] ) AS D ORDER BY [name] FOR XML PATH( 'tr' ), TYPE) AS VARCHAR(MAX) ) -- Corrige a Formatação da Tabela SET @AlertaStatusDatabasesTable = REPLACE( REPLACE( REPLACE( @AlertaStatusDatabasesTable, '<', '<'), '>', '>'), '', '') -- Títulos da Tabela do EMAIL SET @AlertaStatusDatabasesTable = '' + '' + REPLACE( REPLACE( @AlertaStatusDatabasesTable, '<', '<'), '>', '>') + '
Database Status
' -------------------------------------------------------------------------------------------------------------------------------- -- Insere um Espaço em Branco no EMAIL -------------------------------------------------------------------------------------------------------------------------------- SET @EmptyBodyEmail = '' SET @EmptyBodyEmail = '' + '' + REPLACE( REPLACE( ISNULL(@EmptyBodyEmail,''), '<', '<'), '>', '>') + '
' /******************************************************************************************************************************* -- Seta as Variáveis do EMAIL *******************************************************************************************************************************/ SELECT @Importance = 'High', @Subject = 'CLEAR: Não existe mais alguma Database que não está ONLINE no Servidor: ' + @@SERVERNAME, @EmailBody = @AlertaStatusDatabasesHeader + @EmptyBodyEmail + @AlertaStatusDatabasesTable + @EmptyBodyEmail /******************************************************************************************************************************* -- ENVIA O EMAIL - CLEAR *******************************************************************************************************************************/ EXEC [msdb].[dbo].[sp_send_dbmail] @profile_name = 'MSSQLServer', @recipients = 'seue-mail@seudominio.com', @subject = @Subject, @body = @EmailBody, @body_format = 'HTML', @importance = @Importance /******************************************************************************************************************************* -- Insere um Registro na Tabela de Controle dos Alertas -> Fl_Tipo = 0 : CLEAR *******************************************************************************************************************************/ INSERT INTO [dbo].[Alerta] ( [Nm_Alerta], [Ds_Mensagem], [Fl_Tipo] ) SELECT 'Database Indisponivel', @Subject, 0 END END -- FIM - CLEAR END