이벤트 알림

적용 대상:SQL Server

이벤트 알림은 이벤트에 대한 정보를 Service Broker 서비스로 보냅니다. 이벤트 알림은 이러한 이벤트에 대한 정보를 Service Broker 서비스에 전송하여 다양한 Transact-SQL DDL(데이터 정의 언어) 문 및 SQL 추적 이벤트에 대한 응답으로 실행됩니다.

이벤트 알림을 사용하여 다음을 수행할 수 있습니다.

  • 데이터베이스에서 발생하는 변경 내용 또는 활동을 기록하고 검토합니다.

  • 동기 방식이 아닌 비동기 방식으로 이벤트에 응답하여 동작 수행

이벤트 알림은 DDL 트리거 및 SQL 추적에 대한 프로그래밍 대안을 제공할 수 있습니다.

이벤트 알림 혜택

이벤트 알림은 트랜잭션 범위 밖에서 비동기적으로 실행됩니다. 따라서 DDL 트리거와 달리, 즉시 트랜잭션에서 정의한 리소스를 사용하지 않고도 이벤트 알림을 데이터베이스 애플리케이션 내에서 사용하여 이벤트에 응답할 수 있습니다.

SQL 추적과 달리 이벤트 알림을 사용하여 SQL Trace 이벤트에 대한 응답으로 SQL Server 인스턴스 내에서 작업을 수행할 수 있습니다.

SQL Server와 함께 실행되는 애플리케이션에서 이벤트 데이터를 사용하여 진행 상황을 추적하고 결정을 내릴 수 있습니다. 예를 들어 다음 이벤트 알림은 ALTER TABLE 예제 데이터베이스에서 AdventureWorks2022 문이 실행될 때마다 특정 서비스에 알림을 보냅니다.

USE AdventureWorks2022;  
GO  
CREATE EVENT NOTIFICATION NotifyALTER_T1  
ON DATABASE  
FOR ALTER_TABLE  
TO SERVICE '//Adventure-Works.com/ArchiveService' ,  
    '8140a771-3c4b-4479-8ac0-81008ab17984';  

이벤트 알림 개념

이벤트 알림을 만들면 SQL Server 인스턴스와 지정한 대상 서비스 간에 하나 이상의 Service Broker 대화가 열립니다. 대화는 일반적으로 이벤트 알림이 서버 인스턴스의 개체로 존재하는 한 열린 상태로 유지됩니다. 몇몇 오류가 발생하는 경우에는 이벤트 알림을 삭제하기 전에 대화가 종료될 수 있습니다. 이러한 대화는 이벤트 알림 간에 공유되지 않습니다. 각 이벤트 알림에는 자체적인 배타 대화가 있습니다. 대화를 종료하면 대상 서비스가 더 많은 메시지를 수신할 수 없으며 다음에 이벤트 알림이 발생할 때 대화가 다시 열리지 않습니다.

이벤트 정보는 이벤트가 발생하는 시기, 영향을 받는 데이터베이스 개체, 관련된 Transact-SQL 일괄 처리 문 및 기타 정보에 대한 정보를 제공하는 형식 xml 의 변수로 Service Broker 서비스에 전달됩니다. 이벤트 알림에 의해 생성된 XML 스키마에 대한 자세한 내용은 EVENTDATA(Transact-SQL)를 참조하세요.

이벤트 알림 및 트리거

다음 표에서는 트리거 및 이벤트 알림을 비교하고 대조합니다.

트리거 이벤트 알림
DML 트리거는 DML(데이터 조작 언어) 이벤트에 응답합니다. DDL 트리거는 DDL(데이터 정의 언어) 이벤트에 응답합니다. 이벤트 알림은 DDL 이벤트 및 SQL 추적 이벤트의 하위 집합에 응답합니다.
트리거는 Transact-SQL 또는 CLR(공용 언어 런타임) 관리 코드를 실행할 수 있습니다. 이벤트 알림은 코드를 실행하지 않습니다. 대신 Service Broker 서비스에 xml 메시지를 보냅니다.
트리거는 트리거를 발생시키는 트랜잭션 범위 내에서 동기적으로 처리됩니다. 이벤트 알림은 비동기적으로 처리될 수 있으며 실행되도록 하는 트랜잭션 범위에서 실행되지 않습니다.
트리거의 소비자는 트리거를 발생시키는 이벤트와 긴밀하게 결합됩니다. 이벤트 알림의 소비자는 이벤트를 발생시키는 이벤트에서 분리됩니다.
트리거는 로컬 서버에서 처리해야 합니다. 이벤트 알림은 원격 서버에서 처리할 수 있습니다.
트리거는 롤백할 수 있습니다. 이벤트 알림은 롤백할 수 없습니다.
DML 트리거 이름은 스키마 범위입니다. DDL 트리거 이름은 데이터베이스 범위이거나 서버 범위입니다. 이벤트 알림 이름은 서버 또는 데이터베이스 범위입니다. QUEUE_ACTIVATION 이벤트에 대한 이벤트 알림은 특정 큐로 범위가 지정됩니다.
DML 트리거는 적용되는 테이블과 동일한 소유자가 소유합니다. 큐의 이벤트 알림 소유자는 적용되는 개체와 다른 소유자를 가질 수 있습니다.
트리거는 EXECUTE AS 절을 지원합니다. 이벤트 알림은 EXECUTE AS 절을 지원하지 않습니다.
DDL 트리거 이벤트 정보는 XML 데이터 형식을 반환하는 EVENTDATA 함수를 사용하여 캡처할 수 있습니다. 이벤트 알림은 Service Broker 서비스에 xml 이벤트 정보를 보냅니다. 정보는 EVENTDATA 함수의 스키마와 동일한 스키마로 형식이 지정됩니다.
트리거에 대한 메타데이터는 sys.triggerssys.server_triggers 카탈로그 뷰에서 찾을 수 있습니다. 이벤트 알림에 대한 메타데이터는 sys.event_notifications 및 sys.server_event_notifications 카탈로그 뷰에 있습니다.

이벤트 알림과 SQL 추적 비교

다음 표에서는 서버 이벤트를 모니터링하기 위해 이벤트 알림 및 SQL 추적을 사용하여 비교하고 대조합니다.

SQL 추적 이벤트 알림
SQL 추적은 트랜잭션과 관련된 성능 오버헤드를 생성하지 않습니다. 데이터 패키징이 효율적입니다. XML 형식의 이벤트 데이터를 만들고 이벤트 알림을 보내는 것과 관련된 성능 오버헤드가 있습니다.
SQL Trace는 모든 추적 이벤트 클래스를 모니터링할 수 있습니다. 이벤트 알림은 추적 이벤트 클래스의 하위 집합과 모든 DDL(데이터 정의 언어) 이벤트를 모니터링할 수 있습니다.
추적 이벤트에서 생성할 데이터 열을 사용자 지정할 수 있습니다. 이벤트 알림에서 반환된 XML 형식 이벤트 데이터의 스키마가 수정되었습니다.
DDL 문이 롤백되는지 여부에 관계없이 DDL에서 생성된 추적 이벤트는 항상 생성됩니다. 해당 DDL 문의 이벤트가 롤백되면 이벤트 알림이 실행되지 않습니다.
추적 파일 또는 추적 테이블 채우기 및 관리 작업을 통해 추적 이벤트 데이터의 중간 흐름을 관리합니다. 이벤트 알림 데이터의 중간 관리는 Service Broker 큐를 통해 자동으로 수행됩니다.
서버를 다시 시작할 때마다 추적을 다시 시작해야 합니다. 등록되면 이벤트 알림은 서버 주기에 걸쳐 유지되며 트랜잭션됩니다.
시작된 후 추적의 발생을 제어할 수 없습니다. 중지 시간 및 필터 시간을 사용하여 시작할 시기를 지정할 수 있습니다. 해당 추적 파일을 폴링하여 추적에 액세스합니다. 이벤트 알림은 이벤트 알림에 의해 생성된 메시지를 수신하는 큐에 대해 WAITFOR 문을 사용하여 제어할 수 있습니다. 큐를 폴링하여 이벤트 알림에 액세스할 수 있습니다.
추적을 만드는 데 필요한 최소 사용 권한은 ALTER TRACE입니다. 해당 컴퓨터에 추적 파일을 만드는 데도 사용 권한이 필요합니다. 최소 권한은 생성되는 이벤트 알림의 유형에 따라 달라집니다. 해당 큐에 대한 RECEIVE 권한도 필요합니다.
추적은 원격으로 수신할 수 있습니다. 원격으로 이벤트 알림을 받을 수 있습니다.
추적 이벤트는 시스템 저장 프로시저를 사용하여 구현됩니다. 이벤트 알림은 데이터베이스 엔진 및 Service Broker Transact-SQL 문의 조합을 사용하여 구현됩니다.
추적 이벤트 데이터는 해당 추적 테이블을 쿼리하거나, 추적 파일을 구문 분석하거나, SMO(SQL Server Management Objects) TraceReader 클래스를 사용하여 프로그래밍 방식으로 액세스할 수 있습니다. XML 형식 이벤트 데이터에 대한 XQuery 실행이나 SMO Event 클래스 사용을 통해 이벤트 데이터에 프로그래밍 방식으로 액세스할 수 있습니다.

이벤트 알림 태스크

작업 토픽
이벤트 알림을 만들고 구현하는 방법에 대해 설명합니다. 이벤트 알림 구현
원격 서버의 Service Broker에 메시지를 보내는 이벤트 알림에 대해 Service Broker 대화 상자 보안을 구성하는 방법을 설명합니다. 이벤트 알림에 대한 대화 보안 구성
이벤트 알림에 대한 정보를 반환하는 방법을 설명합니다. 이벤트 알림에 대한 정보 가져오기

참고 항목

DDL 트리거
DML 트리거
SQL 추적