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

Изменения: 14 апреля 2006 г.

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

  • область уведомления;
  • инструкцию 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.

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

Выбор определенного события трассировки 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 возникает, когда в очереди имеются сообщения для обработки. Дополнительные сведения см. в разделе Event-Based Activation. Событие BROKER_QUEUE_DISABLED возникает при установке состояния очереди в значение OFF. Дополнительные сведения см. в разделе Handling Poison Messages.

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

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

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

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

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

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

См. также

Основные понятия

Основные сведения уведомлений о событиях
Реализация уведомлений о событиях

Другие ресурсы

EVENTDATA (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

14 апреля 2006 г.

Новое содержимое
  • Добавлено замечание о том, что рекомендуется тестировать реакцию уведомлений о событиях на выполнение системных хранимых процедур.
  • Добавлены ссылки на представление каталога sys.event_notification_event_types.

5 декабря 2005 г.

Измененное содержимое
  • В раздел «Выбор определенной DDL-инструкции для формирования уведомления о событии» добавлены сведения об уведомлениях о событиях, которые могут формироваться после выполнения определенных хранимых процедур.