Проектирование уведомлений о событиях

Для проектирования уведомления о событии необходимо определить следующее:

  • область уведомления;

  • инструкцию 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 и области, которые могут быть для них заданы, приводятся далее в разделе «Выбор определенной DDL-инструкции для формирования уведомления о событии».

Указание инструкции или группы инструкций языка Transact-SQL

Уведомления о событиях могут создаваться таким образом, чтобы они формировались в ответ на следующие действия:

  • запуск определенной DDL-инструкции, события трассировки SQL или события компонента Service Broker;

  • запуск предварительно определенной группы DDL-инструкций или событий трассировки SQL.

Выбор определенной DDL-инструкции для формирования уведомления о событии

Уведомления о событиях могут быть спроектированы таким образом, что они будут формироваться после запуска определенной инструкции языка Transact-SQL или хранимой процедуры. Как показано в предыдущем примере, это уведомление о событии формируется после события ALTER_TABLE.

Список отдельных инструкций языка Transact-SQL, для которых может быть задано формирование уведомлений о событиях, а также область, на которой уведомления могут выполняться, приводится в разделе DDL-события. Эти события можно также получить по запросу представления каталога sys.event_notification_event_types.

ПримечаниеПримечание

Определенные системные хранимые процедуры, выполняющие DDL-подобные операции, могут также вызывать формирование уведомления о событиях. Протестируйте свои уведомления о событиях, чтобы определить их реакцию на выполнение системных хранимых процедур. Например, как инструкция CREATE TYPE, так и хранимая процедура sp_addtype формируют уведомление, созданное на событии CREATE_TYPE.

Выбор определенного события трассировки SQL для формирования уведомления о событии

Уведомления о событиях могут быть спроектированы таким образом, что они будут срабатывать после возникновения события трассировки SQL. Например, следующее уведомление о событии формируется после возникновения на сервере события Object_Created.

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

Список событий SQL-трассировки, которые могут вызывать формирование уведомлений о событиях, приводится в разделе События трассировки для использования с уведомлениями о событии. Список этих событий можно также получить по запросу к представлению каталога sys.event_notification_event_types. События трассировки SQL могут выполняться только в области экземпляра сервера. Дополнительные сведения о классах событий трассировки SQL см. в разделе Справочник по приложению SQL Server Profiler.

Выбор определенного события компонента Service Broker для формирования уведомления о событии

Уведомления о событии могут быть спроектированы таким образом, чтобы они формировались после событий компонента Service Broker QUEUE_ACTIVATION или BROKER_QUEUE_DISABLED. Событие QUEUE_ACTIVATION возникает, когда в очереди имеются сообщения для обработки. Дополнительные сведения см. в разделе Активация на основе событий. Событие BROKER_QUEUE_DISABLED возникает при установке состояния очереди в значение OFF. Дополнительные сведения см. в разделе Обработка сообщений о сбое.

Выбор стандартной группы DLL-инструкций для формирования уведомления о событии

Уведомление о событии может формироваться после выполнения какого-либо события Transact-SQL, принадлежащего к стандартной группе схожих событий. Например, если необходимо, чтобы уведомление о событии формировалось после выполнения какой-либо из инструкций CREATE TABLE, ALTER TABLE или DROP TABLE, то в инструкции CREATE EVENT NOTIFICATON можно указать FOR DDL_TABLE_EVENTS. После выполнения инструкции CREATE EVENT NOTIFICATION группа событий добавляется в представление каталога sys.events.

ПримечаниеПримечание

В SQL Server 2005 представление sys.events разворачивает группы событий, перечисляя только те отдельные события, которые охвачены какой-либо группой. Поэтому в SQL Server 2008 изменение событий, охваченных группами событий, не применяется к уведомлениям о событиях, созданным в этих группах событий в SQL Server 2005.

Для списка стандартных групп DDL- и DML-инструкций, которые доступны для уведомлений о событиях, конкретные, входящие в эти группы инструкции и области, где эти группы событий могут выполняться, приводятся в разделе Группы DDL-событий.

Выбор стандартной группы событий трассировки SQL для формирования уведомления о событии

Уведомление о событии может формироваться после возникновения какого-либо события трассировки SQL, принадлежащего к стандартной группе схожих событий трассировки. Например, если необходимо, чтобы уведомление о событии формировалось после любого из событий трассировки, связанного с блокировкой, включая события LOCK_DEADLOCK, LOCK_DEADLOCK_CHAIN, LOCK_ESCALATION и DEADLOCK_GRAPH, то в инструкции CREATE EVENT NOTIFICATION можно задать FOR TRC_LOCKS.

Список стандартных групп событий трассировки SQL, вызывающих уведомление о событии, см. в разделе Группы событий трассировки, используемые с уведомлениями о событиях. Эти группы могут выполняться только на уровне экземпляра сервера.