Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:SQL Server
Уведомления о событиях отправляют сведения о событиях в службу Service Broker. Уведомления о событиях выполняются в ответ на различные инструкции языка определения данных Transact-SQL (DDL) и события трассировки SQL, отправляя сведения об этих событиях в службу Service Broker.
Уведомления о событиях можно использовать следующим образом.
- Регистрировать и просматривать изменения или активность базы данных.
- Выполнять действия в ответ на события в асинхронном режиме, а не синхронном.
Уведомления о событиях предоставляют программную альтернативу триггерам DDL и использованию приложения трассировки SQL.
Преимущества уведомлений о событиях
Уведомления о событиях запускаются асинхронно, вне области транзакции. Поэтому, в отличие от триггеров DDL, уведомления о событиях можно использовать внутри приложений баз данных и реагировать на события, не требуя ресурсов, выделяемых для немедленной транзакции.
В отличие от трассировки SQL, уведомления о событиях можно использовать для выполнения действия внутри экземпляра SQL Server в ответ на событие трассировки SQL.
Данные событий можно использовать приложениями, работающими вместе с SQL Server, для отслеживания хода выполнения и принятия решений. Например, следующее уведомление о событии отправляет сообщение определенной службе каждый раз, когда инструкция ALTER TABLE выполняется в образце базы данных AdventureWorks2025 .
USE AdventureWorks2022;
GO
CREATE EVENT NOTIFICATION NotifyALTER_T1
ON DATABASE
FOR ALTER_TABLE
TO SERVICE '//Adventure-Works.com/ArchiveService',
'8140a771-3c4b-4479-8ac0-81008ab17984';
Основные понятия уведомлений о событиях
При создании уведомления о событии открывается одна или несколько бесед Service Broker между экземпляром SQL Server и указанной целевой службой. Эти диалоги обычно остаются открытыми, пока уведомление о событии существует в виде объекта на экземпляре сервера. В некоторых случаях ввиду ошибок диалоги могут закрываться до удаления уведомления о событии. Эти диалоги никогда не разделяются между уведомлениями о событиях. Каждое уведомление о событии владеет собственными диалогами. Явное завершение диалога не дает конечной службе далее получать сообщения, и при следующем появлении события диалог повторно открываться не будет.
Сведения о событии доставляются в службу Service Broker в виде переменной типа XML , которая предоставляет сведения о том, когда происходит событие, о затронутом объекте базы данных, инструкции пакетной службы Transact-SQL и других сведениях. Дополнительные сведения о схеме XML, созданной уведомлениями о событиях, см. в разделе EVENTDATA.
Уведомления о событиях и триггеры
В следующей таблице сравниваются триггеры и уведомления о событиях и выявляются различия между ними.
| Триггеры | Уведомления о событиях |
|---|---|
| Триггеры DML срабатывают в ответ на события языка DML. Триггеры DDL срабатывают в ответ на события языка DDL. | Уведомления о событиях срабатывают в ответ на события языка DDL и подмножество событий трассировки SQL. |
| Триггеры могут выполнять управляемый код Transact-SQL или CLR. | Уведомления о событиях не выполняют код. Вместо этого они отправляют сообщения xml службе Service Broker. |
| Триггеры обрабатываются синхронно в области действия транзакций, вызвавших их срабатывание. | Уведомления о событиях могут обрабатываться асинхронно и не выполняются в области транзакций, которые вызывают их срабатывание. |
| Потребитель триггера тесным образом связан с событием, вызвавшим срабатывание триггера. | Потребитель уведомления о событии не связан с событием, вызвавшим срабатывание триггера. |
| Триггеры должны обрабатываться на локальном сервере. | Уведомления о событиях могут обрабатываться на удаленном сервере. |
| Для триггеров можно выполнить откат. | Уведомления о событиях не могут быть откатированы. |
| Имена триггеров DML ограничены областью схемы. Имена триггеров DDL находятся в области видимости базы данных или сервера. | Имена уведомлений о событиях находятся в области видимости сервера или базы данных. Уведомления о событии QUEUE_ACTIVATION находятся в области видимости определенной очереди. |
| Триггеры DML принадлежат тому же владельцу, что и таблицы, к которым они применяются. | Владелец уведомления о событии в очереди может иметь другого владельца, отличного от объекта, к которому он применяется. |
Триггеры поддерживают EXECUTE AS предложение. |
Уведомления о событиях не поддерживают EXECUTE AS предложение. |
| Сведения о событии триггера DDL могут быть захвачены с использованием функции EVENTDATA, которая возвращает тип данных xml . | Уведомления о событиях направляют данные о событии в формате XML службе Service Broker. Данные форматируются по той же схеме, что и функция EVENTDATA. |
Метаданные о триггерах находятся в представлениях каталога и sys.triggers представлений sys.server_triggers каталога. |
Метаданные о уведомлениях о событиях находятся в представлениях каталога и sys.event_notifications представлений sys.server_event_notifications каталога. |
Уведомления о событиях vs. SQL трассировки
В следующей таблице сравниваются способы мониторинга серверных событий, основанные на уведомлениях о событиях и использовании инструмента трассировки SQL.
| Трассировка SQL | Уведомления о событиях |
|---|---|
| Инструмент трассировки SQL не приводит к снижению производительности из-за накладных расходов, связанных с транзакциями. Упаковка данных выполняется эффективно. | С созданием xml-форматированных данных событий и отправкой уведомления о событии возникают затраты на производительность. |
| Инструмент трассировки SQL поддерживает мониторинг любого класса событий трассировки. | Уведомления о событиях позволяют осуществлять мониторинг подмножества классов событий трассировки и всех событий языка DDL. |
| Можно выбрать столбцы данных, которые будут создаваться при событии трассировки. | Схема данных о событиях в формате XML, возвращаемых уведомлениями о событиях, фиксирована. |
| События трассировки DDL создаются всегда независимо от того, был ли выполнен откат инструкции DDL. | Уведомления о событиях не запускаются, если событие в соответствующей инструкции DDL откатывается. |
| Управление промежуточным потоком данных о событиях трассировки связано с заполнением файлов или таблиц трассировки и управлением ими. | Промежуточное управление данными уведомлений о событиях выполняется автоматически на основе очередей компонента Service Broker. |
| Трассировки нужно перезапускать при каждом перезапуске сервера. | После регистрации уведомления о событиях объединяются в транзакции и остаются активными, несмотря на циклы в работе сервера. |
| После инициирования стрельба трассировок не может контролироваться. Для указания моментов инициирования трассировок можно использовать время остановки и время фильтрации. Доступ к трассировке осуществляется через соответствующий файл трассировки. | Уведомления о событиях можно контролировать с помощью WAITFOR инструкции в очереди, которая получает сообщение, созданное уведомлением о событии. Доступ к уведомлениям можно получить, запросив данные из очереди. |
ALTER TRACE — это наименьшее разрешение, необходимое для создания трассировки. Для создания файла трассировки на соответствующем компьютере также требуется разрешение. |
Минимальное разрешение, необходимое для создания уведомления о событии, зависит от типа уведомления.
RECEIVE разрешение также требуется в соответствующей очереди. |
| Данные трассировок можно получать в удаленном режиме. | Уведомления о событиях можно получать в удаленном режиме. |
| События трассировок реализуются с использованием системных хранимых процедур. | Уведомления о событиях реализуются с помощью сочетания инструкций ядро СУБД и Service Broker Transact-SQL. |
| Данные событий трассировки можно получить программным способом, запрашивая соответствующую таблицу трассировки, анализируя файл трассировки или используя класс TraceReader объектов управления SQL Server (SMO). | Данные событий можно получить программным образом, выполнив для этих данных, представленных в формате XML, запрос XQuery или воспользовавшись классами событий системы SMO. |
Задачи уведомления о событиях
| Задача | Article |
|---|---|
| Описывает создание и внедрение уведомлений о событиях. | Реализация уведомлений о событиях |
| Описывает настройку безопасности диалоговых окон Service Broker для уведомлений о событиях, отправляющих сообщения в брокер служб на удаленном сервере. | Настройка безопасности диалогов для уведомлений о событиях |
| Описывает методы возвращения сведений об уведомлениях о событиях. | Получение сведений об уведомлениях о событиях |