SQL Server 에이전트 경고 및 심각도 오류

Sep 29 2020

SQL 에이전트에서 테스트를 위해 심각도 수준 15-16의 오류에 대한 경고를 설정했으며 이러한 오류가 항상 트리거되는 것은 아니라는 것을 알았습니다.
더 정확하게 말하자면, 주어진 오류 번호가 다음과 같은 경우에만 트리거되는 것 같습니다 is_event_logged = 1.sys.messages

이는 아래 명령이 실행될 때를 의미합니다.

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

이러한 오류 (102, 8134)에는 is_event_logged = 0애플리케이션 로그가 있거나 기록되지 않습니다.-> 심각도 오류 수준 15-16에 대한 경고가 실행되지 않습니다.

is_event_logged = 1 인 오류 심각도 15 또는 16을 생성하려고하면 경고가 정상적으로 실행됩니다.

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

심각도 17-25 오류와 동일하며 오류가있는 오류 만 is_event_logged = 1경고를 발생시킬 수 있습니다.

질문 :

  1. 오류의 심각도 수준은 아니지만 실제로 is_event_logged열은 오류가 심각도 수준 오류를 찾는 경고를 트리거 할 수 있는지 여부를 제어합니다. SQL Server에서 의도 된 동작입니까?

  2. sp_addmessage절차를 사용하여 응용 프로그램에 대한 경고로 사용자 지정 오류 메시지를 만들고 나중에이 오류 메시지에 대한 경고를 설정해야하는 경우 @severity 매개 변수는 실제로 중요하지 않습니다. @with_log 매개 변수를 사용해야합니까?

  3. is_event_logged가 1 또는 0과 같더라도 경고를 발생시키기 위해 주어진 심각도 수준 (15,16,17-25)의 모든 오류를 만들 수있는 방법이 있습니까? app.log에 기록되지 않은 17-25 개의 심각도 오류가 많기 때문에 중요한 것을 놓치는 것이 두렵습니다.-> 경고 이메일을 실행하지 않습니까?

답변

1 AMtwo Sep 29 2020 at 18:12

예, 이것은 설계된대로 작동합니다.

보면 워드 프로세서 :

SQL Server 에이전트는 응용 프로그램 로그를 읽고 여기에 기록 된 이벤트를 사용자가 정의한 경고와 비교합니다.

SQL 에이전트 경고에 사용되는 메커니즘은 로그를 읽는 것입니다. 따라서 기록되지 않으면 경고가 없습니다.

대신 확장 이벤트 를 사용 하여 기록되지 않은 오류를 캡처 할 수 있습니다 . 그런 다음 자체 프로세스를 작성하여 확장 이벤트 파일을 읽고 필요에 따라 경고를 보낼 수 있습니다.