/******************************************************************************************************************************* (C) 2016, Fabricio Lima Soluções em Banco de Dados Site: http://www.fabriciolima.net/ Feedback: contato@fabriciolima.net *******************************************************************************************************************************/ /*********************************************************************************************************************************** ------------------------------------------------------------------------------------------------------------------------------------ -- LEIA-ME!!! INSTRUÇÕES DE EXECUÇÃO: ------------------------------------------------------------------------------------------------------------------------------------ 1) Alterar os parâmetros da execução da procedure no STEP 2 do JOB de acordo com sua necessidade -- Exemplo Execução EXEC[dbo].[stpEnvia_CheckList_Diario_DBA] @Nm_Empresa = 'NomeEmpresa', @Profile_Email = 'MSSQLServer', @Ds_Email = 'E-mail@provedor.com' 2) Basta executar o script abaixo para criar uma procedure e um job que chamará essa procedure. ***********************************************************************************************************************************/ /******************************************************************************************************************************* -- Database que será utilizada para armazenar os dados do CheckList. Se for necessário, altere o nome da mesma. *******************************************************************************************************************************/ USE Traces /******************************************************************************************************************************* -- Cria a procedure que envia o E-Mail do CheckList do Banco de Dados *******************************************************************************************************************************/ IF OBJECT_ID('[dbo].[stpEnvia_CheckList_Diario_DBA]') is not null DROP PROCEDURE [dbo].[stpEnvia_CheckList_Diario_DBA] GO /****** Object: StoredProcedure [dbo].[stpEnvia_CheckList_Diario_DBA] Script Date: 03/06/2016 11:44:02 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /* -- Exemplo Execução EXEC[dbo].[stpEnvia_CheckList_Diario_DBA] @Nm_Empresa = 'NomeEmpresa', @Profile_Email = 'MSSQLServer', @Ds_Email = 'E-mail@provedor.com' */ CREATE PROCEDURE [dbo].[stpEnvia_CheckList_Diario_DBA] @Nm_Empresa VARCHAR(100), @Profile_Email VARCHAR(100), @Ds_Email VARCHAR(MAX) AS BEGIN /* -- P/ TESTE DECLARE @Nm_Empresa VARCHAR(100) = 'NomeEmpresa', @Profile_Email VARCHAR(100) = 'MSSQLServer', @Ds_Email VARCHAR(MAX)= 'E-mail@provedor.com' */ /*********************************************************************************************************************************** -- Validação nos Parâmetros de Entrada ***********************************************************************************************************************************/ IF (@Nm_Empresa IS NULL OR @Nm_Empresa = '') BEGIN RAISERROR('Favor informar o Nome da Empresa!',16,1) RETURN END ELSE IF (@Profile_Email IS NULL OR @Profile_Email = '') BEGIN RAISERROR('Favor informar o Profile de E-mail!',16,1) RETURN END ELSE IF (@Ds_Email IS NULL OR @Ds_Email = '') BEGIN RAISERROR('Favor informar os Destinatários de E-mail!',16,1) RETURN END /*********************************************************************************************************************************** -- Disponibilidade SQL Server - HEADER ***********************************************************************************************************************************/ DECLARE @DisponibilidadeSQL_Header VARCHAR(MAX) SET @DisponibilidadeSQL_Header = '' SET @DisponibilidadeSQL_Header = @DisponibilidadeSQL_Header + '
Tempo de Disponibilidade do SQL Server
' SET @DisponibilidadeSQL_Header = @DisponibilidadeSQL_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Disponibilidade SQL Server - BODY ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @DisponibilidadeSQL_Table VARCHAR(MAX) SET @DisponibilidadeSQL_Table = CAST( ( SELECT td = DisponibilidadeSQL + '' FROM ( SELECT CASE WHEN (RTRIM(CONVERT(CHAR(17), DATEDIFF(SECOND, CONVERT(DATETIME, [Create_Date]), GETDATE()) / 86400)) = 0) OR (RTRIM(CONVERT(CHAR(17), DATEDIFF(SECOND, CONVERT(DATETIME, [Create_Date]), GETDATE()) / 86400)) > 365) THEN ' bgcolor=yellow>' ELSE '' END + RTRIM(CONVERT(CHAR(17), DATEDIFF(SECOND, CONVERT(DATETIME, [Create_Date]), GETDATE()) / 86400)) + ' Dia(s) ' + RIGHT('00' + RTRIM(CONVERT(CHAR(7), DATEDIFF(SECOND, CONVERT(DATETIME, [Create_Date]), GETDATE()) % 86400 / 3600)), 2) + ' Hora(s) ' + RIGHT('00' + RTRIM(CONVERT(CHAR(7), DATEDIFF(SECOND, CONVERT(DATETIME, [Create_Date]), GETDATE()) % 86400 % 3600 / 60)), 2) + ' Minuto(s) ' AS DisponibilidadeSQL FROM [sys].[databases] WHERE [Database_Id] = 2 ) AS D FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @DisponibilidadeSQL_Table = REPLACE( REPLACE( REPLACE( REPLACE(@DisponibilidadeSQL_Table, '<', '<'), '>', '>'), ' ', '', '') SET @DisponibilidadeSQL_Table = '' + '' + REPLACE( REPLACE( @DisponibilidadeSQL_Table, '<', '<'), '>', '>') + '
Tempo Disponibilidade
' /*********************************************************************************************************************************** -- Espaço em Disco - Header ***********************************************************************************************************************************/ DECLARE @EspacoDisco_Header VARCHAR(MAX) SET @EspacoDisco_Header = '' SET @EspacoDisco_Header = @EspacoDisco_Header + '
Espaço em Disco
' SET @EspacoDisco_Header = @EspacoDisco_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Espaço em Disco - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @EspacoDisco_Table VARCHAR(MAX) SET @EspacoDisco_Table = CAST( ( SELECT td = CASE WHEN [SpaceUsed_Percent] = '-' THEN '' WHEN CAST([SpaceUsed_Percent] AS NUMERIC(9,2)) >= 90 THEN ' bgcolor=yellow>' ELSE '' END + [DriveName] + '' + + '' + CASE WHEN [SpaceUsed_Percent] = '-' THEN '' WHEN CAST([SpaceUsed_Percent] AS NUMERIC(9,2)) >= 90 THEN ' bgcolor=yellow>' ELSE '' END + [TotalSize_GB] + '' + + '' + CASE WHEN [SpaceUsed_Percent] = '-' THEN '' WHEN CAST([SpaceUsed_Percent] AS NUMERIC(9,2)) >= 90 THEN ' bgcolor=yellow>' ELSE '' END + [SpaceUsed_GB] + '' + + '' + CASE WHEN [SpaceUsed_Percent] = '-' THEN '' WHEN CAST([SpaceUsed_Percent] AS NUMERIC(9,2)) >= 90 THEN ' bgcolor=yellow>' ELSE '' END + [FreeSpace_GB] + '' + + '' + CASE WHEN [SpaceUsed_Percent] = '-' THEN '' WHEN CAST([SpaceUsed_Percent] AS NUMERIC(9,2)) >= 90 THEN ' bgcolor=yellow>' ELSE '' END + [SpaceUsed_Percent] + '' FROM ( SELECT [DriveName], ISNULL(CAST([TotalSize_GB] AS VARCHAR), '-') AS [TotalSize_GB], ISNULL(CAST([SpaceUsed_GB] AS VARCHAR), '-') AS [SpaceUsed_GB], ISNULL(CAST([FreeSpace_GB] AS VARCHAR), '-') AS [FreeSpace_GB], ISNULL(CAST([SpaceUsed_Percent] AS VARCHAR), '-') AS [SpaceUsed_Percent] FROM [dbo].[CheckList_Espaco_Disco] ) AS D ORDER BY [DriveName] FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @EspacoDisco_Table = REPLACE( REPLACE( REPLACE( REPLACE(@EspacoDisco_Table, '<', '<'), '>', '>'), ' ', '', '') SET @EspacoDisco_Table = '' + '' + REPLACE( REPLACE( @EspacoDisco_Table, '<', '<'), '>', '>') + '
Drive Tamanho (MB) Utilizado (MB) Livre (MB) Utilizado (%)
' /*********************************************************************************************************************************** -- Arquivos Dados - Header ***********************************************************************************************************************************/ DECLARE @ArquivosDados_Header VARCHAR(MAX) SET @ArquivosDados_Header = '' SET @ArquivosDados_Header = @ArquivosDados_Header + '
TOP 5 - Informações dos Arquivos de Dados (MDF e NDF)
' SET @ArquivosDados_Header = @ArquivosDados_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Arquivos Dados - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @ArquivosDados_Table VARCHAR(MAX) SET @ArquivosDados_Table = CAST( ( SELECT td = [Nm_Database] + '' + [Logical_Name] + '' + [Total_Reservado] + '' + [Total_Utilizado] + '' + [Espaco_Livre (MB)] + '' + [Espaco_Livre (%)] + '' + [MAXSIZE] + '' + [Growth] + '' FROM ( SELECT TOP 5 [Nm_Database], ISNULL([Logical_Name], '-') AS [Logical_Name], ISNULL(CAST([Total_Reservado] AS VARCHAR), '-') AS [Total_Reservado], ISNULL(CAST([Total_Utilizado] AS VARCHAR), '-') AS [Total_Utilizado], ISNULL(CAST([Espaco_Livre (MB)] AS VARCHAR), '-') AS [Espaco_Livre (MB)], ISNULL(CAST([Espaco_Livre (%)] AS VARCHAR), '-') AS [Espaco_Livre (%)], ISNULL(CAST([MaxSize] AS VARCHAR), '-') AS [MAXSIZE], ISNULL(CAST([Growth] AS VARCHAR), '-') AS [Growth] FROM [dbo].[CheckList_Arquivos_Dados] ORDER BY CAST(REPLACE([Total_Reservado], '-', 0) AS NUMERIC(15,2)) DESC, CAST(REPLACE([Total_Utilizado], '-', 0) AS NUMERIC(15,2)) DESC ) AS D ORDER BY CAST(REPLACE([Total_Reservado], '-', 0) AS NUMERIC(15,2)) DESC, CAST(REPLACE([Total_Utilizado], '-', 0) AS NUMERIC(15,2)) DESC FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @ArquivosDados_Table = REPLACE( REPLACE( REPLACE(@ArquivosDados_Table, '<', '<'), '>', '>'), '', '') SET @ArquivosDados_Table = '' + '' + REPLACE( REPLACE( @ArquivosDados_Table, '<', '<'), '>', '>') + '
Nome Database Nome Lógico Total Reservado (MB) Total Utilizado (MB) Espaco_Livre (MB) Espaco_Livre (%) MAXSIZE Growth
' /*********************************************************************************************************************************** -- Arquivos Log - Header ***********************************************************************************************************************************/ DECLARE @ArquivosLog_Header VARCHAR(MAX) SET @ArquivosLog_Header = '' SET @ArquivosLog_Header = @ArquivosLog_Header + '
TOP 5 - Informações dos Arquivos de Log (LDF)
' SET @ArquivosLog_Header = @ArquivosLog_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Arquivos Log - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @ArquivosLog_Table VARCHAR(MAX) SET @ArquivosLog_Table = CAST( ( SELECT td = [Nm_Database] + '' + [Logical_Name] + '' + [Total_Reservado] + '' + [Total_Utilizado] + '' + [Espaco_Livre (MB)] + '' + [Espaco_Livre (%)] + '' + [MAXSIZE] + '' + [Growth] + '' FROM ( SELECT TOP 5 [Nm_Database], ISNULL([Logical_Name], '-') AS [Logical_Name], ISNULL(CAST([Total_Reservado] AS VARCHAR), '-') AS [Total_Reservado], ISNULL(CAST([Total_Utilizado] AS VARCHAR), '-') AS [Total_Utilizado], ISNULL(CAST([Espaco_Livre (MB)] AS VARCHAR), '-') AS [Espaco_Livre (MB)], ISNULL(CAST([Espaco_Livre (%)] AS VARCHAR), '-') AS [Espaco_Livre (%)], ISNULL(CAST([MaxSize] AS VARCHAR), '-') AS [MAXSIZE], ISNULL(CAST([Growth] AS VARCHAR), '-') AS [Growth] FROM [dbo].[CheckList_Arquivos_Log] ORDER BY CAST(REPLACE([Total_Reservado], '-', 0) AS NUMERIC(15,2)) DESC, CAST(REPLACE([Total_Utilizado], '-', 0) AS NUMERIC(15,2)) DESC ) AS D ORDER BY CAST(REPLACE([Total_Reservado], '-', 0) AS NUMERIC(15,2)) DESC, CAST(REPLACE([Total_Utilizado], '-', 0) AS NUMERIC(15,2)) DESC FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @ArquivosLog_Table = REPLACE( REPLACE( REPLACE(@ArquivosLog_Table, '<', '<'), '>', '>'), '', '') SET @ArquivosLog_Table = '' + '' + REPLACE( REPLACE( @ArquivosLog_Table, '<', '<'), '>', '>') + '
Nome Database Nome Lógico Total Reservado (MB) Total Utilizado (MB) Espaco_Livre (MB) Espaco_Livre (%) MAXSIZE Growth
' /*********************************************************************************************************************************** -- Crescimento das Bases - Header ***********************************************************************************************************************************/ DECLARE @CrescimentoBases_Header VARCHAR(MAX) SET @CrescimentoBases_Header = '' SET @CrescimentoBases_Header = @CrescimentoBases_Header + '
TOP 10 - Crescimento das Bases
' SET @CrescimentoBases_Header = @CrescimentoBases_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Crescimento das Bases - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @CrescimentoBases_Table VARCHAR(MAX) SET @CrescimentoBases_Table = CAST( ( SELECT td = CASE WHEN [Nm_Database] = 'TOTAL GERAL' THEN ' bgcolor=#0B0B61>' + [Nm_Database] + '' ELSE [Nm_Database] END + '' + CASE WHEN [Nm_Database] = 'TOTAL GERAL' THEN ' bgcolor=#0B0B61>' + [Tamanho_Atual] + '' ELSE [Tamanho_Atual] END + '' + CASE WHEN [Nm_Database] = 'TOTAL GERAL' THEN ' bgcolor=#0B0B61>' + [Cresc_1_dia] + '' ELSE [Cresc_1_dia] END + '' + CASE WHEN [Nm_Database] = 'TOTAL GERAL' THEN ' bgcolor=#0B0B61>' + [Cresc_15_dia] + '' ELSE [Cresc_15_dia] END + '' + CASE WHEN [Nm_Database] = 'TOTAL GERAL' THEN ' bgcolor=#0B0B61>' + [Cresc_30_dia] + '' ELSE [Cresc_30_dia] END + '' + CASE WHEN [Nm_Database] = 'TOTAL GERAL' THEN ' bgcolor=#0B0B61>' + [Cresc_60_dia] + '' ELSE [Cresc_60_dia] END + '' FROM ( SELECT TOP 10 [Nm_Servidor], [Nm_Database], ISNULL(CAST([Tamanho_Atual] AS VARCHAR), '-') AS [Tamanho_Atual], ISNULL(CAST([Cresc_1_dia] AS VARCHAR), '-') AS [Cresc_1_dia], ISNULL(CAST([Cresc_15_dia] AS VARCHAR), '-') AS [Cresc_15_dia], ISNULL(CAST([Cresc_30_dia] AS VARCHAR), '-') AS [Cresc_30_dia], ISNULL(CAST([Cresc_60_dia] AS VARCHAR), '-') AS [Cresc_60_dia] FROM [dbo].[CheckList_Database_Growth_Email] WHERE [Nm_Servidor] IS NOT NULL -- REGISTROS NORMAIS UNION SELECT [Nm_Servidor], [Nm_Database], ISNULL(CAST([Tamanho_Atual] AS VARCHAR), '-') AS [Tamanho_Atual], ISNULL(CAST([Cresc_1_dia] AS VARCHAR), '-') AS [Cresc_1_dia], ISNULL(CAST([Cresc_15_dia] AS VARCHAR), '-') AS [Cresc_15_dia], ISNULL(CAST([Cresc_30_dia] AS VARCHAR), '-') AS [Cresc_30_dia], ISNULL(CAST([Cresc_60_dia] AS VARCHAR), '-') AS [Cresc_60_dia] FROM [dbo].[CheckList_Database_Growth_Email] WHERE [Nm_Servidor] IS NULL -- TOTAL GERAL ) AS D ORDER BY [Nm_Servidor] DESC, CAST(ABS(REPLACE([Cresc_1_dia], '-', 0)) AS NUMERIC(15,2)) DESC, CAST(ABS(REPLACE([Cresc_15_dia], '-', 0)) AS NUMERIC(15,2)) DESC, CAST(ABS(REPLACE([Cresc_30_dia], '-', 0)) AS NUMERIC(15,2)) DESC, CAST(ABS(REPLACE([Cresc_60_dia], '-', 0)) AS NUMERIC(15,2)) DESC FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @CrescimentoBases_Table = REPLACE( REPLACE( REPLACE( REPLACE(@CrescimentoBases_Table, '<', '<'), '>', '>'), ' ', '', '') SET @CrescimentoBases_Table = '' + '' + REPLACE( REPLACE( @CrescimentoBases_Table, '<', '<'), '>', '>') + '
Nome Database Tamanho Atual (MB) Cresc. 1 Dia (MB) Cresc. 15 Dia (MB) Cresc. 30 Dia (MB) Cresc. 60 Dia (MB)
' /*********************************************************************************************************************************** -- Crescimento das Tabelas - Header ***********************************************************************************************************************************/ DECLARE @CrescimentoTabelas_Header VARCHAR(MAX) SET @CrescimentoTabelas_Header = '' SET @CrescimentoTabelas_Header = @CrescimentoTabelas_Header + '
TOP 10 - Crescimento das Tabelas
' SET @CrescimentoTabelas_Header = @CrescimentoTabelas_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Crescimento das Tabelas - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @CrescimentoTabelas_Table VARCHAR(MAX) SET @CrescimentoTabelas_Table = CAST( ( SELECT td = CASE WHEN [Nm_Database] = 'TOTAL GERAL' THEN ' bgcolor=#0B0B61>' + [Nm_Database] + '' ELSE [Nm_Database] END + '' + CASE WHEN [Nm_Database] = 'TOTAL GERAL' THEN ' bgcolor=#0B0B61>' + [Nm_Tabela] + '' ELSE [Nm_Tabela] END + '' + CASE WHEN [Nm_Database] = 'TOTAL GERAL' THEN ' bgcolor=#0B0B61>' + [Tamanho_Atual] + '' ELSE [Tamanho_Atual] END + '' + CASE WHEN [Nm_Database] = 'TOTAL GERAL' THEN ' bgcolor=#0B0B61>' + [Cresc_1_dia] + '' ELSE [Cresc_1_dia] END + '' + CASE WHEN [Nm_Database] = 'TOTAL GERAL' THEN ' bgcolor=#0B0B61>' + [Cresc_15_dia] + '' ELSE [Cresc_15_dia] END + '' + CASE WHEN [Nm_Database] = 'TOTAL GERAL' THEN ' bgcolor=#0B0B61>' + [Cresc_30_dia] + '' ELSE [Cresc_30_dia] END + '' + CASE WHEN [Nm_Database] = 'TOTAL GERAL' THEN ' bgcolor=#0B0B61>' + [Cresc_60_dia] + '' ELSE [Cresc_60_dia] END + '' FROM ( SELECT TOP 10 [Nm_Servidor], [Nm_Database], ISNULL([Nm_Tabela], '-') AS [Nm_Tabela], ISNULL(CAST([Tamanho_Atual] AS VARCHAR), '-') AS [Tamanho_Atual], ISNULL(CAST([Cresc_1_dia] AS VARCHAR), '-') AS [Cresc_1_dia], ISNULL(CAST([Cresc_15_dia] AS VARCHAR), '-') AS [Cresc_15_dia], ISNULL(CAST([Cresc_30_dia] AS VARCHAR), '-') AS [Cresc_30_dia], ISNULL(CAST([Cresc_60_dia] AS VARCHAR), '-') AS [Cresc_60_dia] FROM [dbo].[CheckList_Table_Growth_Email] WHERE [Nm_Servidor] IS NOT NULL -- REGISTROS NORMAIS UNION ALL SELECT [Nm_Servidor], [Nm_Database], ISNULL([Nm_Tabela], '-') AS [Nm_Tabela], ISNULL(CAST([Tamanho_Atual] AS VARCHAR), '-') AS [Tamanho_Atual], ISNULL(CAST([Cresc_1_dia] AS VARCHAR), '-') AS [Cresc_1_dia], ISNULL(CAST([Cresc_15_dia] AS VARCHAR), '-') AS [Cresc_15_dia], ISNULL(CAST([Cresc_30_dia] AS VARCHAR), '-') AS [Cresc_30_dia], ISNULL(CAST([Cresc_60_dia] AS VARCHAR), '-') AS [Cresc_60_dia] FROM [dbo].[CheckList_Table_Growth_Email] WHERE [Nm_Servidor] IS NULL -- TOTAL GERAL ) AS D ORDER BY [Nm_Servidor] DESC, CAST(ABS(REPLACE([Cresc_1_dia], '-', 0)) AS NUMERIC(15,2)) DESC, CAST(ABS(REPLACE([Cresc_15_dia], '-', 0)) AS NUMERIC(15,2)) DESC, CAST(ABS(REPLACE([Cresc_30_dia], '-', 0)) AS NUMERIC(15,2)) DESC, CAST(ABS(REPLACE([Cresc_60_dia], '-', 0)) AS NUMERIC(15,2)) DESC FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @CrescimentoTabelas_Table = REPLACE( REPLACE( REPLACE( REPLACE(@CrescimentoTabelas_Table, '<', '<'), '>', '>'), ' ', '', '') SET @CrescimentoTabelas_Table = '' + '' + REPLACE( REPLACE(@CrescimentoTabelas_Table, '<', '<'), '>', '>') + '
Nome Database Nome Tabela Tamanho Atual (MB) Cresc. 1 Dia (MB) Cresc. 15 Dia (MB) Cresc. 30 Dia (MB) Cresc. 60 Dia (MB)
' /*********************************************************************************************************************************** -- Utilizacao Arquivos Database - Writes - Header ***********************************************************************************************************************************/ DECLARE @UtilizacaoArqWrites_Header VARCHAR(MAX) SET @UtilizacaoArqWrites_Header = '' SET @UtilizacaoArqWrites_Header = @UtilizacaoArqWrites_Header + '
TOP 10 - Utilização Arquivos Databases - Writes (09:00 - 18:00)
' SET @UtilizacaoArqWrites_Header = @UtilizacaoArqWrites_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Utilizacao Arquivos Database - Writes - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @UtilizacaoArqWrites_Table VARCHAR(MAX) SET @UtilizacaoArqWrites_Table = CAST( ( SELECT td = Nm_Database + '' + file_id + '' + io_stall_write_ms + '' + num_of_writes + '' + [avg_write_stall_ms] + '' FROM ( select Nm_Database, ISNULL(CAST(file_id AS VARCHAR), '-') AS file_id, ISNULL(CAST(io_stall_write_ms AS VARCHAR), '-') AS io_stall_write_ms, ISNULL(CAST(num_of_writes AS VARCHAR), '-') AS num_of_writes, ISNULL(CAST([avg_write_stall_ms] AS VARCHAR), '-') AS [avg_write_stall_ms] from [dbo].[CheckList_Utilizacao_Arquivo_Writes] ) AS D ORDER BY CAST(CAST(REPLACE([avg_write_stall_ms], '-', 0) AS VARCHAR) AS NUMERIC(15,1)) DESC, CAST(REPLACE(num_of_writes, '-', 0) AS BIGINT) DESC FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @UtilizacaoArqWrites_Table = REPLACE( REPLACE( REPLACE(@UtilizacaoArqWrites_Table, '<', '<'), '>', '>'), '', '') SET @UtilizacaoArqWrites_Table = '' + '' + REPLACE( REPLACE(@UtilizacaoArqWrites_Table, '<', '<'), '>', '>') + '
Nome Database File ID io_stall_write_ms num_of_writes avg_write_stall_ms
' /*********************************************************************************************************************************** -- Utilizacao Arquivos Database - Reads - Header ***********************************************************************************************************************************/ DECLARE @UtilizacaoArqReads_Header VARCHAR(MAX) SET @UtilizacaoArqReads_Header = '' SET @UtilizacaoArqReads_Header = @UtilizacaoArqReads_Header + '
TOP 10 - Utilização Arquivos Databases - Reads (09:00 - 18:00)
' SET @UtilizacaoArqReads_Header = @UtilizacaoArqReads_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Utilizacao Arquivos Database - Reads - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @UtilizacaoArqReads_Table VARCHAR(MAX) SET @UtilizacaoArqReads_Table = CAST( ( SELECT td = Nm_Database + '' + file_id + '' + io_stall_read_ms + '' + num_of_reads + '' + [avg_read_stall_ms] + '' FROM ( select Nm_Database, ISNULL(CAST(file_id AS VARCHAR), '-') AS file_id, ISNULL(CAST(io_stall_read_ms AS VARCHAR), '-') AS io_stall_read_ms, ISNULL(CAST(num_of_reads AS VARCHAR), '-') AS num_of_reads, ISNULL(CAST([avg_read_stall_ms] AS VARCHAR), '-') AS [avg_read_stall_ms] from [dbo].[CheckList_Utilizacao_Arquivo_Reads] ) AS D ORDER BY CAST(CAST(REPLACE([avg_read_stall_ms], '-', 0) AS VARCHAR) AS NUMERIC(15,1)) DESC, CAST(REPLACE(num_of_reads, '-', 0) AS BIGINT) DESC FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @UtilizacaoArqReads_Table = REPLACE( REPLACE( REPLACE(@UtilizacaoArqReads_Table, '<', '<'), '>', '>'), '', '') SET @UtilizacaoArqReads_Table = '' + '' + REPLACE( REPLACE(@UtilizacaoArqReads_Table, '<', '<'), '>', '>') + '
Nome Database File ID io_stall_read_ms num_of_reads avg_read_stall_ms
' /*********************************************************************************************************************************** -- Databases Sem Backup - Header ***********************************************************************************************************************************/ DECLARE @DatabaseSemBackup_Header VARCHAR(MAX) SET @DatabaseSemBackup_Header = '' SET @DatabaseSemBackup_Header = @DatabaseSemBackup_Header + '
TOP 10 - Databases Sem Backup nas últimas 16 Horas
' SET @DatabaseSemBackup_Header = @DatabaseSemBackup_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Databases Sem Backup - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @DatabaseSemBackup_Table VARCHAR(MAX) SET @DatabaseSemBackup_Table = CAST( ( SELECT td = [Nm_Database] + '' FROM ( SELECT TOP 10 CASE WHEN [Nm_Database] <> 'Sem registro de Databases Sem Backup nas últimas 16 horas.' THEN ' bgcolor=yellow>' ELSE '' END + [Nm_Database] AS [Nm_Database] FROM [dbo].[CheckList_Databases_Sem_Backup] ORDER BY [Nm_Database] ) AS D ORDER BY [Nm_Database] FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @DatabaseSemBackup_Table = REPLACE( REPLACE( REPLACE( REPLACE(@DatabaseSemBackup_Table, '<', '<'), '>', '>'), ' ', '', '') SET @DatabaseSemBackup_Table = '' + '' + REPLACE( REPLACE(@DatabaseSemBackup_Table, '<', '<'), '>', '>') + '
Nome Database
' /*********************************************************************************************************************************** -- Backups Executados - Header ***********************************************************************************************************************************/ DECLARE @Backup_Header VARCHAR(MAX) SET @Backup_Header = '' SET @Backup_Header = @Backup_Header + '
TOP 10 - Backup FULL e Diferencial das Bases
' SET @Backup_Header = @Backup_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Backups Executados - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @Backup_Table VARCHAR(MAX) SET @Backup_Table = CAST( ( SELECT td = [Database_Name] + '' + [Backup_Start_Date] + '' + [Tempo_Min] + '' + [Recovery_Model] + '' + [Tipo] + '' + [Tamanho_MB] + '' FROM ( SELECT TOP 10 [Database_Name], ISNULL(CONVERT(VARCHAR, [Backup_Start_Date], 120), '-') AS [Backup_Start_Date], ISNULL(CAST([Tempo_Min] AS VARCHAR), '-') AS [Tempo_Min], ISNULL(CAST([Recovery_Model] AS VARCHAR), '-') AS [Recovery_Model], ISNULL( CASE [Type] WHEN 'D' THEN 'FULL' WHEN 'I' THEN 'Diferencial' WHEN 'L' THEN 'Log' END, '-') AS [Tipo], ISNULL(CAST([Tamanho_MB] AS VARCHAR), '-') AS [Tamanho_MB] FROM [dbo].[CheckList_Backups_Executados] ORDER BY CAST(ABS(REPLACE([Tamanho_MB], '-', 0)) AS NUMERIC(15,2)) DESC ) AS D ORDER BY CAST(ABS(REPLACE([Tamanho_MB], '-', 0)) AS NUMERIC(15,2)) DESC FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @Backup_Table = REPLACE( REPLACE( REPLACE(@Backup_Table, '<', '<'), '>', '>'), '', '') SET @Backup_Table = '' + '' + REPLACE( REPLACE(@Backup_Table, '<', '<'), '>', '>') + '
Nome Database Horário Execução Tempo (min) Recovery Tipo Backup Tamanho (MB)
' /*********************************************************************************************************************************** -- Queries em Execução - Header ***********************************************************************************************************************************/ DECLARE @QueriesRunning_Header VARCHAR(MAX) SET @QueriesRunning_Header = '' SET @QueriesRunning_Header = @QueriesRunning_Header + '
TOP 5 - Queries em Execução a mais de 2 horas
' SET @QueriesRunning_Header = @QueriesRunning_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Queries em Execução - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @QueriesRunning_Table VARCHAR(MAX) SET @QueriesRunning_Table = CAST( ( SELECT td = [dd hh:mm:ss.mss] + '' + [database_name] + '' + [login_name] + '' + [host_name] + '' + [start_time] + '' + [status] + '' + [session_id] + '' + [blocking_session_id] + '' + [wait_info] + '' + [open_tran_count] + '' + [CPU] + '' + [reads] + '' + [writes] + '' + [sql_command] + '' FROM ( SELECT TOP 5 ISNULL([dd hh:mm:ss.mss], '-') AS [dd hh:mm:ss.mss], [database_name], ISNULL([login_name], '-') AS [login_name], ISNULL([host_name], '-') AS [host_name], ISNULL(CONVERT(VARCHAR(20), [start_time], 120), '-') AS [start_time], ISNULL([status], '-') AS [status], ISNULL(CAST([session_id] AS VARCHAR), '-') AS [session_id], ISNULL(CAST([blocking_session_id] AS VARCHAR), '-') AS [blocking_session_id], ISNULL([wait_info], '-') AS [wait_info], ISNULL(CAST([open_tran_count] AS VARCHAR), '-') AS [open_tran_count], ISNULL(CAST([CPU] AS VARCHAR), '-') AS [CPU], ISNULL(CAST([reads] AS VARCHAR), '-') AS [reads], ISNULL(CAST([writes] AS VARCHAR), '-') AS [writes], ISNULL(SUBSTRING(CAST([sql_command] AS VARCHAR), 1, 150), '-') AS [sql_command] FROM [dbo].[CheckList_Queries_Running] ORDER BY [start_time] ) AS D ORDER BY [start_time] FOR XML PATH( 'tr' )) AS VARCHAR(MAX) ) SET @QueriesRunning_Table = REPLACE( REPLACE( REPLACE(@QueriesRunning_Table, '<', '<'), '>', '>'), '', '') SET @QueriesRunning_Table = '' + '' + REPLACE( REPLACE(@QueriesRunning_Table, '<', '<'), '>', '>') + '
dd hh:mm:ss.mss Database Login Host Name Hora Início Status Session ID Blocking Session ID Wait Info Transações Abertas CPU Reads Writes Query
' /*********************************************************************************************************************************** -- Jobs em Execução - Header ***********************************************************************************************************************************/ DECLARE @JobsRunning_Header VARCHAR(MAX) SET @JobsRunning_Header = '' SET @JobsRunning_Header = @JobsRunning_Header + '
TOP 10 - Jobs em Execução
' SET @JobsRunning_Header = @JobsRunning_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Jobs em Execução - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @JobsRunning_Table VARCHAR(MAX) SET @JobsRunning_Table = CAST( ( SELECT td = [Nm_JOB] + '' + [Dt_Inicio] + '' + [Qt_Duracao] + '' + [Nm_Step] + '' FROM ( SELECT TOP 10 [Nm_JOB], ISNULL(CONVERT(VARCHAR(16), [Dt_Inicio],120), '-') AS [Dt_Inicio], ISNULL(Qt_Duracao, '-') AS [Qt_Duracao], ISNULL([Nm_Step], '-') AS [Nm_Step] FROM [dbo].[CheckList_Jobs_Running] ORDER BY [Dt_Inicio] ) AS D ORDER BY [Dt_Inicio] FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @JobsRunning_Table = REPLACE( REPLACE( REPLACE(@JobsRunning_Table, '<', '<'), '>', '>'), '', '') SET @JobsRunning_Table = '' + '' + REPLACE( REPLACE(@JobsRunning_Table, '<', '<'), '>', '>') + '
Nome Job Data Início Duração Nome Step
' /*********************************************************************************************************************************** -- Jobs Alterados - Header ***********************************************************************************************************************************/ DECLARE @JobsAlterados_Header VARCHAR(MAX) SET @JobsAlterados_Header = '' SET @JobsAlterados_Header = @JobsAlterados_Header + '
TOP 10 - Jobs Alterados
' SET @JobsAlterados_Header = @JobsAlterados_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Jobs Alterados - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @JobsAlterados_Table VARCHAR(MAX) SET @JobsAlterados_Table = CAST( ( SELECT td = [Nm_Job] + '' + [Fl_Habilitado] + '' + [Dt_Criacao] + '' + [Dt_Modificacao] + '' + [Nr_Versao] + '' FROM ( SELECT TOP 10 [Nm_Job], ISNULL( CASE [Fl_Habilitado] WHEN 1 THEN 'SIM' WHEN 0 THEN 'NÃO' END, '-') AS [Fl_Habilitado], ISNULL(CONVERT(VARCHAR, [Dt_Criacao], 120), '-') AS [Dt_Criacao], ISNULL(CONVERT(VARCHAR, [Dt_Modificacao], 120), '-') AS [Dt_Modificacao], ISNULL(CAST([Nr_Versao] AS VARCHAR), '-') AS [Nr_Versao] FROM [dbo].[CheckList_Alteracao_Jobs] ORDER BY [Dt_Modificacao] DESC ) AS D FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @JobsAlterados_Table = REPLACE( REPLACE( REPLACE( @JobsAlterados_Table, '<', '<'), '>', '>'), '', '') SET @JobsAlterados_Table = '' + '' + REPLACE( REPLACE(@JobsAlterados_Table, '<', '<'), '>', '>') + '
Nome Job Habilitado Data Criação Data Alteração Núm. Versão
' /*********************************************************************************************************************************** -- Jobs que Falharam - Header ***********************************************************************************************************************************/ DECLARE @JobsFailed_Header VARCHAR(MAX) SET @JobsFailed_Header = '' SET @JobsFailed_Header = @JobsFailed_Header + '
TOP 10 - Jobs que Falharam
' SET @JobsFailed_Header = @JobsFailed_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Jobs que Falharam - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @JobsFailed_Table VARCHAR(MAX) SET @JobsFailed_Table = CAST( ( SELECT td = [Job_Name] + '' + [Status] + '' + [Dt_Execucao] + '' + [Run_Duration] + '' + [SQL_Message] + '' FROM ( SELECT TOP 10 [Job_Name], ISNULL([Status], '-') AS [Status], ISNULL(CONVERT(VARCHAR, [Dt_Execucao], 120), '-') AS [Dt_Execucao], ISNULL([Run_Duration], '-') AS [Run_Duration], ISNULL([SQL_Message], '-') AS [SQL_Message] FROM [dbo].[CheckList_Jobs_Failed] ORDER BY [Dt_Execucao] DESC ) AS D ORDER BY [Dt_Execucao] DESC FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @JobsFailed_Table = REPLACE( REPLACE( REPLACE(@JobsFailed_Table, '<', '<'), '>', '>'), '', '') SET @JobsFailed_Table = '' + '' + REPLACE( REPLACE(@JobsFailed_Table, '<', '<'), '>', '>') + '
Nome Job Status Horário Execução Duração (hh:mm:ss) Mensagem
' /*********************************************************************************************************************************** -- Jobs Demorados - Header ***********************************************************************************************************************************/ DECLARE @TempoJobs_Header VARCHAR(MAX) SET @TempoJobs_Header = '' SET @TempoJobs_Header = @TempoJobs_Header + '
TOP 10 - Jobs Demorados
' SET @TempoJobs_Header = @TempoJobs_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Jobs Demorados - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @TempoJobs_Table VARCHAR(MAX) SET @TempoJobs_Table = CAST( ( SELECT td = [Job_Name] + '' + [Status] + '' + [Dt_Execucao] + '' + [Run_Duration] + '' + [SQL_Message] + '' FROM ( SELECT TOP 10 [Job_Name], ISNULL([Status], '-') AS [Status], ISNULL(CONVERT(VARCHAR, [Dt_Execucao], 120), '-') AS [Dt_Execucao], ISNULL([Run_Duration], '-') AS [Run_Duration], ISNULL([SQL_Message], '-') AS [SQL_Message] FROM [dbo].[CheckList_Job_Demorados] ORDER BY [Run_Duration] DESC ) AS D FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @TempoJobs_Table = REPLACE( REPLACE( REPLACE(@TempoJobs_Table, '<', '<'), '>', '>'), '', '') SET @TempoJobs_Table = '' + '' + REPLACE( REPLACE(@TempoJobs_Table, '<', '<'), '>', '>') + '
Nome Job Status Horário Execução Duração Mensagem
' /*********************************************************************************************************************************** -- Queries Demoradas - Header ***********************************************************************************************************************************/ DECLARE @QueriesDemoradas_Header VARCHAR(MAX) SET @QueriesDemoradas_Header = '' SET @QueriesDemoradas_Header = @QueriesDemoradas_Header + '
TOP 10 - Queries Demoradas Dia Anterior (07:00 - 23:00)
' SET @QueriesDemoradas_Header = @QueriesDemoradas_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Queries Demoradas - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @QueriesDemoradas_Table VARCHAR(MAX) SET @QueriesDemoradas_Table = CAST( ( SELECT td = CASE WHEN [PrefixoQuery] = 'TOTAL' THEN ' bgcolor=#0B0B61>' + [PrefixoQuery] + '' ELSE [PrefixoQuery] END + '' + CASE WHEN [PrefixoQuery] = 'TOTAL' THEN ' bgcolor=#0B0B61>' + [QTD] + '' ELSE [QTD] END + '' + CASE WHEN [PrefixoQuery] = 'TOTAL' THEN ' bgcolor=#0B0B61>' + [Total] + '' ELSE [Total] END + '' + CASE WHEN [PrefixoQuery] = 'TOTAL' THEN ' bgcolor=#0B0B61>' + [Media] + '' ELSE [Media] END + '' + CASE WHEN [PrefixoQuery] = 'TOTAL' THEN ' bgcolor=#0B0B61>' + [Menor] + '' ELSE [Menor] END + '' + CASE WHEN [PrefixoQuery] = 'TOTAL' THEN ' bgcolor=#0B0B61>' + [Maior] + '' ELSE [Maior] END + '' + CASE WHEN [PrefixoQuery] = 'TOTAL' THEN ' bgcolor=#0B0B61>' + [Writes] + '' ELSE [Writes] END + '' + CASE WHEN [PrefixoQuery] = 'TOTAL' THEN ' bgcolor=#0B0B61>' + [CPU] + '' ELSE [CPU] END + '' + CASE WHEN [PrefixoQuery] = 'TOTAL' THEN ' bgcolor=#0B0B61>' + [Reads] + '' ELSE [Reads] END + '' FROM ( SELECT [dbo].[fncRetira_Caractere_Invalido_XML] ([PrefixoQuery]) AS [PrefixoQuery], ISNULL(CAST([QTD] AS VARCHAR), '-') AS [QTD], ISNULL(CAST([Total] AS VARCHAR), '-') AS [Total], ISNULL(CAST([Media] AS VARCHAR), '-') AS [Media], ISNULL(CAST([Menor] AS VARCHAR), '-') AS [Menor], ISNULL(CAST([Maior] AS VARCHAR), '-') AS [Maior], ISNULL(CAST([Writes] AS VARCHAR), '-') AS [Writes], ISNULL(CAST([CPU] AS VARCHAR), '-') AS [CPU], ISNULL(CAST([Reads] AS VARCHAR), '-') AS [Reads], [Ordem] FROM [dbo].[CheckList_Traces_Queries] ) AS D ORDER BY [Ordem], LEN([QTD]) DESC, [QTD] DESC FOR XML PATH( 'tr' )) AS VARCHAR(MAX) ) -- Correção de BUG de caractere invalido no FOR XML (character (0x0000)) SELECT @QueriesDemoradas_Table = REPLACE(@QueriesDemoradas_Table, '�', '') SET @QueriesDemoradas_Table = REPLACE( REPLACE( REPLACE( REPLACE(@QueriesDemoradas_Table, '<', '<'), '>', '>'), ' ', '', '') SET @QueriesDemoradas_Table = '' + '' + REPLACE( REPLACE(@QueriesDemoradas_Table, '<', '<'), '>', '>') + '
Prefixo Query (150 caracteres iniciais) Qtd Total (s) Média (s) Menor (s) Maior (s) Writes CPU Reads
' /*********************************************************************************************************************************** -- Queries Demoradas Geral - Header ***********************************************************************************************************************************/ DECLARE @QueriesDemoradasGeral_Header VARCHAR(MAX) SET @QueriesDemoradasGeral_Header = '' SET @QueriesDemoradasGeral_Header = @QueriesDemoradasGeral_Header + '
TOP 10 - Queries Demoradas - Últimos 10 Dias (07:00 - 23:00)
' SET @QueriesDemoradasGeral_Header = @QueriesDemoradasGeral_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Queries Demoradas Geral - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @QueriesDemoradasGeral_Table VARCHAR(MAX) SET @QueriesDemoradasGeral_Table = CAST( ( SELECT td = [Data] + '' + [QTD] + '' FROM ( SELECT [Data], ISNULL(CAST([QTD] AS VARCHAR), '-') AS [QTD] FROM [dbo].[CheckList_Traces_Queries_Geral] ) AS D ORDER BY [Data] DESC FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @QueriesDemoradasGeral_Table = REPLACE( REPLACE( REPLACE(@QueriesDemoradasGeral_Table, '<', '<'), '>', '>'), '', '') SET @QueriesDemoradasGeral_Table = '' + '' + REPLACE( REPLACE(@QueriesDemoradasGeral_Table, '<', '<'), '>', '>') + '
Data Quantidade
' /*********************************************************************************************************************************** -- Contadores - Header ***********************************************************************************************************************************/ DECLARE @Contadores_Header VARCHAR(MAX) SET @Contadores_Header = '' SET @Contadores_Header = @Contadores_Header + '
Média Contadores Dia Anterior (07:00 - 23:00)
' SET @Contadores_Header = @Contadores_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Contadores - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @Contadores_Table VARCHAR(MAX) SET @Contadores_Table = CAST( ( SELECT td = [Hora] + '' + [BatchRequests] + '' + [CPU] + '' + [Page_Life_Expectancy] + '' + [User_Connection] + '' + [Qtd_Queries_Lentas] + '' + [Reads_Queries_Lentas] + '' FROM ( SELECT [Hora], [BatchRequests], [CPU], [Page_Life_Expectancy], [User_Connection], [Qtd_Queries_Lentas], [Reads_Queries_Lentas] FROM [dbo].[CheckList_Contadores_Email] AS C ) AS D ORDER BY LEN([Hora]), [Hora] FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @Contadores_Table = REPLACE( REPLACE( REPLACE( @Contadores_Table, '<', '<'), '>', '>'), '', '') SET @Contadores_Table = '' + '' + REPLACE( REPLACE(@Contadores_Table, '<', '<'), '>', '>') + '
Hora Batch Requests CPU Page Life Expectancy Número de Conexões Qtd Queries Lentas Reads Queries Lentas
' /*********************************************************************************************************************************** -- Conexoes Abertas - Header ***********************************************************************************************************************************/ DECLARE @ConexoesAbertas_Header VARCHAR(MAX) SET @ConexoesAbertas_Header = '' SET @ConexoesAbertas_Header = @ConexoesAbertas_Header + '
TOP 10 - Conexões Abertas por Usuários
' SET @ConexoesAbertas_Header = @ConexoesAbertas_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Conexoes Abertas - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @ConexoesAbertas_Table VARCHAR(MAX) SET @ConexoesAbertas_Table = CAST( ( SELECT td = CASE WHEN [login_name] = 'TOTAL' THEN ' bgcolor=#0B0B61>' + [login_name] + '' ELSE [login_name] END + '' + CASE WHEN [login_name] = 'TOTAL ' THEN ' bgcolor=#0B0B61>' + [session_count] + '' ELSE [session_count] END + '' FROM ( SELECT Nr_Ordem, ISNULL([login_name], '-') AS [login_name], CAST([session_count] AS VARCHAR) AS [session_count] FROM [dbo].[CheckList_Conexao_Aberta_Email] ) AS D ORDER BY Nr_Ordem, CAST([session_count] AS INT) DESC FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) --SET @ConexoesAbertas_Table = REPLACE( REPLACE( REPLACE(@ConexoesAbertas_Table, '<', '<'), '>', '>'), '', '') SET @ConexoesAbertas_Table = REPLACE( REPLACE( REPLACE( REPLACE(@ConexoesAbertas_Table, '<', '<'), '>', '>'), ' ', '', '') SET @ConexoesAbertas_Table = '' + '' + REPLACE( REPLACE(@ConexoesAbertas_Table, '<', '<'), '>', '>') + '
Login Name Qtd Conexões
' /*********************************************************************************************************************************** -- Fragmentação de Índices - Header ***********************************************************************************************************************************/ DECLARE @FragmentacaoIndice_Header VARCHAR(MAX) SET @FragmentacaoIndice_Header = '' SET @FragmentacaoIndice_Header = @FragmentacaoIndice_Header + '
TOP 10 - Fragmentação dos Índices
' SET @FragmentacaoIndice_Header = @FragmentacaoIndice_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Fragmentação de Índices - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @FragmentacaoIndice_Table VARCHAR(MAX) SET @FragmentacaoIndice_Table = CAST( ( SELECT td = [Dt_Referencia] + '' + [Nm_Database] + '' + [Nm_Tabela] + '' + [Nm_Indice] + '' + [Avg_Fragmentation_In_Percent] + '' + [Page_Count] + '' + [Fill_Factor] + '' + [Compressao] + '' FROM ( SELECT TOP 10 ISNULL(CONVERT(VARCHAR, [Dt_Referencia], 120), '-') AS [Dt_Referencia], [Nm_Database], ISNULL([Nm_Tabela], '-') AS [Nm_Tabela], ISNULL([Nm_Indice], '-') AS [Nm_Indice], ISNULL(CAST([Avg_Fragmentation_In_Percent] AS VARCHAR), '-') AS [Avg_Fragmentation_In_Percent], ISNULL(CAST([Page_Count] AS VARCHAR), '-') AS [Page_Count], ISNULL(CAST([Fill_Factor] AS VARCHAR), '-') AS [Fill_Factor], ISNULL( CASE [Fl_Compressao] WHEN 0 THEN 'Sem Compressão' WHEN 1 THEN 'Compressão de Linha' WHEN 2 THEN 'Compressao de Página' END, '-') AS [Compressao] FROM [dbo].[CheckList_Fragmentacao_Indices] ORDER BY CAST(REPLACE([Avg_Fragmentation_In_Percent], '-', 0) AS NUMERIC(15,2)) DESC ) AS D FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @FragmentacaoIndice_Table = REPLACE( REPLACE( REPLACE( @FragmentacaoIndice_Table, '<', '<'), '>', '>'), '', '') SET @FragmentacaoIndice_Table = '' + '' + REPLACE( REPLACE( @FragmentacaoIndice_Table, '<', '<'), '>', '>') + '
Referencia Database Tabela Indice Fragmentacao (%) Qtd Páginas Fill Factor (%) Compressão de Dados
' /*********************************************************************************************************************************** -- Waits Stats - Header ***********************************************************************************************************************************/ DECLARE @WaitsStats_Header VARCHAR(MAX) SET @WaitsStats_Header = '' SET @WaitsStats_Header = @WaitsStats_Header + '
TOP 10 - Waits Stats Dia Anterior (07:00 - 23:00)
' SET @WaitsStats_Header = @WaitsStats_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Waits Stats - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @WaitsStats_Table VARCHAR(MAX) SET @WaitsStats_Table = CAST( ( SELECT td = [WaitType] + '' + [Max_Log] + '' + [DIf_Wait_S] + '' + [DIf_Resource_S] + '' + [DIf_Signal_S] + '' + [DIf_WaitCount] + '' + [Last_Percentage] + '' FROM ( SELECT TOP 10 [WaitType], ISNULL(CONVERT(VARCHAR, [Max_Log], 120), '-') AS [Max_Log], ISNULL(CAST([DIf_Wait_S] AS VARCHAR), '-') AS [DIf_Wait_S], ISNULL(CAST([DIf_Resource_S] AS VARCHAR), '-') AS [DIf_Resource_S], ISNULL(CAST([DIf_Signal_S] AS VARCHAR), '-') AS [DIf_Signal_S], ISNULL(CAST([DIf_WaitCount] AS VARCHAR), '-') AS [DIf_WaitCount], ISNULL(CAST([Last_Percentage] AS VARCHAR), '-') AS [Last_Percentage] FROM [dbo].[CheckList_Waits_Stats] ORDER BY CAST(REPLACE([DIf_Wait_S], '-', 0) AS NUMERIC(15,2)) DESC ) AS D ORDER BY CAST(REPLACE([DIf_Wait_S], '-', 0) AS NUMERIC(15,2)) DESC FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @WaitsStats_Table = REPLACE( REPLACE( REPLACE( @WaitsStats_Table, '<', '<'), '>', '>'), '', '') SET @WaitsStats_Table = '' + '' + REPLACE( REPLACE( @WaitsStats_Table, '<', '<'), '>', '>') + '
WaitType Data Log Wait (s) Resource (s) Signal (s) Qtd Wait Last (%)
' /*********************************************************************************************************************************** -- Alertas Sem CLEAR - Header ***********************************************************************************************************************************/ DECLARE @Alerta_Sem_Clear_Header VARCHAR(MAX) SET @Alerta_Sem_Clear_Header = '' SET @Alerta_Sem_Clear_Header = @Alerta_Sem_Clear_Header + '
Alertas Sem CLEAR
' SET @Alerta_Sem_Clear_Header = @Alerta_Sem_Clear_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Alertas Sem CLEAR - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @Alerta_Sem_Clear_Table VARCHAR(MAX) SET @Alerta_Sem_Clear_Table = CAST( ( SELECT td = [Nm_Alerta] + '' + [Ds_Mensagem] + '' + [Dt_Alerta] + '' + [Run_Duration] + '' FROM ( SELECT [Nm_Alerta], ISNULL([Ds_Mensagem], '-') AS [Ds_Mensagem], ISNULL(CONVERT(VARCHAR, [Dt_Alerta], 120), '-') AS [Dt_Alerta], ISNULL([Run_Duration], '-') AS [Run_Duration] FROM [dbo].[CheckList_Alerta_Sem_Clear] ) AS D ORDER BY [Dt_Alerta] FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @Alerta_Sem_Clear_Table = REPLACE( REPLACE( REPLACE( @Alerta_Sem_Clear_Table, '<', '<'), '>', '>'), '', '') SET @Alerta_Sem_Clear_Table = '' + '' + REPLACE( REPLACE( @Alerta_Sem_Clear_Table, '<', '<'), '>', '>') + '
Nome Alerta Mensagem Data Duração
' /*********************************************************************************************************************************** -- Alertas - Header ***********************************************************************************************************************************/ DECLARE @Alerta_Header VARCHAR(MAX) SET @Alerta_Header = '' SET @Alerta_Header = @Alerta_Header + '
TOP 50 - Alertas do Dia Anterior
' SET @Alerta_Header = @Alerta_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Alertas - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @Alerta_Table VARCHAR(MAX) SET @Alerta_Table = CAST( ( SELECT td = [Nm_Alerta] + '' + [Ds_Mensagem] + '' + [Dt_Alerta] + '' + [Run_Duration] + '' FROM ( SELECT TOP 50 [Nm_Alerta], ISNULL([Ds_Mensagem], '-') AS [Ds_Mensagem], ISNULL(CONVERT(VARCHAR, [Dt_Alerta], 120), '-') AS [Dt_Alerta], ISNULL([Run_Duration], '-') AS [Run_Duration] FROM [dbo].[CheckList_Alerta] ORDER BY [Dt_Alerta] DESC ) AS D ORDER BY [Dt_Alerta] DESC FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @Alerta_Table = REPLACE( REPLACE( REPLACE( @Alerta_Table, '<', '<'), '>', '>'), '', '') SET @Alerta_Table = '' + '' + REPLACE( REPLACE( @Alerta_Table, '<', '<'), '>', '>') + '
Nome Alerta Mensagem Data Duração
' /*********************************************************************************************************************************** -- Login Failed - Header ***********************************************************************************************************************************/ DECLARE @LoginFailed_Header VARCHAR(MAX) SET @LoginFailed_Header = '' SET @LoginFailed_Header = @LoginFailed_Header + '
TOP 10 - Login Failed - SQL Server
' SET @LoginFailed_Header = @LoginFailed_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Login Failed - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @LoginFailed_Table VARCHAR(MAX) SET @LoginFailed_Table = CAST( ( SELECT td = CASE WHEN [Text] = 'TOTAL' THEN ' bgcolor=#0B0B61>' + [Text] + '' ELSE [Text] END + '' + CASE WHEN [Text] = 'TOTAL ' THEN ' bgcolor=#0B0B61>' + [Qt_Erro] + '' ELSE [Qt_Erro] END + '' FROM ( SELECT TOP 10 [Nr_Ordem], [Text], ISNULL(CAST([Qt_Erro] AS VARCHAR), '-') AS [Qt_Erro] FROM [dbo].[CheckList_SQLServer_LoginFailed_Email] ORDER BY CAST(REPLACE([Qt_Erro], '-', 0) AS INT) DESC ) AS D ORDER BY Nr_Ordem, CAST(REPLACE([Qt_Erro], '-', 0) AS INT) DESC FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @LoginFailed_Table = REPLACE( REPLACE( REPLACE( REPLACE(@LoginFailed_Table, '<', '<'), '>', '>'), ' ', '', '') SET @LoginFailed_Table = '' + '' + REPLACE( REPLACE( @LoginFailed_Table, '<', '<'), '>', '>') + '
Usuário Qtd Erros
' /*********************************************************************************************************************************** -- Error Log SQL - Header ***********************************************************************************************************************************/ DECLARE @LogSQL_Header VARCHAR(MAX) SET @LogSQL_Header = '' SET @LogSQL_Header = @LogSQL_Header + '
TOP 100 - Error Log do SQL Server
' SET @LogSQL_Header = @LogSQL_Header + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Error Log SQL - Informações ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @LogSQL_Table VARCHAR(MAX) SET @LogSQL_Table = CAST( ( SELECT td = [Dt_Log] + '' + [ProcessInfo] + '' + [Text] + '' FROM ( SELECT TOP 100 ISNULL(CONVERT(VARCHAR, [Dt_Log], 120), '-') AS [Dt_Log], ISNULL([ProcessInfo], '-') AS [ProcessInfo], [Text] FROM [dbo].[CheckList_SQLServer_ErrorLog] ORDER BY [Dt_Log] DESC ) AS D ORDER BY [Dt_Log] DESC FOR XML PATH( 'tr' ), TYPE ) AS VARCHAR(MAX) ) SET @LogSQL_Table = REPLACE( REPLACE( REPLACE(@LogSQL_Table, '<', '<'), '>', '>'), '', '') SET @LogSQL_Table = '' + '' + REPLACE( REPLACE( @LogSQL_Table, '<', '<'), '>', '>') + '
Data Log Processo Mensagem
' /*********************************************************************************************************************************** -- Seção em branco para dar espaço entre AS tabelas e os cabeçalhos ***********************************************************************************************************************************/ DECLARE @emptybody2 VARCHAR(MAX) SET @emptybody2 = '' SET @emptybody2 = '' + '' + REPLACE( REPLACE( ISNULL(@emptybody2,''), '<', '<'), '>', '>') + '
' ------------------------------------------------------------------------------------------------------------------------------------ -- Seta AS Informações do E-Mail ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @importance AS VARCHAR(6) = 'High', @Reportdate DATETIME = GETDATE(), @recipientsList VARCHAR(8000), @subject AS VARCHAR(500), @EmailBody VARCHAR(MAX) = '' SELECT @subject = 'CheckList Diário do Banco de Dados - ' + @Nm_Empresa + ' - ' + @@SERVERNAME IF ( @DisponibilidadeSQL_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @DisponibilidadeSQL_Header + @emptybody2 + @DisponibilidadeSQL_Table + @emptybody2 -- Disponibilidade SQL IF ( @EspacoDisco_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @EspacoDisco_Header + @emptybody2 + @EspacoDisco_Table + @emptybody2 -- Espaço em Disco IF ( @ArquivosDados_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @ArquivosDados_Header + @emptybody2 + @ArquivosDados_Table + @emptybody2 -- Arquivos Dados IF ( @ArquivosLog_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @ArquivosLog_Header + @emptybody2 + @ArquivosLog_Table + @emptybody2 -- Arquivos Log IF ( @CrescimentoBases_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @CrescimentoBases_Header + @emptybody2 + @CrescimentoBases_Table + @emptybody2 -- Crescimento das Bases IF ( @CrescimentoTabelas_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @CrescimentoTabelas_Header + @emptybody2 + @CrescimentoTabelas_Table + @emptybody2 -- Crescimento das Tabelas IF ( @UtilizacaoArqWrites_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @UtilizacaoArqWrites_Header + @emptybody2 + @UtilizacaoArqWrites_Table + @emptybody2 -- Utilizacao Arquivos - Wrties IF ( @UtilizacaoArqReads_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @UtilizacaoArqReads_Header + @emptybody2 + @UtilizacaoArqReads_Table + @emptybody2 -- Utilizacao Arquivos - Reads IF ( @DatabaseSemBackup_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @DatabaseSemBackup_Header + @emptybody2 + @DatabaseSemBackup_Table + @emptybody2 -- Databases Sem Backup IF ( @Backup_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @Backup_Header + @emptybody2 + @Backup_Table + @emptybody2 -- Backups Executados IF ( @QueriesRunning_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @QueriesRunning_Header + @emptybody2 + @QueriesRunning_Table + @emptybody2 -- Queries em Execução IF ( @JobsRunning_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @JobsRunning_Header + @emptybody2 + @JobsRunning_Table + @emptybody2 -- Jobs em Execução IF ( @JobsAlterados_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @JobsAlterados_Header + @emptybody2 + @JobsAlterados_Table + @emptybody2 -- Jobs Alterados IF ( @JobsFailed_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @JobsFailed_Header + @emptybody2 + @JobsFailed_Table + @emptybody2 -- Jobs Failed IF ( @TempoJobs_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @TempoJobs_Header + @emptybody2 + @TempoJobs_Table + @emptybody2 -- Jobs Demorados IF ( @QueriesDemoradas_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @QueriesDemoradas_Header + @emptybody2 + @QueriesDemoradas_Table + @emptybody2 -- Queries Demoradas IF ( @QueriesDemoradasGeral_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @QueriesDemoradasGeral_Header + @emptybody2 + @QueriesDemoradasGeral_Table + @emptybody2 -- Queries Demoradas Geral IF ( @Contadores_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @Contadores_Header + @emptybody2 + @Contadores_Table + @emptybody2 -- Contadores IF ( @ConexoesAbertas_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @ConexoesAbertas_Header + @emptybody2 + @ConexoesAbertas_Table + @emptybody2 -- Conexao Aberta IF ( @FragmentacaoIndice_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @FragmentacaoIndice_Header + @emptybody2 + @FragmentacaoIndice_Table + @emptybody2 -- Fragmentação Índice IF ( @WaitsStats_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @WaitsStats_Header + @emptybody2 + @WaitsStats_Table + @emptybody2 -- Waits Stats IF ( @Alerta_Sem_Clear_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @Alerta_Sem_Clear_Header + @emptybody2 + @Alerta_Sem_Clear_Table + @emptybody2 -- Alerta Sem CLEAR IF ( @Alerta_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @Alerta_Header + @emptybody2 + @Alerta_Table + @emptybody2 -- Alertas IF ( @LoginFailed_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @LoginFailed_Header + @emptybody2 + @LoginFailed_Table + @emptybody2 -- Login Failed IF ( @LogSQL_Table IS NOT NULL ) SELECT @EmailBody = @EmailBody + @LogSQL_Header + @emptybody2 + @LogSQL_Table + @emptybody2 -- Error Log SQL /*********************************************************************************************************************************** -- Inclui uma imagem com link para o site do Fabricio Lima ***********************************************************************************************************************************/ select @EmailBody = @EmailBody + '

' + ' ' /*********************************************************************************************************************************** -- Envia o E-Mail do CheckList do Banco de Dados ***********************************************************************************************************************************/ EXEC [msdb].[dbo].[sp_send_dbmail] @profile_name = @Profile_Email, @recipients = @Ds_Email, @subject = @subject, @body = @EmailBody, @body_format = 'HTML', @importance = @importance END GO USE [msdb] GO /*********************************************************************************************************************************** -- CRIA JOB: [DBA - CheckList do Banco de Dados] ***********************************************************************************************************************************/ BEGIN TRANSACTION DECLARE @ReturnCode INT SELECT @ReturnCode = 0 ------------------------------------------------------------------------------------------------------------------------------------ -- Seleciona a Categoria do JOB ------------------------------------------------------------------------------------------------------------------------------------ IF NOT EXISTS ( SELECT [name] FROM [msdb].[dbo].[syscategories] WHERE [name] = N'Database Maintenance' AND [category_class] = 1 ) BEGIN EXEC @ReturnCode = [msdb].[dbo].[sp_add_category] @class = N'JOB', @type = N'LOCAL', @name = N'Database Maintenance' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback END DECLARE @jobId BINARY(16) EXEC @ReturnCode = [msdb].[dbo].[sp_add_job] @job_name = N'DBA - CheckList do Banco de Dados', @enabled = 1, @notify_level_eventlog = 0, @notify_level_email = 2, @notify_level_netsend = 0, @notify_level_page = 0, @delete_level = 0, @description = N'JOB responsável por enviar o E-Mail com o CheckList do Banco de Dados.', @category_name = N'Database Maintenance', @owner_login_name = N'sa', @notify_email_operator_name=N'Alerta_BD', @job_id = @jobId OUTPUT IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback ------------------------------------------------------------------------------------------------------------------------------------ -- Cria o Step 1 do JOB - Carga Tabelas CheckList ------------------------------------------------------------------------------------------------------------------------------------ EXEC @ReturnCode = [msdb].[dbo].[sp_add_jobstep] @job_id = @jobId, @step_name = N'DBA - Carga Tabelas CheckList', @step_id = 1, @cmdexec_success_code = 0, @on_success_action = 3, @on_success_step_id = 0, @on_fail_action = 2, @on_fail_step_id = 0, @retry_attempts = 0, @retry_interval = 0, @os_run_priority = 0, @subsystem = N'TSQL', @command = N'EXEC [dbo].[stpCheckList_Espaco_Disco] -- Espaço em Disco EXEC [dbo].[stpCheckList_Arquivos_MDF_LDF] -- Arquivos MDF e LDF EXEC [dbo].[stpCheckList_Database_Growth] -- Crescimento das Bases EXEC [dbo].[stpCheckList_Table_Growth] -- Crescimento das Tabelas EXEC [dbo].[stpCheckList_Utilizacao_Arquivo] -- Utilizacao Arquivos EXEC [dbo].[stpCheckList_Databases_Sem_Backup] -- Databases Sem Backup EXEC [dbo].[stpCheckList_Backups_Executados] -- Backups Executados EXEC [dbo].[stpCheckList_Queries_Running] -- Queries em Execução EXEC [dbo].[stpCheckList_Jobs_Failed] -- Jobs Failed EXEC [dbo].[stpCheckList_Alteracao_Jobs] -- Jobs Alterados EXEC [dbo].[stpCheckList_Job_Demorados] -- Jobs Demorados EXEC [dbo].[stpCheckList_Jobs_Running] -- Jobs em Execução EXEC [dbo].[stpCheckList_Traces_Queries] -- Queries Demoradas EXEC [dbo].[stpCheckList_Contadores] -- Contadores EXEC [dbo].[stpCheckList_Conexao_Aberta] -- Conexões Abertas EXEC [dbo].[stpCheckList_Fragmentacao_Indices] -- Fragmentacao Índice EXEC [dbo].[stpCheckList_Waits_Stats] -- Waits Stats EXEC [dbo].[stpCheckList_Alerta] -- Alertas EXEC [dbo].[stpCheckList_SQLServer_ErrorLog] -- Error Log SQL', @database_name = N'Traces', @flags = 0 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback ------------------------------------------------------------------------------------------------------------------------------------ -- Cria o Step 2 do JOB - Envio de E-mail em HTML com o CheckList do Banco de Dados ------------------------------------------------------------------------------------------------------------------------------------ EXEC @ReturnCode = [msdb].[dbo].[sp_add_jobstep] @job_id = @jobId, @step_name = N'DBA - Envio de E-mail em HTML com o CheckList do Banco de Dados', @step_id = 2, @cmdexec_success_code = 0, @on_success_action = 1, @on_success_step_id = 0, @on_fail_action = 2, @on_fail_step_id = 0, @retry_attempts = 0, @retry_interval = 0, @os_run_priority = 0, @subsystem = N'TSQL', @command = N'EXEC[dbo].[stpEnvia_CheckList_Diario_DBA] @Nm_Empresa = ''NomeEmpresa'', @Profile_Email = ''MSSQLServer'', @Ds_Email = ''E-mail@provedor.com''', @database_name = N'Traces', @flags = 0 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = [msdb].[dbo].[sp_update_job] @job_id = @jobId, @start_step_id = 1 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback ------------------------------------------------------------------------------------------------------------------------------------ -- Cria o Schedule do JOB ------------------------------------------------------------------------------------------------------------------------------------ DECLARE @Dt_Atual VARCHAR(8) = CONVERT(VARCHAR(8), GETDATE(), 112) EXEC @ReturnCode = [msdb].[dbo].[sp_add_jobschedule] @job_id = @jobId, @name = N'DIÁRIO - 07:00', @enabled = 1, @freq_type = 4, @freq_interval = 1 , @freq_subday_type = 1, @freq_subday_interval = 0, @freq_relative_interval = 0, @freq_recurrence_factor = 0, @active_start_date = @Dt_Atual, @active_end_date = 99991231, @active_start_time = 70000, @active_end_time = 235959, @schedule_uid = N'5db1dad0-4ec4-4cb2-8bb4-6841a8a90cfc' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = [msdb].[dbo].[sp_add_jobserver] @job_id = @jobId, @server_name = N'(local)' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback COMMIT TRANSACTION GOTO EndSave QuitWithRollback: IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION EndSave: GO