이벤트 알림Event Notifications

이 항목 적용 대상: 예SQL Server없습니다Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse 이벤트 알림은 Service BrokerService Broker 서비스에 이벤트 정보를 보냅니다. Event notifications send information about events to a Service BrokerService Broker service. 이벤트 알림은 다양한 Transact-SQLTransact-SQL DDL(데이터 언어 정의) 문과 SQL 추적 이벤트에 대한 응답으로 실행되어 이러한 이벤트에 대한 정보를 Service BrokerService Broker 서비스로 보냅니다.Event notifications execute in response to a variety of Transact-SQLTransact-SQL data definition language (DDL) statements and SQL Trace events by sending information about these events to a Service BrokerService Broker service.

이벤트 알림을 사용하여 다음을 수행할 수 있습니다.Event notifications can be used to do the following:

  • 데이터베이스에서 발생하는 변경 내용이나 작업 기록 및 검토Log and review changes or activity occurring on the database.

  • 동기 방식이 아닌 비동기 방식으로 이벤트에 응답하여 동작 수행Perform an action in response to an event in an asynchronous instead of synchronous manner.

    이벤트 알림은 DDL 트리거 및 SQL 추적에 대한 대체 프로그래밍 기능을 제공합니다.Event notifications can offer a programming alternative to DDL triggers and SQL Trace.

이벤트 알림의 이점Event Notifications Benefits

이벤트 알림은 트랜잭션 범위 밖에서 비동기적으로 실행됩니다.Event notifications run asynchronously, outside the scope of a transaction. 따라서 DDL 트리거와 달리 이벤트 알림은 데이터베이스 응용 프로그램 내에서 사용되어 최근 트랜잭션에서 정의한 리소스를 사용하지 않고 이벤트에 응답할 수 있습니다.Therefore, unlike DDL triggers, event notifications can be used inside a database application to respond to events without using any resources defined by the immediate transaction.

SQL 추적과 달리 이벤트 알림을 사용하여 SQL ServerSQL Server 인스턴스 내에서 SQL 추적 이벤트에 응답하는 동작을 수행할 수 있습니다.Unlike SQL Trace, event notifications can be used to perform an action inside an instance of SQL ServerSQL Server in response to a SQL Trace event.

이벤트 데이터는 SQL ServerSQL Server 와 함께 실행되어 진행률을 추적하고 의사 결정을 내리는 응용 프로그램에 의해 사용될 수 있습니다.Event data can be used by applications that are running together with SQL ServerSQL Server to track progress and make decisions. 예를 들어 다음 이벤트 알림은 ALTER TABLE 예제 데이터베이스에서 AdventureWorks2012AdventureWorks2012 문이 실행될 때마다 특정 서비스에 알림을 보냅니다.For example, the following event notification sends a notice to a certain service every time an ALTER TABLE statement is issued in the AdventureWorks2012AdventureWorks2012 sample database.

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

이벤트 알림 개념Event Notifications Concepts

이벤트 알림이 생성되면 Service BrokerService Broker 인스턴스와 지정한 대상 서비스 간에 하나 이상의 SQL ServerSQL Server 대화가 열립니다.When an event notification is created, one or more Service BrokerService Broker conversations between an instance of SQL ServerSQL Server and the target service you specify are opened. 대화는 일반적으로 이벤트 알림이 서버 인스턴스의 개체로 존재하는 한 열린 상태로 유지됩니다.The conversations typically remain open as long as the event notification exists as an object on the server instance. 몇몇 오류가 발생하는 경우에는 이벤트 알림을 삭제하기 전에 대화가 종료될 수 있습니다.In some error cases the conversations can close before the event notification is dropped. 이러한 대화는 이벤트 알림 간에 공유되지 않습니다.These conversations are never shared between event notifications. 각 이벤트 알림에는 자체적인 배타 대화가 있습니다.Every event notification has its own exclusive conversations. 대화를 명시적으로 종료하면 대상 서비스가 더 이상의 메시지를 받지 못하게 되며 이벤트 알림이 다음에 실행될 때 해당 대화가 다시 열리지 않습니다.Ending a conversation explicitly prevents the target service from receiving more messages, and the conversation will not reopen the next time the event notification fires.

이벤트 정보는 이벤트 발생 시기, 영향을 받는 데이터베이스 개체, 관련된 Service BrokerService Broker 일괄 처리 문 및 기타 정보를 제공하는 xml 유형의 변수로 Transact-SQLTransact-SQL 서비스에 전달됩니다.Event information is delivered to the Service BrokerService Broker service as a variable of type xml that provides information about when an event occurs, about the database object affected, the Transact-SQLTransact-SQL batch statement involved, and other information. 이벤트 알림이 만드는 XML 스키마에 대한 자세한 내용은 EVENTDATA(Transact-SQL)를 참조하세요.For more information about the XML schema produced by event notifications, see EVENTDATA (Transact-SQL).

이벤트 알림과 트리거Event Notifications vs. Triggers

다음 표에서는 트리거와 이벤트 알림을 비교 및 대조합니다.The following table compares and contrasts triggers and event notifications.

트리거Triggers 이벤트 알림Event Notifications
DML 트리거는 DML(데이터 조작 언어) 이벤트에 응답하고DML triggers respond to data manipulation language (DML) events. DDL 트리거는 DDL(데이터 정의 언어) 이벤트에 응답합니다.DDL triggers respond to data definition language (DDL) events. 이벤트 알림은 DDL 이벤트와 SQL 추적 이벤트의 하위 집합에 응답합니다.Event notifications respond to DDL events and a subset of SQL trace events.
트리거는 Transact-SQL 또는 CLR(공용 언어 런타임) 관리 코드를 실행할 수 있습니다.Triggers can run Transact-SQL or common language runtime (CLR) managed code. 이벤트 알림은 코드를 실행하지 않는Event notifications do not run code. 대신 Service Broker 서비스에 xml 메시지를 보냅니다.Instead, they send xml messages to a Service Broker service.
트리거는 트리거를 시작하는 트랜잭션 범위 내에서 동기적으로 처리됩니다.Triggers are processed synchronously, within the scope of the transactions that cause them to fire. 이벤트 알림은 비동기적으로 처리될 수 있으며 해당 이벤트 알림을 시작하는 트랜잭션 범위 내에서 실행되지 않습니다.Event notifications may be processed asynchronously and do not run in the scope of the transactions that cause them to fire.
트리거의 소비자는 트리거를 실행하는 이벤트에 밀접하게 결합됩니다.The consumer of a trigger is tightly coupled with the event that causes it to fire. 이벤트 알림의 소비자는 이벤트 알림을 시작하는 이벤트와 분리됩니다.The consumer of an event notification is decoupled from the event that causes it to fire.
트리거는 로컬 서버에서 처리해야 합니다.Triggers must be processed on the local server. 이벤트 알림은 원격 서버에서 처리할 수 있습니다.Event notifications can be processed on a remote server.
트리거는 롤백할 수 있습니다.Triggers can be rolled back. 이벤트 알림은 롤백할 수 없습니다.Event notifications cannot be rolled back.
DML 트리거 이름은 스키마 범위입니다.DML trigger names are schema-scoped. DDL 트리거 이름은 데이터베이스 범위이거나 서버 범위입니다.DDL trigger names are database-scoped or server-scoped. 이벤트 알림 이름은 서버 또는 데이터베이스 범위입니다.Event notification names are scoped by the server or database. QUEUE_ACTIVATION 이벤트에 대한 이벤트 알림의 범위는 특정 큐로 한정됩니다.Event notifications on a QUEUE_ACTIVATION event are scoped to a specific queue.
DML 트리거는 트리거가 적용되는 테이블과 동일한 소유자에 의해 소유됩니다.DML triggers are owned by the same owner as the tables on which they are applied. 큐에 대한 이벤트 알림의 소유자는 해당 이벤트 알림이 적용되는 개체의 소유자와 다를 수 있습니다.The owner of an event notification on a queue may have a different owner than the object on which it is applied.
트리거는 EXECUTE AS 절을 지원합니다.Triggers support the EXECUTE AS clause. 이벤트 알림은 EXECUTE AS 절을 지원하지 않습니다.Event notifications do not support the EXECUTE AS clause.
DDL 트리거 이벤트 정보는 xml 데이터 형식을 반환하는 EVENTDATA 함수를 사용하여 캡처할 수 있습니다.DDL trigger event information can be captured using the EVENTDATA function, which returns an xml data type. 이벤트 알림은 Service Broker 서비스에 xml 이벤트 정보를 보냅니다.Event notifications send xml event information to a Service Broker service. 해당 정보는 EVENTDATA 함수와 같은 스키마 형식으로 지정됩니다.The information is formatted to the same schema as that of the EVENTDATA function.
트리거의 메타데이터는 sys.triggerssys.server_triggers 카탈로그 뷰에 포함됩니다.Metadata about triggers is found in the sys.triggers and sys.server_triggers catalog views. 이벤트 알림의 메타데이터는 sys.event_notificationssys.server_event_notifications 카탈로그 뷰에 포함됩니다.Metadata about event notifications is found in the sys.event_notifications and sys.server_event_notifications catalog views.

이벤트 알림과 SQL 추적Event Notifications vs. SQL Trace

다음 표에서는 서버 이벤트 모니터링을 위한 이벤트 알림과 SQL 추적을 사용할 때의 차이점을 비교합니다.The following table compares and contrasts using event notifications and SQL Trace for monitoring server events.

SQL 추적SQL Trace 이벤트 알림Event Notifications
SQL 추적은 트랜잭션과 관련된 성능 오버헤드를 생성하지 않습니다.SQL Trace generates no performance overhead associated with transactions. 데이터 패키징이 효율적입니다.Packaging of data is efficient. XML 형식 이벤트 데이터 작성 및 이벤트 알림 전송과 관련된 성능 오버헤드가 있습니다.There is performance overhead associated with creating the XML-formatted event data and sending the event notification.
SQL 추적은 모든 추적 이벤트 클래스를 모니터링할 수 있습니다.SQL Trace can monitor any trace event class. 이벤트 알림은 추적 이벤트 클래스의 하위 집합과 모든 DDL(데이터 정의 언어) 이벤트를 모니터링할 수 있습니다.Event notifications can monitor a subset of trace event classes and also all data definition language (DDL) events.
추적 이벤트를 생성할 데이터 열을 사용자 지정할 수 있습니다.You can customize which data columns to generate in a trace event. 이벤트 알림에서 반환되는 XML 형식 이벤트 데이터의 스키마가 고정되어 있습니다.The schema of the XML-formatted event data returned by event notifications is fixed.
DDL로 생성되는 추적 이벤트는 DDL 문이 롤백되는지 여부와 관계없이 항상 생성됩니다.Trace events generated by DDL are always generated, regardless of whether the DDL statement is rolled back. 해당 DDL 문의 이벤트가 롤백되면 이벤트 알림이 실행되지 않습니다.Event notifications do not fire if the event in the corresponding DDL statement is rolled back.
추적 파일 또는 추적 테이블 채우기 및 관리 작업을 통해 추적 이벤트 데이터의 중간 흐름을 관리합니다.Managing the intermediate flow of trace event data involves populating and managing trace files or trace tables. 이벤트 알림 데이터의 중간 관리는 Service Broker 큐를 통해 자동으로 수행됩니다.Intermediate management of event notification data is accomplished automatically through Service Broker queues.
서버를 다시 시작할 때마다 추적을 다시 시작해야 합니다.Traces must be restarted every time the server restarts. 이벤트 알림을 등록하면 여러 서버 주기에서 이벤트 알림이 유지되고 트랜잭션됩니다.After being registered, event notifications persist across server cycles and are transacted.
추적이 시작된 후에는 추적 실행을 제어할 수 없습니다.After being initiated, the firing of traces cannot be controlled. 중지 시간과 필터 시간을 사용하여 추적 시작 시기를 지정할 수 있습니다.Stop times and filter times can be used to specify when they initiate. 해당 추적 파일을 폴링하여 추적에 액세스할 수 있습니다.Traces are accessed by polling the corresponding trace file. 이벤트 알림에서 생성되는 메시지를 받는 큐에 대해 WAITFOR 문을 사용하여 이벤트 알림을 제어할 수 있습니다.Event notifications can be controlled by using the WAITFOR statement against the queue that receives the message generated by the event notification. 큐를 폴링하여 이벤트 알림에 액세스할 수 있습니다.They can be accessed by polling the queue.
추적을 만드는 데 필요한 최소 사용 권한은 ALTER TRACE입니다.ALTER TRACE is the least permission that is required to create a trace. 해당 컴퓨터에 추적 파일을 만드는 데도 사용 권한이 필요합니다.Permission is also required to create a trace file on the corresponding computer. 생성되는 이벤트 알림 유형에 따라 최소 사용 권한이 다릅니다.Least permission depends on the type of event notification being created. 해당 큐에 RECEIVE 사용 권한도 필요합니다.RECEIVE permission is also needed on the corresponding queue.
원격으로 추적을 받을 수 있습니다.Traces can be received remotely. 원격으로 이벤트 알림을 받을 수 있습니다.Event notifications can be received remotely.
시스템 저장 프로시저를 사용하여 추적 이벤트를 구현합니다.Trace events are implemented by using system stored procedures. 데이터베이스 엔진Database EngineService BrokerService Broker Transact-SQLTransact-SQL 문 조합을 사용하여 이벤트 알림을 구현합니다.Event notifications are implemented by using a combination of 데이터베이스 엔진Database Engine and Service BrokerService Broker Transact-SQLTransact-SQL statements.
해당 추적 테이블 쿼리, 추적 파일 구문 분석 또는 SMO( SQL ServerSQL Server 관리 개체) TraceReader 클래스 사용을 통해 추적 이벤트 데이터에 프로그래밍 방식으로 액세스할 수 있습니다.Trace event data can be accessed programmatically by querying the corresponding trace table, parsing the trace file, or using the SQL ServerSQL Server Management Objects (SMO) TraceReader Class. XML 형식 이벤트 데이터에 대한 XQuery 실행이나 SMO Event 클래스 사용을 통해 이벤트 데이터에 프로그래밍 방식으로 액세스할 수 있습니다.Event data is accessed programmatically by issuing XQuery against the XML-formatted event data, or by using the SMO Event classes.

이벤트 알림 태스크Event Notification Tasks

태스크Task 항목Topic
이벤트 알림을 만들고 구현하는 방법에 대해 설명합니다.Describes how to create and implement event notifications. 이벤트 알림 구현Implement Event Notifications
원격 서버의 Service Broker로 메시지를 보내는 이벤트 알림에 대해 Service BrokerService Broker 대화 보안을 구성하는 방법에 대해 설명합니다.Describes how to configure Service BrokerService Broker dialog security for event notifications that send messages to a service broker on a remote server. 이벤트 알림에 대한 대화 보안 구성Configure Dialog Security for Event Notifications
이벤트 알림에 대한 정보를 반환하는 방법에 대해 설명합니다.Describes how to return information about event notifications. 이벤트 알림에 대한 정보 가져오기Get Information About Event Notifications

참고 항목See Also

DDL 트리거 DDL Triggers
DML 트리거 DML Triggers
SQL 추적SQL Trace