Проектирование уведомлений о событиях
Для проектирования уведомления о событии необходимо определить следующее:
область уведомления;
инструкцию 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, вызывающих уведомление о событии, см. в разделе Группы событий трассировки, используемые с уведомлениями о событиях. Эти группы могут выполняться только на уровне экземпляра сервера.
См. также