SQL Server-Agent-Warnungen und Schweregradfehler

Sep 29 2020

Ich Setup - Benachrichtigungen in SQL - Agenten habe für Fehler des Schweregrades von 15 bis 16 zum Testen, und fand heraus , dass diese nicht immer dann ausgelöst ,
um genauer zu sein, scheinen diese Trigger nur , wenn gegebene Fehlernummer hat is_event_logged = 1insys.messages

Dies bedeutet, wenn die folgenden Befehle ausgeführt werden:

create table  -- Msg 102,  Level 15, State 1  -- Incorrect syntax near 'table'
select 1/0    -- Msg 8134, Level 16, State 1  -- Divide by zero error encountered

Diese Fehler (102, 8134) haben is_event_logged = 0und werden nicht in das Anwendungsprotokoll geschrieben -> Warnungen für Schweregradfehler der Stufen 15-16 werden nicht ausgelöst

Wenn ich versuche, den Schweregrad 15 oder 16 zu generieren, der is_event_logged = 1 hat, wird ein Alarm ausgelöst

raiserror(18054,16,1)
raiserror(15716,15,1)

Gleiches gilt für Fehler mit einem Schweregrad von 17 bis 25, bei denen nur solche is_event_logged = 1einen Alarm auslösen können

Fragen:

  1. Es scheint kein Schweregrad des Fehlers zu sein, aber tatsächlich is_event_loggedsteuert die Spalte, ob ein Fehler eine Warnung auslösen kann, die nach Schweregradfehlern sucht. Ist dies beabsichtigtes Verhalten in SQL Server?

  2. Wenn ich mithilfe der sp_addmessageProzedur eine benutzerdefinierte Fehlermeldung als Warnung für eine Anwendung erstellen und später eine Warnung für diese Fehlermeldung einrichten muss, spielt der Parameter @severity keine Rolle. Ich muss den Parameter @with_log verwenden.

  3. Gibt es eine Möglichkeit, ALLE Fehler mit bestimmten Schweregraden (15,16,17-25) zum Auslösen einer Warnung zu machen, unabhängig davon, ob is_event_logged gleich 1 oder 0 ist? Ich habe Angst, etwas Wichtiges zu verpassen, da es viele 17-25 Schweregradfehler gibt, die nicht in app.log protokolliert sind -> keine Alarm-E-Mail auslösen?

Antworten

1 AMtwo Sep 29 2020 at 18:12

Ja, das funktioniert wie geplant.

Betrachten Sie die Dokumente :

Der SQL Server-Agent liest das Anwendungsprotokoll und vergleicht die dort geschriebenen Ereignisse mit den von Ihnen definierten Warnungen.

Der Mechanismus, der für die SQL Agent-Warnung verwendet wird, besteht darin, das Protokoll zu lesen. Wenn es also nicht protokolliert ist, gibt es keine Warnung.

Stattdessen können Sie erweiterte Ereignisse verwenden , um Fehler zu erfassen, auch wenn sie nicht protokolliert werden. Sie können dann Ihren eigenen Prozess schreiben, um die erweiterte Ereignisdatei zu lesen und bei Bedarf Warnungen zu senden.