Sql server: registro de errores y notificación dentro de un procedimiento almacenado

función-SQL

A medida que el número de procedimientos almacenados en una base de datos aumenta, la carga de la gestión de esos procedimientos almacenados aumenta, también. En una base de datos de producción, miles de procedimientos se ejecutan todos los días, por lo que es necesario saber por qué un procedimiento almacenado ha fallado en un momento determinado. Esto se puede hacer mediante la aplicación de registro de errores y notificación dentro de cada procedimiento almacenado.

Una vez que la cuestión se ha planteado en una base de datos de producción, lo que necesita para resolverlo inmediatamente para detener la pérdida de un negocio. Para supervisar y resolver errores de procedimientos almacenados, primero tienes que entrar si se produce algún error y luego monitorear y realizar informes de errores.

Vamos a crear un procedimiento simple para el cálculo de la división.

CREAR PROCEDIMIENTO dbo.MathCalculation (@Dividend INT, INT Divisor @) ASBEGINSET NOCOUNT ON-COMIENZO TRYSELECT @ Dividendo / Divisor @ como cociente-FIN TRYBEGIN CATCHPRINT ERROR_MESSAGE () - FIN CATCHSET NOCOUNT OFF-ENDGO

He creado un procedimiento almacenado simple de dividir dos números y obtener su cociente. Veamos cómo funciona cuando realizamos dividir por 0 operación.

EXEC dbo.MathCalculation 100, 2 - 50 funciona perfectamente dando como quotientEXEC dbo.MathCalculation 100, 0 - Divida por error cero encontró

el informe de errores del servidor SQL en procedimientos almacenados dividir por cero excepción

El cálculo anterior falla y muestra un mensaje de error en una ventana de mensaje de error Ocurrió un error de división por cero.

Ahora usted está viendo errores en pantalla, pero en un entorno de producción, no obtiene esa flexibilidad. Por lo tanto, tenemos que aplicar el registro de errores.

Vamos a crear una tabla para registrar todos los errores de procedimiento almacenado.

CREATE TABLE [dbo]. [LearningErrorLog] ([ErrorID] [bigint] IDENTIDAD (1,1) clave principal no NULL, [ErrorNumber] [nvarchar] (50) NOT NULL, [ErrorDescription] [nvarchar] (4000) NULL, [ErrorProcedure] [nvarchar] (100) NULL, [ErrorState] [int] NULL, [ErrorSeverity] [int] NULL, [ErrorLine] [int] NULL, [ErrorTime] [fecha y hora] NULL) -

Vamos a crear un procedimiento almacenado para registrar los errores.

CREAR PROCEDIMIENTO [dbo]. [Learning_Insert_StoredProcedure_ErrorLog] ASBEGINSET NOCOUNT OnInsert EN [LearningErrorLog](ErrorNumber,ErrorDescription,ErrorProcedure,ErrorState,ErrorSeverity,ErrorLine,ErrorTime)VALUES(ERROR_NUMBER(),ERROR_MESSAGE(),ERROR_PROCEDURE(),ERROR_STATE(),ERROR_SEVERITY(),ERROR_LINE(),GETDATE())-SET NOCOUNT OFENDER

He llamado a funciones de informe de errores integradas en el procedimiento anterior almacenado.

ERROR_NUMBER () - devuelve el número de error del error que causó el bloque CATCH de una construcción TRY ... CATCH que se ejecute

MENSAJE DE ERROR() - devuelve el texto del mensaje de error que provocó el bloque CATCH de una construcción TRY ... CATCH que se ejecute

ERROR_PROCEDURE () - Devuelve el nombre del procedimiento almacenado o desencadenador donde se ha producido un error que hizo que el bloque CATCH de una construcción TRY ... CATCH que se ejecute

ERROR_STATE () - devuelve el número de estado del error que causó el bloque CATCH de una construcción TRY ... CATCH que se ejecute

ERROR_SEVERITY () - devuelve la gravedad del error que causó el bloque CATCH de una construcción TRY ... CATCH que se ejecute

OBTENER LA FECHA() - devuelve el momento del error que causó

Ahora, podemos consultar [LearningErrorLog] mesa para supervisar el error registrado.

Vamos a modificar nuestro MathCalculation procedimiento almacenado y llamada [Learning_Insert_StoredProcedure_ErrorLog] dentro del bloque de captura para realizar el registro de errores si se ha producido algún error en el procedimiento almacenado.

ALTER PROCEDURE dbo.MathCalculation (@Dividend INT, INT Divisor @) ASBEGINSET NOCOUNT ON-COMIENZO TRYSELECT @ Dividendo / Divisor @ como cociente-FIN TRYBEGIN CATCHEXEC [dbo]. [Learning_Insert_StoredProcedure_ErrorLog] --Para ingrese Procedimiento almacenado errorsEND CATCHSET NOCOUNT OFF-ENDGO

Ahora, de nuevo ejecutar escenario generación error.

EXEC dbo.MathCalculation 100, 0 - 0 se divide por escenario de error 

Consultar la tabla [LearningErrorLog]. Se puede ver la excepción de capturas de error de procedimiento almacenado se ha registrado en la tabla.

registro de errores de procedimiento tabla almacenada


» » Sql server: registro de errores y notificación dentro de un procedimiento almacenado