¿Cómo se pueden capturar eventos de errores en la instancia de RDS para SQL Server y recibir notificaciones al respecto?
Deseo generar y capturar eventos de errores en la instancia de base de datos de Amazon Relational Database Service (Amazon RDS) para SQL Server. También deseo recibir una notificación cada vez que se produzca un evento de error. ¿Cómo se puede hacer esto?
Descripción breve
SQL Server utiliza la gestión de errores para resolver los errores de existencia de objetos y los errores en tiempo de ejecución en un código T-SQL. Para gestionar este tipo de errores, utilice el método TRY y CATCH. Posteriormente, utilice el comando RAISERROR para generar errores de cliente y lanzar excepciones.
Resolución
Utilice el método TRY y CATCH
1. Utilice una instrucción TRY y CATCH para definir un bloque de código a fin de realizar pruebas de errores. Cualquier código que se incluya entre BEGIN TRY y END TRY se supervisa en busca de errores en el momento de la ejecución. Cada vez que se produce un error en el bloque, se transfiere a la sesión CATCH. Así, en función del código del bloque CATCH, se realiza la acción. Según el problema, es posible solucionar el error, informar al respecto o registrarlo en los registros de errores de SQL Server.
BEGIN TRY --code to try END TRY BEGIN CATCH --code to run if an error occurs --is generated in try END CATCH
2. Cree un mensaje personalizado que genere un error de SQL Server cuando se produzca. Para ello, agregue RAISERROR a los procedimientos del almacén o a un servidor SQL que desee supervisar.
RAISERROR ( { msg_id | msg_str | @local_variable } { , severity, state } [ , argument [ , ...n ] ] ) [ WITH option [ , ...n ] ]
Ejemplos del método TRY CATCH y RAISERROR Al capturar errores mediante el método TRY CATCH, cree un mensaje personalizado y, a continuación, genere el error en los registros de errores de SQL Server. Consulte este ejemplo:
BEGIN TRY SELECT 1/0 END TRY BEGIN CATCH DECLARE @Var VARCHAR(100) SELECT ERROR_MESSAGE() SELECT @Var = ERROR_MESSAGE() RAISERROR(@Var, 16,1) WITH LOG END CATCH
Este es un ejemplo de un error generado en los registros de SQL Server:
Error: 50000, Severity: 16, State: 1. Divide by zero error encountered.
Supervise los registros de errores de SQL Server y envíe notificaciones
Para supervisar el trabajo del agente de SQL Server, agregue un script al paso para supervisar y generar el error en los registros de errores de SQL Server. Posteriormente, podrá utilizar estos registros para enviar notificaciones.
1. Edite el trabajo de SQL Server y agregue el paso. Elija T-SQL como tipo. Ingrese un nombre de base de datos y, a continuación, agregue este T-SQL en la sección de comandos:
DECLARE @name NVARCHAR(128) select @name = name from msdb.dbo.sysjobs where job_id = $(ESCAPE_SQUOTE(JOBID)); -- Temporary table to store the data of the datafile with low free storage DECLARE @jb TABLE ([step_id] int, [step_name] NVARCHAR(128), [message] NVARCHAR(4000), [run_status] int); insert into @jb select hist.step_id, hist.step_name, hist.message, hist.run_status from msdb.dbo.sysjobhistory hist inner join (select a.job_id , convert(varchar(50),max(a.run_requested_date),112) as run_date , replace(convert(varchar(50),max(a.run_requested_date),108), ':', '') as run_time from msdb.dbo.sysjobs j inner join msdb.dbo.sysjobactivity a on j.job_id = a.job_id where j.name = @name and a.run_requested_date is not null group by a.job_id) ja on hist.job_id = ja.job_id and hist.run_date = ja.run_date and hist.run_time >= ja.run_time order by hist.step_id declare @error int select @error = count(run_status) from @jb where run_status != 0 if @error > 0 RAISERROR('Automatic message from RDS for SQL Server Agent. Job test2 successful', 18,1) WITH LOG --\will raise the error when job successful else RAISERROR('Automatic message from RDS for SQL Server Agent. Job test2 failed', 16,1) WITH LOG --\will raise the error when job failed
2. Configure el trabajo de SQL Server de modo que vaya al paso que se creó para la sección Acción en caso de fallo.
3. Ejecute este procedimiento para confirmar que el trabajo de SQL Server se ejecutó correctamente y actualizó los detalles sobre el trabajo fallido en los registros de errores de SQL Server. Para obtener más información, consulte Ver registros de errores y agentes.
EXEC rdsadmin.dbo.rds_read_error_log @index = 0, @type = 1;
Ejemplo en los registros de errores:
Msg 50000, Level 18, State 1, Line 33 Automatic message from RDS for SQL Server Agent. Job test2 failed Msg 50000, Level 18, State 1, Line 29 Automatic message from RDS for SQL Server Agent. Job test2 successful
3. Para configurar las notificaciones, publique los registros de SQL Server en Amazon CloudWatch. Modifique SQL Server mediante la consola de Amazon RDS. Elija los registros que desea publicar en los registros de CloudWatch desde la sección de exportaciones de registros. Después de publicar los registros de SQL Server en Amazon CloudWatch, podrá crear filtros de métricas que permitan realizar búsquedas en los registros. Los filtros de métricas definen los términos y patrones que Amazon CloudWatch busca en los datos de registro. A continuación, los filtros de métricas convierten estos datos de registro en métricas numéricas de CloudWatch sobre las que se pueden establecer alarmas.
Para obtener más información, consulte ¿Cómo se pueden recibir notificaciones de SNS sobre eventos de registro de errores y agentes de Amazon RDS para SQL Server que coincidan con un patrón de filtro de CloudWatch?
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años