Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Utilizzo di avvisi e operatori in SQL Server

Introduzione

Con tutti i progressi di SQL Server e dati, è fantastico che strumenti SQL nativi come Avvisi e Operatori siano ancora disponibili. Sono le funzionalità chiave di SQL Server Agent correlate a qualsiasi cosa nell'automazione di SQL ServerSQL Server.

I loro ruoli sono chiari:

  • Gli avvisi, quando configurati, informano gli amministratori del database quando si è verificato un evento specifico.
  • Un operatore è un oggetto definito all'interno di SQL Server che esegue il mapping di chiunque o di un gruppo in grado di ricevere notifiche quando si verificano questi eventi.

Tipi di eventi

SQL Server registra gli eventi nel registro delle applicazioni di Windows:possiamo accedervi tramite il Visualizzatore eventi di Windows a livello di sistema operativo. SQL Server Agent può leggere il registro dell'applicazione e generare avvisi quando esiste una corrispondenza tra 2 categorie di elementi:1) eventi registrati nel registro dell'applicazione 2) un avviso definito da un amministratore.

Esistono tre tipi principali di eventi:

  • Eventi di SQL Server
  • Condizioni di prestazione di SQL Server
  • Eventi WMI

Creazione di un evento SQL Server

Iniziamo a creare un avviso di SQL Server Agent facendo clic con il pulsante destro del mouse sul nodo Avvisi in Esplora oggetti in SQL Server Agent. Si apre la finestra mostrata in Fig. 2 in cui si specifica il nome dell'avviso, il suo tipo (in questo caso SQL Server Event Alert), l'ambito del database e le condizioni di avviso.

Il modo più semplice per specificare una condizione consiste nell'utilizzare il livello di gravità. E per ottenere un elenco completo dei messaggi di errore in SQL Server, è necessario eseguire una query su sys.messages. Tieni presente che questa visualizzazione contiene 309408 righe, quindi l'utilizzo di un filtro è un'ottima idea:ecco perché nella mia query ho filtrato l'inglese tramite comando.


Fig. 1. Nodo Avvisi

-- Listing 1:SQL Server Error Messagesuse msdbgoSELECT * FROM sys.messages dove language_id=1033ordina per gravità;

Fig. 2. Creazione di un avviso di evento di SQL Server

Si noti che potrei anche utilizzare un messaggio di errore specifico per attivare un avviso. Come accennato in precedenza, tutti i messaggi di errore sono elencati nella visualizzazione del catalogo di SQL Server sys.messages. Nella schermata Fig. 2, ho semplicemente selezionato le condizioni dell'evento:la pagina di risposta mi ha permesso di scegliere cosa succede se questo evento viene catturato. Come puoi vedere, posso scegliere di automatizzare la mia risposta eseguendo un lavoro o semplicemente avvisare gli operatori. Esploreremo l'esecuzione di un lavoro più avanti ma, per ora, osserviamo perché è necessario che un operatore proceda con l'opzione alternativa. Creeremo un operatore nella stessa finestra, ma se avessimo operatori esistenti, avremmo potuto semplicemente selezionarli dall'elenco.

Fig. 3. Selezione di una risposta

Fig. 4. Definizione di un operatore

Fig. 5. Selezione del canale di avviso

In Fig 5, scegliamo l'e-mail come mezzo per l'invio delle notifiche. È necessario configurare correttamente Posta elettronica database, altrimenti gli avvisi generati rimarranno in coda. Nella terza pagina della finestra Nuovo avviso, possiamo scegliere se il messaggio di errore è incluso nella notifica e-mail e se vogliamo inviare un messaggio aggiuntivo (ad esempio, le istruzioni a un DBA Junior su ulteriori azioni). Determiniamo anche l'intervallo tra gli avvisi attivati. È importante perché se lo lasci al valore predefinito (0), la casella di posta dell'operatore sarà piena di avvisi in un breve periodo di tempo.


Fig .6. Configurazione delle opzioni

-- Listato 2:Creazione di un avviso di SQL Server utilizzando 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 =1GO pre> 

Il Listato 2 mostra il codice equivalente per l'implementazione di questo avviso. Una volta completato il processo facendo clic su OK, saremo in grado di visualizzare sia l'avviso che l'operatore nel nodo SQL Server Agent in Esplora oggetti.

Fig. 7. Avviso creato

Creazione di un avviso di condizione delle prestazioni di SQL Server

Possiamo anche seguire la strada alternativa e creare un avviso sulle condizioni di prestazione. Ad esempio, scegliamo Database> Contatore percentuale log utilizzato. Diciamo a SQL Server di generare un evento quando l'utilizzo del file di registro supera il 75%. In questo caso, scegliamo "per eseguire un lavoro" come risposta. Il Listato 3 mostra le principali attività svolte da questo lavoro e il Listato 4 mostra la definizione completa del lavoro.

Fig. 8. Avviso sulle condizioni di prestazione

-- Elenco 3:Messaggi di errore di 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-- Elenco 4:Definizione completa del processo di backup dell'agente SQLUSE [msdb]GO/****** Oggetto :Job [DB1_BackupTransactionLog] Data script:27/11/2019 7:20:22 PM ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode =0/****** Oggetto:JobCategory [[Uncategorized (Local )]] Data 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'Backup del registro delle transazioni per DB1 quando l'utilizzo del registro delle transazioni supera il 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 O @ReturnCode <> 0) GOTO QuitWithRollback /****** Oggetto:Step [Backup_Transaction_Log] Data 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'-- Elenco 3:Messaggi di errore di SQL ServerBACKUP LOG [DB1] SU DISCO =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/****** Oggetto:Passaggio [DB1_Shrink_Transaction_Log_File] Data 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',@comando =N'USE [DB1]GODBCC SHRINKFILE (N''DB1_log'' , 0, TRUNCATEONLY)GO',@database_name=N'master',@flags=0IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_update_job @job_id =@jobId, @start_step_id =1IF (@@ERROR <> 0 O @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) TRANSAZIONE DI ROLLBACKEndSalva:Vai

Fig. 9. Crea lavoro per l'esecuzione

Poiché la nostra risposta, in questo caso, è l'esecuzione del lavoro, includiamo anche una notifica nel lavoro stesso. Una volta terminata la creazione del lavoro, è possibile rivedere le proprietà dell'avviso in Esplora oggetti. Possiamo controllare nella pagina della cronologia quante volte si è verificato l'evento.

Fig. 10. Opzioni di avviso

Fig. 11. Pagina Cronologia avvisi

Conclusione

In questo articolo abbiamo esplorato la creazione di avvisi e operatori. Puoi sfruttare questa potente funzionalità in SQL Server e configurare il tuo ambiente per il monitoraggio degli eventi di base senza acquistare uno strumento di terze parti. La possibilità di utilizzare i lavori per correggere problemi minori ci aiuta a ottenere una gestione proattiva del nostro ambiente SQL Server.