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


sys.dm_qn_subscriptions (Transact-SQL)

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

Имя столбца

Тип данных

Описание

id

int

Идентификатор подписки.

database_id

int

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

sid

varbinary(85)

Идентификатор безопасности участника [системы безопасности] на уровне сервера, который создал подписку и которому она принадлежит.

object_id

int

Идентификатор внутренней таблицы, в которой хранятся данные о параметрах подписки.

created

datetime

Дата и время создания подписки.

timeout

int

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

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

status

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, это представление возвращает данные о принадлежащих текущему пользователю подписках.

Примеры

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

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

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

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

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

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

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

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

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