다음을 통해 공유


이벤트 알림 디자인

이벤트 알림을 디자인하려면 다음 사항을 결정해야 합니다.

  • 알림의 범위

  • 이벤트 알림을 발생시키는 Transact-SQL 문 또는 문 그룹

[!참고]

로컬 또는 전역 임시 테이블 및 저장 프로시저에 영향을 주는 이벤트에 대해서는 이벤트 알림이 발생하지 않습니다.

알림 범위 정의

현재 데이터베이스의 모든 개체 또는 SQL Server 인스턴스의 모든 개체에서 실행되는 문에 대한 응답으로 이벤트 알림이 발생하도록 지정할 수 있습니다. QUEUE_ACTIVATION 및 BROKER_QUEUE_DISABLED 이벤트에 지정된 이벤트 알림의 범위는 개별 큐입니다. 두 범위 모두에서 발생할 수 없는 이벤트도 있습니다. 예를 들어 CREATE_DATABASE 이벤트는 서버 인스턴스 수준에서만 발생할 수 있습니다. 반면 ALTER_TABLE 이벤트에 대해 생성되는 이벤트 알림은 데이터베이스의 모든 테이블 또는 서버 인스턴스의 모든 테이블에서 발생하도록 프로그래밍할 수 있습니다.

다음 예에서는 서버 인스턴스에서 실행되는 ALTER TABLE 문의 알림을 현재 데이터베이스의 Service Broker 인스턴스로 전송합니다.

CREATE EVENT NOTIFICATION log_ddl1 
   ON SERVER 
   FOR ALTER_TABLE 
   TO SERVICE '//Adventure-Works.com/ArchiveService' , 'current database';

Transact-SQL 문에 대한 링크 및 Transact-SQL 문에 지정할 수 있는 범위는 뒤에 나오는 "이벤트 알림을 발생시킬 특정 DDL 문 선택" 섹션을 참조하십시오.

Transact-SQL 문 또는 문 그룹 지정

다음에 응답하여 발생하도록 이벤트 알림을 만들 수 있습니다.

  • 특정 DDL 문, SQL Trace 이벤트 또는 Service Broker 이벤트

  • 미리 정의된 DDL 문 그룹 또는 SQL Trace 이벤트 그룹

이벤트 알림을 발생시킬 특정 DDL 문 선택

특정 Transact-SQL 문이나 저장 프로시저가 실행된 후 이벤트 알림이 발생하도록 디자인할 수 있습니다. 앞의 예에서는 ALTER_TABLE 이벤트 후에 해당 이벤트 알림이 발생합니다.

이벤트 알림이 발생하도록 지정할 수 있는 개별 Transact-SQL 문 목록 및 알림 실행 범위는 DDL 이벤트를 참조하십시오. 이러한 이벤트는 sys.event_notification_event_types 카탈로그 뷰를 쿼리하여 얻을 수도 있습니다.

[!참고]

DDL과 같은 작업을 수행하는 특정 시스템 저장 프로시저에서 이벤트 알림이 발생할 수도 있습니다. 이벤트 알림을 테스트하여 실행된 시스템 저장 프로시저에 대한 응답을 확인합니다. 예를 들어 CREATE TYPE 문과 sp_addtype 저장 프로시저는 모두 CREATE_TYPE 이벤트에서 생성되는 이벤트 알림을 발생시킵니다.

이벤트 알림을 발생시킬 특정 SQL Trace 이벤트 선택

SQL Trace 이벤트가 발생한 후 이벤트 알림이 실행되도록 디자인할 수 있습니다. 예를 들어 다음 이벤트 알림은 서버에서 Object_Created 이벤트 후에 발생합니다.

CREATE EVENT NOTIFICATION log_ddl1 
   ON SERVER 
   FOR Object_Created 
   TO SERVICE '//Adventure-Works.com/ArchiveService', 'current database' ;

이벤트 알림을 발생시킬 수 있는 SQL Trace 이벤트 목록은 이벤트 알림용 추적 이벤트를 참조하십시오. 이러한 이벤트 목록은 sys.event_notification_event_types 카탈로그 뷰를 쿼리하여 얻을 수도 있습니다. SQL Trace 이벤트는 서버 인스턴스 범위에서만 실행될 수 있습니다. SQL Trace 이벤트 클래스에 대한 자세한 내용은 SQL Server 프로파일러 참조를 참조하십시오.

이벤트 알림을 발생시킬 Service Broker 이벤트 선택

이벤트 알림이 QUEUE_ACTIVATION 또는 BROKER_QUEUE_DISABLED Service Broker 이벤트 후에 발생하도록 디자인할 수 있습니다. QUEUE_ACTIVATION 이벤트는 큐에 처리할 메시지가 있을 때 발생합니다. 자세한 내용은 이벤트 기반 활성화을 참조하십시오. BROKER_QUEUE_DISABLED 이벤트는 큐 상태가 OFF로 설정될 때 발생합니다. 자세한 내용은 포이즌 메시지 처리를 참조하십시오.

이벤트 알림을 발생시킬 미리 정의된 DDL 문 그룹 선택

미리 정의된 유사 이벤트 그룹에 속한 Transact-SQL 이벤트가 실행된 후 이벤트 알림이 발생할 수 있습니다. 예를 들어 CREATE TABLE, ALTER TABLE 또는 DROP TABLE 문이 실행된 후 이벤트 알림이 발생하도록 하려면 CREATE EVENT NOTIFICATION 문에서 FOR DDL_TABLE_EVENTS를 지정합니다. CREATE EVENT NOTIFICATION을 실행하면 이벤트 그룹이 sys.events 카탈로그 뷰에 추가됩니다.

[!참고]

SQL Server 2005에서 sys.events는 한 그룹에 속하는 개별 이벤트만 나열하여 이벤트 그룹을 확장합니다. 따라서 SQL Server 2008의 이벤트 그룹에 속한 이벤트에 대한 변경 사항은 SQL Server 2005의 이벤트 그룹에 만들어진 이벤트 알림에 적용되지 않습니다.

이벤트 알림에 사용할 수 있는 미리 정의된 DDL 및 DML 문 그룹의 목록, 그룹에 포함된 특정 문 및 이러한 이벤트 그룹을 실행할 수 있는 범위는 DDL 이벤트 그룹을 참조하십시오.

이벤트 알림을 발생시킬 미리 정의된 SQL Trace 이벤트 그룹 선택

미리 정의된 유사 추적 이벤트 그룹에 속한 SQL Trace 이벤트가 실행된 후 이벤트 알림이 발생할 수 있습니다. 예를 들어 LOCK_DEADLOCK, LOCK_DEADLOCK_CHAIN, LOCK_ESCALATION 및 DEADLOCK_GRAPH 이벤트를 포함하는 잠금 관련 추적 이벤트가 발생한 후 이벤트 알림이 발생하도록 하려면 CREATE EVENT NOTIFICATION 문에서 FOR TRC_LOCKS를 지정합니다.

이벤트 알림에 사용할 수 있는 미리 정의된 SQL Trace 이벤트 목록은 이벤트 알림 사용에 대한 추적 이벤트 그룹을 참조하십시오. 이 그룹은 서버 인스턴스 수준에서만 실행될 수 있습니다.