Поделиться через


Уведомления запросов — sys.dm_qn_subscriptions

Область применения: SQL Server

Возвращает сведения об активных подписках на уведомления о запросах на сервере. Можно использовать данное представление для проверки активных подписок на сервере или в указанной базе данных, или проверки указанного участника [системы безопасности] на уровне сервера.

Имя столбца Тип данных Description
id int Идентификатор подписки.
database_id int Идентификатор базы данных, для которой был выполнен запрос уведомлений. Эта база данных хранит информацию, относящуюся к данной подписке.
ид безопасности varbinary(85) Идентификатор безопасности участника [системы безопасности] на уровне сервера, который создал подписку и которому она принадлежит.
object_id int Идентификатор внутренней таблицы, в которой хранятся данные о параметрах подписки.
created datetime Дата и время создания подписки.
timeout int Время ожидания для подписки в секундах. Уведомление будет снабжено меткой, указывающей на то, что оно должно сработать по истечении этого времени.

Примечание. Фактическое время запуска может быть больше указанного времени ожидания. Однако, если изменение, которое делает подписку недопустимой после указанного времени ожидания, но перед запуском подписки SQL Server гарантирует, что в то время, когда было выполнено изменение.
состояние int Отображает состояние подписки. См. список кодов в таблице под примечаниями.

Количество элементов связей

С дт. По Вкл Тип
sys.dm_qn_subscriptions sys.databases database_id Многие к одному
sys.dm_qn_subscriptions sys.internal_tables object_id Многие к одному

Замечания

Код состояния 0 обозначает неопределенное состояние.

Следующие коды состояний обозначают, что подписка сработала из-за изменения.

Код Дополнительное состояние Сведения
65798 Подписка сработала из-за изменения данных Подписка сработала из-за операции вставки
65799 Подписка сработала из-за изменения данных Удаление
65800 Подписка сработала из-за изменения данных Обновить
65801 Подписка сработала из-за изменения данных Слияние
65802 Подписка сработала из-за изменения данных Усечь таблицу
66048 Подписка сработала из-за изменения времени ожидания Неопределенный режим INFO
66315 Подписка сработала из-за изменения объекта Объект или пользователь удален
66316 Подписка сработала из-за изменения объекта Объект изменен
66565 Подписка сработала из-за отсоединения или удаления базы данных Перезапуск сервера или базы данных
66571 Подписка сработала из-за отсоединения или удаления базы данных Объект или пользователь удален
66572 Подписка сработала из-за отсоединения или удаления базы данных Объект изменен
67341 Подписка запущена из-за отсутствия ресурсов на сервере Подписка запущена из-за отсутствия ресурсов на сервере

Следующие коды состояний показывают, что подписку создать не удалось.

Код Дополнительное состояние Сведения
132609 Подписка не создана, так как инструкция не поддерживается Слишком сложный запрос
132610 Подписка не создана, так как инструкция не поддерживается Недопустимая инструкция для подписки
132611 Подписка не создана, так как инструкция не поддерживается Недопустимые параметры для подписки
132612 Подписка не создана, так как инструкция не поддерживается Неверный уровень изоляции
132622 Подписка не создана, так как инструкция не поддерживается Для внутреннего использования
132623 Подписка не создана, так как инструкция не поддерживается Превышен предел шаблона на таблицу

Следующие коды состояний используются внутри системы и классифицируются как режимы check kill и init.

Код Дополнительное состояние Сведения
198656 Для внутреннего использования: режимы check kill и init Неопределенный режим INFO
198928 Подписка уничтожена Подписка сработала из-за присоединения базы данных
198929 Подписка уничтожена Подписка сработала из-за удаления пользователя
198930 Подписка уничтожена Подписка удалена из-за новой подписки
198931 Подписка уничтожена Подписка уничтожена
199168 Подписка активна Неопределенный режим INFO
199424 Подписка инициализирована, но пока неактивна Неопределенный режим INFO

Разрешения

Требуется разрешение VIEW SERVER STATE для сервера.

Примечание.

Если у пользователя нет разрешения VIEW SERVER STATE, это представление возвращает данные о принадлежащих текущему пользователю подписках.

Разрешения для SQL Server 2022 и более поздних версий

Требуется разрешение VIEW SERVER PERFORMANCE STATE на сервере.

Примеры

А. Возврат активных подписок на уведомления о запросах для текущего пользователя

Следующий пример возвращает активные подписки на уведомления о запросах текущего пользователя. Если пользователь имеет разрешения VIEW SERVER STATE, то возвращаются все активные подписки на сервере.

SELECT id, database_id, sid, object_id, created, timeout, status  
FROM sys.dm_qn_subscriptions;  
GO  

B. Возврат активных подписок на уведомления о запросах для указанного пользователя

Следующий пример возвращает активные подписки на уведомления о запросах для подписчика с именем входа Ruth0.

SELECT id, database_id, sid, object_id, created, timeout, status  
FROM sys.dm_qn_subscriptions  
WHERE sid = SUSER_SID('Ruth0');  
GO  

C. Возврат метаданных внутренней таблицы для подписок на уведомления о запросах

Следующий пример возвращает метаданные внутренней таблицы для подписок на уведомления о запросах.

SELECT qn.id AS query_subscription_id  
    ,it.name AS internal_table_name  
    ,it.object_id AS internal_table_id  
FROM sys.internal_tables AS it  
JOIN sys.dm_qn_subscriptions AS qn ON it.object_id = qn.object_id  
WHERE it.internal_type_desc = 'QUERY_NOTIFICATION';  
GO  

См. также

Динамические административные представления и функции (Transact-SQL)
Уведомления о запросах, связанные с динамическими административными представлениями (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)