Sql server: journalisation des erreurs et des rapports au sein d`une procédure stockée

feature-sql

Comme le nombre de procédures stockées augmente dans une base de données, la charge de la gestion de ces procédures stockées augmente aussi. Sur une base de données de production, des milliers de procédures sont exécutées tous les jours, de sorte que vous devez savoir pourquoi une procédure stockée a échoué à un certain moment. Cela peut être fait en mettant en œuvre la journalisation des erreurs et des rapports au sein de chaque procédure stockée.

Une fois qu`une question a été soulevée sur une base de données de production, vous devez résoudre immédiatement pour arrêter la perte d`une entreprise. Pour surveiller et résoudre les erreurs de procédures stockées, vous devez d`abord vous connecter si une erreur se produit, puis surveiller et effectuer des rapports d`erreurs.

Laissez-nous créer une procédure simple pour le calcul de la division.

CREATE PROCEDURE dbo.MathCalculation (@Dividend INT, @ Diviseur INT) ASBEGINSET NOCOUNT ON-BEGIN TRYSELECT @ Dividende / @ Diviseur comme Quotient-END TRYBEGIN CATCHPRINT ERROR_MESSAGE () - FIN CATCHSET NOCOUNT OFF-ENDGO

J`ai créé une procédure stockée simple pour diviser deux nombres et obtenir leur quotient. Voyons comment cela fonctionne lorsque nous effectuons diviser par 0 opération.

EXEC dbo.MathCalculation 100, 2 - fonctionne parfaitement donnant 50 comme quotientEXEC dbo.MathCalculation 100, 0 - Diviser par zéro erreur rencontrée

sql rapports d`erreur du serveur dans les procédures stockées diviser par zéro exception

Le calcul ci-dessus échoue et affiche un message d`erreur dans une fenêtre de message d`erreur Diviser par zéro erreur rencontrée.

Maintenant, vous voyez des erreurs à l`écran, mais dans un environnement de production, vous ne recevez pas une telle flexibilité. Par conséquent, nous avons besoin de mettre en œuvre la journalisation des erreurs.

Laissez-nous créer une table pour enregistrer toutes les erreurs de procédure stockée.

CREATE TABLE [dbo]. [LearningErrorLog] ([ErrorID] [bigint] IDENTITÉ (1,1) PRIMARY KEY NOT NULL, [ErrorNumber] [nvarchar] (50) NOT NULL, [ErrorDescription] [nvarchar] (4000) NULL, [ErrorProcedure] [nvarchar] (100) NULL, [ErrorState] [int] NULL, [ErrorSeverity] [int] NULL, [ErrorLine] [int] NULL, NULL [ErrorTime] [datetime]) -

Laissez-nous créer une procédure stockée pour enregistrer les erreurs.

CREATE PROCEDURE [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 OFFENSER

Je l`ai appelé fonctions intégrées de rapports d`erreur dans la procédure ci-dessus stockée.

ERROR_NUMBER () - retourne le numéro d`erreur de l`erreur qui a causé le bloc CATCH d`une construction TRY ... CATCH pour être exécuté

MESSAGE D`ERREUR() - renvoie le texte du message de l`erreur qui a causé le bloc CATCH d`une construction TRY ... CATCH pour être exécuté

ERROR_PROCEDURE () - renvoie le nom de la procédure stockée ou le déclencheur où une erreur est survenue qui a causé le bloc CATCH d`une construction TRY ... CATCH pour être exécuté

ERROR_STATE () - renvoie le numéro d`état de l`erreur qui a causé le bloc CATCH d`une construction TRY ... CATCH pour être exécuté

ERROR_SEVERITY () - renvoie la gravité de l`erreur qui a causé le bloc CATCH d`une construction TRY ... CATCH pour être exécuté

GETDATE () - renvoie le temps de l`erreur qui a provoqué

Maintenant, nous pouvons interroger [LearningErrorLog] table pour surveiller l`erreur connecté.

Modifions notre MathCalculation procédure stockée et appel [Learning_Insert_StoredProcedure_ErrorLog] dans le bloc catch pour effectuer une journalisation d`erreur si une erreur est survenue dans la procédure stockée.

ALTER PROCEDURE dbo.MathCalculation (@Dividend INT, @ Diviseur INT) ASBEGINSET NOCOUNT ON-BEGIN TRYSELECT @ Dividende / @ Diviseur comme Quotient-END TRYBEGIN CATCHEXEC [dbo]. [Learning_Insert_StoredProcedure_ErrorLog] --Pour log procédure stockée errorsEND CATCHSET NOCOUNT OFF-ENDGO

Maintenant, encore une fois exécuter le scénario de génération d`erreur.

EXEC dbo.MathCalculation 100, 0 - diviser par scénario 0 d`erreur 

Interrogez la [LearningErrorLog] table. Vous pouvez voir les captures exception erreur de procédure stockée a été noté dans le tableau.

journal des erreurs de table de procédure stockée

» » Sql server: journalisation des erreurs et des rapports au sein d`une procédure stockée