Avvisi di SQL Server Agent ed errori di gravità

Sep 29 2020

Ho impostato avvisi in SQL Agent per errori di livello di gravità 15-16 per i test e ho scoperto che questi non vengono sempre attivati
Per essere più precisi, questi sembrano attivarsi solo quando il numero di errore specificato è is_event_logged = 1presentesys.messages

Ciò significa che quando vengono eseguiti i seguenti comandi:

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

Questi errori (102, 8134) hanno is_event_logged = 0e non vengono scritti nel registro dell'applicazione -> gli avvisi per gli errori di gravità di livello 15-16 non vengono attivati

Quando provo a generare un errore di gravità 15 o 16, che ha is_event_logged = 1, gli avvisi vengono attivati ​​correttamente

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

Lo stesso vale per gli errori di gravità 17-25, solo quelli che hanno is_event_logged = 1, possono attivare un avviso

Domande:

  1. Non sembra il livello di gravità dell'errore, ma in realtà la is_event_loggedcolonna controlla se l'errore può attivare o meno un avviso che cerca errori a livello di gravità? È questo comportamento previsto in SQL Server?

  2. Se devo creare un messaggio di errore personalizzato come avviso per un'applicazione, utilizzando la sp_addmessageprocedura e successivamente impostare un avviso per questo messaggio di errore, il parametro @severity non ha molta importanza, devo usare il parametro @with_log?

  3. C'è un modo per fare TUTTI gli errori di determinati livelli di gravità (15,16,17-25) per attivare un avviso, indipendentemente dal fatto che is_event_logged sia uguale a 1 o 0? Ho paura di perdere qualcosa di importante, perché ci sono molti errori di gravità 17-25 che non vengono registrati su app.log -> non si attiva un'e-mail di avviso?

Risposte

1 AMtwo Sep 29 2020 at 18:12

Sì, funziona come previsto.

Guardando i documenti :

SQL Server Agent legge il registro dell'applicazione e confronta gli eventi scritti in tale registro con gli avvisi definiti dall'utente.

Il meccanismo utilizzato per gli avvisi di SQL Agent è leggere il registro. Pertanto, se non è registrato, non viene visualizzato alcun avviso.

Puoi invece utilizzare gli eventi estesi per acquisire gli errori, anche se non sono registrati. È quindi possibile scrivere il proprio processo per leggere il file degli eventi estesi e inviare avvisi se necessario.