Alerty agenta programu SQL Server i błędy ważności
Mam konfiguracji powiadomień w SQL Agent dla błędów poziom dotkliwości 15-16 do testowania, i okazało się, że nie zawsze są wyzwalane
Aby być bardziej dokładny, to wydaje się tylko wtedy, gdy spust podano numer błędu is_event_logged = 1wsys.messages
Oznacza to, że gdy uruchamiane są poniższe polecenia:
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
Te błędy (102, 8134) mają is_event_logged = 0i nie są zapisywane w dzienniku aplikacji -> alerty dla błędów ważności poziomów 15-16 nie są uruchamiane
Kiedy próbuję wygenerować błąd o sile 15 lub 16, czyli is_event_logged = 1, alerty są uruchamiane poprawnie
raiserror(18054,16,1)
raiserror(15716,15,1)
To samo z błędami o wadze 17-25, tylko te, które mają is_event_logged = 1, mogą wywołać alert
Pytania:
Wydaje się, że nie poziom ważności błędu, ale w rzeczywistości
is_event_loggedkolumna kontroluje, czy błąd może wyzwolić alert, który szuka błędów poziomu ważności? Czy to zamierzone zachowanie w programie SQL Server?Jeśli muszę utworzyć niestandardowy komunikat o błędzie jako alert dla aplikacji, używając
sp_addmessageprocedury, a później skonfigurować alert dla tego komunikatu o błędzie, parametr @severity nie ma tak naprawdę znaczenia, muszę użyć parametru @with_log?Czy istnieje sposób na popełnienie WSZYSTKICH błędów o podanych poziomach ważności (15,16,17-25) w celu uruchomienia alertu, niezależnie od tego, czy is_event_logged wynosi 1 lub 0? Boję się przegapić coś ważnego, ponieważ istnieje wiele błędów wagi 17-25, które nie są rejestrowane w app.log -> nie wysyłaj e-maila z ostrzeżeniem?
Odpowiedzi
Tak, to działa zgodnie z projektem.
Patrząc na dokumenty :
SQL Server Agent czyta dziennik aplikacji i porównuje zapisane tam zdarzenia z alertami, które zdefiniowałeś.
Mechanizm używany do alertowania agenta SQL polega na odczytywaniu dziennika. Tak więc, jeśli nie jest zarejestrowany, nie ma alertu.
Zamiast tego można użyć zdarzeń rozszerzonych do przechwytywania błędów, nawet jeśli nie są one rejestrowane. Następnie możesz napisać własny proces odczytywania pliku Extended Events i wysyłania alertów w razie potrzeby.