SQL Server-Agent-Warnungen und Schweregradfehler
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:
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?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.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
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.