이벤트 알림
적용 대상: SQL Server
이벤트 알림은 이벤트에 대한 정보를 Service Broker 서비스로 보냅니다. 이벤트 알림은 이러한 이벤트에 대한 정보를 Service Broker 서비스에 전송하여 다양한 Transact-SQL DDL(데이터 정의 언어) 문 및 SQL 추적 이벤트에 대한 응답으로 실행됩니다.
이벤트 알림을 사용하여 다음을 수행할 수 있습니다.
데이터베이스에서 발생하는 변경 내용 또는 활동을 기록하고 검토합니다.
동기 방식이 아닌 비동기 방식으로 이벤트에 응답하여 동작 수행
이벤트 알림은 DDL 트리거 및 SQL 추적에 대한 프로그래밍 대안을 제공할 수 있습니다.
이벤트 알림 혜택
이벤트 알림은 트랜잭션 범위 밖에서 비동기적으로 실행됩니다. 따라서 DDL 트리거와 달리, 즉시 트랜잭션에서 정의한 리소스를 사용하지 않고도 이벤트 알림을 데이터베이스 애플리케이션 내에서 사용하여 이벤트에 응답할 수 있습니다.
SQL 추적과 달리 이벤트 알림을 사용하여 SQL 추적 이벤트에 대한 응답으로 SQL Server의 instance 내에서 작업을 수행할 수 있습니다.
이벤트 데이터는 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 대화가 열립니다. 대화는 일반적으로 이벤트 알림이 서버 instance의 개체로 존재하는 한 열린 상태로 유지됩니다. 몇몇 오류가 발생하는 경우에는 이벤트 알림을 삭제하기 전에 대화가 종료될 수 있습니다. 이러한 대화는 이벤트 알림 간에 공유되지 않습니다. 각 이벤트 알림에는 자체적인 배타 대화가 있습니다. 대화를 종료하면 대상 서비스가 더 많은 메시지를 수신할 수 없으며 다음에 이벤트 알림이 발생할 때 대화가 다시 열리지 않습니다.
이벤트 정보는 이벤트 발생 시기, 영향을 받는 데이터베이스 개체, 관련된 Transact-SQL 일괄 처리 문 및 기타 정보를 제공하는 TYPE xml의 변수로 Service Broker 서비스에 전달됩니다. 이벤트 알림에 의해 생성된 XML 스키마에 대한 자세한 정보는 EVENTDATA(Transact-SQL)를 참조하세요.
이벤트 알림 및 트리거
다음 테이블에서는 트리거 및 이벤트 알림을 비교하고 대조합니다.
트리거 | 이벤트 알림 |
---|---|
DML 트리거는 DML(데이터 조작 언어) 이벤트에 응답합니다. DDL 트리거는 다양한 DDL(데이터 정의 언어) 이벤트에 응답합니다. | 이벤트 알림은 DDL 이벤트 및 SQL 추적 이벤트의 하위 집합에 응답합니다. |
트리거는 Transact-SQL 또는 CLR(공용 언어 런타임) 관리 코드를 실행할 수 있습니다. | 이벤트 알림은 Code를 실행하지 않습니다. 대신 Service Broker 서비스에 xml 메시지를 보냅니다. |
트리거는 트리거를 발생시키는 트랜잭션 범위 내에서 동기적으로 처리됩니다. | 이벤트 알림은 비동기적으로 처리될 수 있으며 실행되도록 하는 트랜잭션 범위에서 실행되지 않습니다. |
트리거의 소비자는 트리거를 발생시키는 이벤트와 긴밀하게 결합됩니다. | 이벤트 알림의 소비자는 이벤트를 발생시키는 이벤트에서 분리됩니다. |
트리거는 로컬 서버에서 처리해야 합니다. | 이벤트 알림은 원격 서버에서 처리할 수 있습니다. |
트리거는 롤백할 수 있습니다. | 이벤트 알림은 롤백할 수 없습니다. |
DML 트리거 이름은 스키마 범위입니다. DDL 트리거 이름은 데이터베이스 범위이거나 서버 범위입니다. | 이벤트 알림 이름은 서버 또는 데이터베이스 범위입니다. QUEUE_ACTIVATION 이벤트에 대한 이벤트 알림은 특정 큐로 범위가 지정됩니다. |
DML 트리거는 적용되는 테이블과 동일한 소유자가 소유합니다. | 큐의 이벤트 알림 소유자는 적용되는 개체와 다른 소유자를 가질 수 있습니다. |
트리거는 EXECUTE AS 절을 지원합니다. | 이벤트 알림은 EXECUTE AS 절을 지원하지 않습니다. |
DDL 트리거 이벤트 정보는 xml 데이터 형식을 반환하는 EVENTDATA 함수를 사용하여 캡처할 수 있습니다. | 이벤트 알림은 Service Broker 서비스에 xml 이벤트 정보를 보냅니다. 정보는 EVENTDATA 함수의 스키마와 동일한 스키마로 형식이 지정됩니다. |
트리거에 대한 메타데이터는 sys.triggers 및 sys.server_triggers 카탈로그 뷰에서 찾을 수 있습니다. | 이벤트 알림에 대한 메타데이터는 sys.event_notifications 및 sys.server_event_notifications 카탈로그 뷰에 있습니다. |
이벤트 알림 vs. SQL 추적
다음 테이블에서는 서버 이벤트를 모니터링하기 위해 이벤트 알림 및 SQL 추적을 사용하여 비교하고 대조합니다.
SQL 추적 | 이벤트 알림 |
---|---|
SQL 추적은 트랜잭션과 관련된 성능 오버헤드를 생성하지 않습니다. 데이터 패키징이 효율적입니다. | XML 형식의 이벤트 데이터를 만들고 이벤트 알림을 보내는 것과 관련된 성능 오버헤드가 있습니다. |
SQL 추적은 모든 추적 이벤트 클래스를 모니터링할 수 있습니다. | 이벤트 알림은 추적 이벤트 클래스의 하위 집합과 모든 DDL(데이터 정의 언어) 이벤트를 모니터링할 수 있습니다. |
추적 이벤트에서 생성할 데이터 열을 사용자 지정할 수 있습니다. | 이벤트 알림에서 반환된 XML 형식 이벤트 데이터의 스키마가 수정되었습니다. |
DDL 문이 롤백되는지 여부에 관계없이 DDL에서 생성된 추적 이벤트는 항상 생성됩니다. | 해당 DDL 문의 이벤트가 롤백되면 이벤트 알림이 실행되지 않습니다. |
추적 파일 또는 추적 테이블 채우기 및 관리 작업을 통해 추적 이벤트 데이터의 중간 흐름을 관리합니다. | 이벤트 알림 데이터의 중간 관리는 Service Broker 큐를 통해 자동으로 수행됩니다. |
서버를 다시 시작할 때마다 추적을 다시 시작해야 합니다. | 등록되면 이벤트 알림은 서버 주기에 걸쳐 지속되며 트랜잭션됩니다. |
시작된 후 추적의 발생을 제어할 수 없습니다. 중지 시간 및 필터 시간을 사용하여 시작할 시기를 지정할 수 있습니다. 해당 추적 파일을 폴링하여 추적에 액세스합니다. | 이벤트 알림은 이벤트 알림에 의해 생성된 메시지를 수신하는 큐에 대해 WAITFOR 문을 사용하여 제어할 수 있습니다. 큐를 폴링하여 이벤트 알림에 액세스할 수 있습니다. |
추적을 만드는 데 필요한 최소 사용 권한은 ALTER TRACE입니다. 해당 컴퓨터에 추적 파일을 만드는 데도 사용 권한이 필요합니다. | 최소 권한은 생성되는 이벤트 알림의 TYPE에 따라 달라집니다. 해당 큐에 대한 RECEIVE 권한도 필요합니다. |
추적은 원격으로 수신할 수 있습니다. | 원격으로 이벤트 알림을 받을 수 있습니다. |
추적 이벤트는 시스템 저장 프로시저를 사용하여 구현됩니다. | 이벤트 알림은 데이터베이스 엔진 Service Broker Transact-SQL 문의 조합을 사용하여 구현됩니다. |
추적 이벤트 데이터는 해당 추적 테이블을 쿼리하거나, 추적 파일을 구문 분석하거나, SMO(SQL Server 관리 개체) TraceReader 클래스를 사용하여 프로그래밍 방식으로 액세스할 수 있습니다. | XML 형식 이벤트 데이터에 대한 XQuery 실행이나 SMO Event 클래스 사용을 통해 이벤트 데이터에 프로그래밍 방식으로 액세스할 수 있습니다. |
이벤트 알림 태스크
Task | 항목 |
---|---|
이벤트 알림을 만들고 구현하는 방법에 대해 설명합니다. | 이벤트 알림 구현 |
원격 서버의 Service Broker에 메시지를 보내는 이벤트 알림에 대한 Service Broker 대화 보안을 구성하는 방법에 대해 설명합니다. | 이벤트 알림에 대한 대화 보안 구성 |
이벤트 알림에 대한 정보를 반환하는 방법을 설명합니다. | 이벤트 알림에 대한 정보 가져오기 |