sql >> Base de Datos >  >> RDS >> Sqlserver

Uso de alertas y operadores en SQL Server

Introducción

Con todos los avances en SQL Server y los datos, es fantástico que todavía estén disponibles herramientas SQL nativas como Alertas y Operadores. Son las características clave del Agente SQL Server que están relacionadas con cualquier cosa en la automatización de SQL Server.

Sus funciones son claras:

  • Las alertas, cuando están configuradas, les permiten a los administradores de bases de datos saber cuándo ocurrió un evento específico.
  • Un operador es un objeto definido dentro de SQL Server que asigna a cualquier persona o grupo que puede recibir notificaciones cuando ocurren estos eventos.

Tipos de eventos

SQL Server registra eventos en el registro de aplicaciones de Windows; podemos acceder a él a través del Visor de eventos de Windows en el nivel del sistema operativo. El Agente SQL Server puede leer el registro de la aplicación y disparar alertas cuando hay una coincidencia entre 2 categorías de cosas:1) eventos registrados en el registro de la aplicación 2) una alerta definida por un administrador.

Hay tres tipos principales de eventos:

  • Eventos de SQL Server
  • Condiciones de rendimiento de SQL Server
  • eventos WMI

Creación de un evento de SQL Server

Comenzamos a crear una alerta del Agente SQL Server haciendo clic con el botón derecho en el nodo Alertas en el explorador de objetos en Agente SQL Server. Esto abre la ventana que se muestra en la Fig. 2, donde especifica el nombre de la alerta, su tipo (Alerta de evento de SQL Server en este caso), el alcance de la base de datos y las condiciones de la alerta.

La forma más sencilla de especificar una condición es utilizar el nivel de gravedad. Y para obtener una lista completa de mensajes de error en SQL Server, debe consultar sys.messages. Tenga en cuenta que esta vista contiene 309408 filas, por lo que usar un filtro es una gran idea; es por eso que en mi consulta, filtré por inglés a través del comando.


Fig. 1. Nodo de alertas

-- Listado 1:Mensajes de error de SQL Serveruse msdbgoSELECT * FROM sys.messages where language_id=1033ordenar por gravedad;

Fig. 2. Creación de una alerta de evento de SQL Server

Tenga en cuenta que también podría usar un mensaje de error específico para activar una alerta. Como se mencionó anteriormente, todos los mensajes de error se enumeran en la vista de catálogo de SQL Server sys.messages. En la pantalla de la Fig. 2, simplemente seleccioné las condiciones del evento:la página de respuesta me permitió elegir qué sucede si se captura este evento. Como puede ver, puedo optar por automatizar mi respuesta mediante la ejecución de un trabajo o simplemente notificar a los operadores. Exploraremos la ejecución de un trabajo más adelante pero, por ahora, observemos por qué se requiere un Operador para continuar con la opción alternativa. Crearemos un operador en la misma ventana, pero si tuviéramos operadores existentes, simplemente podríamos haberlos seleccionado de la lista.

Fig. 3. Seleccionar una respuesta

Fig. 4. Definición de un operador

Fig. 5. Selección del canal de alerta

En la figura 5, elegimos el correo electrónico como medio para enviar notificaciones. Debe configurar el correo de la base de datos correctamente, de lo contrario, las alertas generadas permanecerán en la cola. En la tercera página de la ventana Nueva alerta, podemos elegir si el mensaje de error se incluye en la notificación por correo electrónico y si queremos enviar un mensaje adicional (por ejemplo, las instrucciones a un DBA junior sobre acciones adicionales). También determinamos el intervalo entre alertas disparadas. Es importante porque si lo dejas en el valor predeterminado (0), el buzón del operador se llenará de alertas en un corto período de tiempo.


Fig.6. Opciones de configuración

-- Listado 2:Creación de una alerta de SQL Server mediante 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', @1GO 

El Listado 2 muestra el código equivalente para implementar esta alerta. Una vez que completemos el proceso haciendo clic en Aceptar, podremos ver tanto la alerta como el operador en el nodo del Agente SQL Server en el Explorador de objetos.

Fig. 7. Alerta creada

Creación de una alerta de condición de rendimiento de SQL Server

También podemos tomar la ruta alternativa y crear una alerta de condición de desempeño. Como ejemplo, elegimos Bases de datos> Contador de porcentaje de registro utilizado. Le decimos a SQL Server que genere un evento cuando el uso del archivo de registro supere el 75 %. En este caso, elegimos 'ejecutar un trabajo' como respuesta. El Listado 3 muestra las principales tareas realizadas por este trabajo y el Listado 4 muestra la definición completa del trabajo.

Fig. 8. Alerta de condición de rendimiento

-- Listado 3:Mensajes de error de SQL Server BACKUP 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-- Listado 4:Definición completa del trabajo de copia de seguridad del Agente SQLUSE [msdb]GO/****** Objeto :Trabajo [DB1_BackupTransactionLog] Fecha de secuencia de comandos:27/11/2019 7:20:22 p. m. ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode =0/****** Objeto:JobCategory [[Sin categoría )]] Fecha de la secuencia de comandos:27/11/2019 7:20:23 p. =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'Copia de seguridad del registro de transacciones para DB1 cuando el uso del registro de transacciones supera el 75 %',@category_name=N' [Sin categorizar (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 /****** Objeto:Paso [Backup_Transaction_Log] Fecha de la secuencia de comandos:27/11/2019 7:20:23 p. m. ******/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'-- Listado 3:Mensajes de error de SQL ServerBACKUP LOG [DB1] TO DISK =N''E:\MSSQL\Backup\DBTransactionLog.bak''WITH RETAINDAYS =90, NOFORMAT, NOINIT, NOMBRE =N''DB1-TransactionLog Backup'',SKIP, NOREWIN D, NOUNLOAD, STATS =10GO',@database_name=N'master',@flags=0IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback/****** Objeto:Paso [DB1_Shrink_Transaction_Log_File] Fecha del script:27/11/2019 7:20:23 p. m. ******/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 O @ReturnCode <> 0) IR A QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_update_job @job_id =@jobId, @start_step_id =1IF (@@ERROR <> 0 O @ReturnCode <> 0) IR A QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_add_jobserver @job_id =@jobId, @nombre_servidor =N'(local)'IF (@@ERROR <> 0 O @ReturnCode <> 0) GOTO QuitWithRollbackCOMMIT TRANSACTIONGOTO EndSaveQui tWithRollback:IF (@@TRANCOUNT> 0) ROLLBACK TRANSACTIONEndSave:GO

Fig. 9. Crear Trabajo para el Ejecutado

Dado que nuestra respuesta, en este caso, es la ejecución del trabajo, también incluimos una notificación en el propio trabajo. Una vez que hayamos terminado con la creación del trabajo, podemos revisar las propiedades de la alerta en el Explorador de objetos. Podemos comprobar en la página de historial cuántas veces ha ocurrido el evento.

Fig. 10. Opciones de alerta

Fig. 11. Página de historial de alertas

Conclusión

En este artículo, hemos explorado la creación de alertas y operadores. Puede aprovechar esta poderosa capacidad en SQL Server y configurar su entorno para monitorear eventos básicos sin comprar una herramienta de terceros. La posibilidad de utilizar trabajos para corregir problemas menores nos ayuda a lograr una gestión proactiva de nuestro entorno SQL Server.