Introdução
Com todos os avanços no SQL Server e nos dados, é ótimo que ferramentas SQL nativas como Alertas e Operadores ainda estejam disponíveis. Eles são os principais recursos do SQL Server Agent relacionados a qualquer coisa na automação do SQL Server.
Seus papéis são claros:
- Alertas, quando configurados, permitem que os administradores de banco de dados saibam quando um evento especificado ocorreu.
- Um operador é um objeto definido no SQL Server que mapeia qualquer pessoa ou grupo que possa receber notificações quando esses eventos ocorrerem.
Tipos de eventos
O SQL Server registra eventos no Windows Application Log – podemos acessá-lo através do Windows Event Viewer no nível do sistema operacional. O SQL Server Agent pode ler o log do aplicativo e disparar alertas quando houver uma correspondência entre 2 categorias de coisas:1) eventos registrados no log do aplicativo 2) um alerta definido por um administrador.
Existem três tipos principais de eventos:
- Eventos do SQL Server
- Condições de desempenho do SQL Server
- Eventos WMI
Criando um evento do SQL Server
Começamos a criar um alerta do SQL Server Agent clicando com o botão direito do mouse no nó Alertas no explorador de objetos em SQL Server Agent. Isso abre a janela mostrada na Fig. 2 onde você especifica o nome do alerta, seu tipo (SQL Server Event Alert neste caso), escopo do banco de dados e condições de alerta.
A maneira mais simples de especificar uma condição é usar o nível de gravidade. E para obter uma lista completa de mensagens de erro no SQL Server, você precisa consultar sys.messages. Observe que essa exibição contém 309.408 linhas, portanto, usar um filtro é uma ótima ideia - é por isso que, na minha consulta, filtrei o inglês por meio do comando.
Fig. 1. Nó de alertas
-- Listagem 1:Mensagens de erro do SQL Server usam msdbgoSELECT * FROM sys.messages em que language_id=1033ordenar por gravidade;
Fig. 2. Criando um alerta de evento do SQL Server
Observe que eu também poderia usar uma mensagem de erro específica para acionar um alerta. Conforme mencionado anteriormente, todas as mensagens de erro são listadas na exibição de catálogo do SQL Server sys.messages. Na tela da Fig. 2, apenas selecionei as condições do evento – a página de resposta me permitiu escolher o que acontece se esse evento for capturado. Como você pode ver, posso optar por automatizar minha resposta executando um trabalho ou simplesmente notificar os operadores. Exploraremos a execução de um trabalho mais tarde, mas, por enquanto, vamos observar por que um Operador é obrigado a prosseguir com a opção alternativa. Criaremos um operador na mesma janela, mas se tivéssemos operadores existentes, poderíamos simplesmente selecioná-los da lista.
Fig. 3. Selecionando uma resposta
Fig. 4. Definindo um Operador
Fig. 5. Selecionando o Canal de Alerta
Na Fig 5, escolhemos Email como meio de envio de notificações. Você deve configurar o Database Mail corretamente, caso contrário, os alertas gerados permanecerão na fila. Na terceira página da janela Novo Alerta, podemos escolher se a mensagem de erro será incluída na notificação por e-mail e se queremos enviar uma mensagem adicional (por exemplo, as instruções para um DBA Junior sobre outras ações). Também determinamos o intervalo entre os alertas disparados. É importante porque se você deixar no padrão (0), a caixa de correio da operadora ficará cheia de alertas em um curto período de tempo.
Fig.6. Configurando opções
-- Listagem 2:Criando um alerta do SQL Server usando sp_add_alertUSE [msdb]GOEXEC msdb.dbo.sp_add_alert @name=N'Alert_Insufficient_Resources_017',@message_id=0,@severity=17,@enabled=1,@delay_between_responses=900,@include_event_description_in=1,@job_id=N'00000000-0000-0000-0000-000000000000'GOEXEC msdb.dbo.sp_add_notification @alert_name=N'Alert_Insufficient_Resources_017', @operator_name=N'DatabaseAdmin', @notification_method pré>
A Listagem 2 mostra o código equivalente para implementar esse alerta. Depois de concluir o processo clicando em OK, poderemos visualizar o alerta e o operador no nó do SQL Server Agent no Pesquisador de Objetos.
Fig. 7. Alerta criado
Criando um alerta de condição de desempenho do SQL Server
Também podemos seguir a rota alternativa e criar um alerta de condição de desempenho. Como exemplo, escolhemos Databases> Percent Log Used Counter. Dizemos ao SQL Server para gerar um evento quando o uso do arquivo de log exceder 75%. Nesse caso, escolhemos ‘executar um trabalho’ como resposta. A Listagem 3 mostra as principais tarefas sendo executadas por este trabalho e a Listagem 4 mostra a definição completa do trabalho.
Fig. 8. Alerta de condição de desempenho
-- Listagem 3:Mensagens de erro do SQL ServerBACKUP LOG [DB1] TO DISK =N'E:\MSSQL\Backup\DBTransactionLog.bak'WITH RETAINDAYS =90, NOFORMAT, NOINIT, NAME =N'DB1-TransactionLog Backup' ,SKIP, NOREWIND, NOUNLOAD, STATS =10GOUSE [DB1]GODBCC SHRINKFILE (N'DB1_log' , 0, TRUNCATEONLY)GO-- Listagem 4:Definição completa da tarefa de backup do SQL AgentUSE [msdb]GO/****** Objeto :Job [DB1_BackupTransactionLog] Data do Script:27/11/2019 19:20:22 ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode =0/******* Objeto:JobCategory [[Uncategorized (Local )]] Data do script:27/11/2019 19:20:23 ******/IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class =1)BEGINEXEC @ReturnCode =msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'IF (@@ERROR <> 0 OR @ ReturnCode <> 0) GOTO QuitWithRollbackENDDECLARE @jobId BINARY(16)EXEC @ReturnCode =msdb.dbo.sp_add_job @job_name=N'DB1_BackupTransactionLog',@enabled=1, @notify_level_eventlog=0,@notify_level_email=3,@notify_level_netsend=0,@notify_level_page=0,@delete_level=0,@description=N'Faça backup do log de transações para DB1 quando o uso do log de transações exceder 75%',@category_name=N' [Uncategorized (Local)]',@owner_login_name=N'DESKTOP-CT8K40N\kenne',@notify_email_operator_name=N'DatabaseAdmin', @job_id =@jobId OUTPUTIF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback /******* Objeto:Etapa [Backup_Transaction_Log] Data do script:27/11/2019 19:20:23 ******/EXEC @ReturnCode =msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'Backup_Transaction_Log',@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=2,@retry_interval=15,@os_run_priority =0, @subsystem=N'TSQL',@command=N'-- Listagem 3:Mensagens de erro do SQL ServerBACKUP LOG [DB1] TO DISK =N''E:\MSSQL\Backup\DBTransactionLog.bak''WITH RETAINDAYS =90, NOFORMAT, NOINIT, NAME =N''DB1-TransactionLog Backup'',SKIP, NOREWIN D, NOUNLOAD, STATS =10GO',@database_name=N'master',@flags=0IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback/****** Objeto:Etapa [DB1_Shrink_Transaction_Log_File] Data do script:27/11/2019 19:20:23 ******/EXEC @ReturnCode =msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'DB1_Shrink_Transaction_Log_File',@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=2,@retry_interval=15,@os_run_priority=0, @subsystem=N'TSQL',@command =N'USE [DB1]GODBCC SHRINKFILE (N''DB1_log'' , 0, TRUNCATEONLY)GO',@database_name=N'master',@flags=0IF (@@ERROR <> 0 OU @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_update_job @job_id =@jobId, @start_step_id =1IF (@@ERROR <> 0 OU @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_add_jobserver @job_id =@jobId, @server_name =N'(local)'IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackCOMMIT TRANSACTIONGOTO EndSaveQui tWithRollback:IF (@@TRANCOUNT> 0) ROLLBACK TRANSACTIONEndSave:GO
Fig. 9. Criar Job para o Executado
Como nossa resposta, nesse caso, é a execução do trabalho, também incluímos uma notificação no próprio trabalho. Assim que terminarmos a criação do trabalho, podemos revisar as propriedades do alerta no Pesquisador de Objetos. Podemos verificar na Página de Histórico quantas vezes o evento ocorreu.
Fig. 10. Opções de alerta
Fig. 11. Página de histórico de alertas
Conclusão
Neste artigo, exploramos a criação de alertas e operadores. Você pode aproveitar esse recurso poderoso no SQL Server e configurar seu ambiente para monitorar eventos básicos sem comprar uma ferramenta de terceiros. A possibilidade de usar trabalhos para corrigir pequenos problemas nos ajuda a obter um gerenciamento proativo de nosso ambiente SQL Server.