Уведомления запросов — 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)