Notificações de consulta - sys.dm_qn_subscriptions

Aplica-se a: SQL Server

Retorna informações sobre as assinaturas de notificações de consulta ativa no servidor. Você pode usar essa exibição para verificar assinaturas ativas no servidor ou em um banco de dados especificado, ou verificar um principal de servidor especificado.

Nome da coluna Tipo de dados Descrição
id int ID de uma assinatura.
database_id int ID do banco de dados no qual a consulta de notificação foi executada. Esse banco de dados armazena informações relativas a essa assinatura.
sid varbinary(85) ID de segurança do principal do servidor que criou e detém essa assinatura.
object_id int ID da tabela interna que armazena informações sobre parâmetros de assinatura.
created datetime Data e hora em que a assinatura foi criada.
timeout int Tempo limite para a assinatura em segundos. A notificação será sinalizada para disparar após o decorrer desse período.

Nota: O tempo real de disparo pode ser maior do que o tempo limite especificado. No entanto, se uma alteração que invalida a assinatura ocorrer após o tempo limite especificado, mas antes que a assinatura seja disparada, o SQL Server garantirá que o acionamento ocorra no momento em que a alteração foi feita.
status int Indica o status da assinatura. Veja a tabela abaixo dos comentários para obter a lista de códigos.

Cardinalidades de relações

De Para Ativado Tipo
sys.dm_qn_subscriptions sys.databases database_id Muitos para um
sys.dm_qn_subscriptions sys.internal_tables object_id Muitos para um

Comentários

O código de status 0 indica um status indefinido.

Os códigos de status a seguir indicam que uma assinatura foi acionada devido a uma alteração:

Código Status secundário Informações
65798 Assinatura acionada porque os dados foram alterados Assinatura disparada por inserção
65799 Assinatura acionada porque os dados foram alterados Excluir
65800 Assinatura acionada porque os dados foram alterados Atualizar
65801 Assinatura acionada porque os dados foram alterados Mesclar
65802 Assinatura acionada porque os dados foram alterados Truncar tabela
66048 Assinatura acionada porque o tempo limite expirou Modo de informações indefinido
66315 Assinatura acionada porque os objetos foram alterados objeto ou usuário removido
66316 Assinatura acionada porque os objetos foram alterados objeto alterado
66565 Assinatura acionada porque o banco de dados foi desanexado ou removido servidor ou db reiniciado
66571 Assinatura acionada porque o banco de dados foi desanexado ou removido objeto ou usuário removido
66572 Assinatura acionada porque o banco de dados foi desanexado ou removido objeto alterado
67341 assinatura disparada devido à falta de recursos no servidor assinatura disparada devido à falta de recursos no servidor

Os códigos de status a seguir indicam que uma assinatura não pôde ser criada:

Código Status secundário Informações
132609 A criação de assinatura falhou porque não há suporte à instrução Consulta muito complexa
132610 A criação de assinatura falhou porque não há suporte à instrução Instrução inválida para assinatura
132611 A criação de assinatura falhou porque não há suporte à instrução Opções definidas inválidas para assinatura
132612 A criação de assinatura falhou porque não há suporte à instrução Nível de isolamento inválido
132622 A criação de assinatura falhou porque não há suporte à instrução usado internamente
132623 A criação de assinatura falhou porque não há suporte à instrução acima do limite do modelo por tabela

Os códigos de status a seguir são usados internamente e são classificados como modos de check kill e init:

Código Status secundário Informações
198656 Usado internamente: modos check kill e init Modo de informações indefinido
198928 Assinatura destruída Assinatura acionada porque o banco de dados foi anexado
198929 Assinatura destruída Assinatura acionada porque o usuário foi removido
198930 Assinatura destruída Assinatura removida devido a uma nova assinatura
198931 Assinatura destruída assinatura eliminada
199168 Assinatura ativa Modo de informações indefinido
199424 Assinatura inicializada, mas não ativa ainda Modo de informações indefinido

Permissões

Requer a permissão VIEW SERVER STATE no servidor.

Observação

Se o usuário não tiver a permissão VIEW SERVER STATE, essa exibição retornará informações sobre as assinaturas de propriedade do usuário atual.

Permissões do SQL Server 2022 e posteriores

É necessária a permissão VIEW SERVER PERFORMANCE STATE no servidor.

Exemplos

R. Retornar assinaturas ativas de notificação de consulta para o usuário atual

O exemplo a seguir retorna assinaturas ativas de notificação de consulta para o usuário atual. Se o usuário tiver permissões VIEW SERVER STATE, todas as assinaturas ativas no servidor serão retornadas.

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

B. Retornar assinaturas ativas de notificação de consulta para um usuário especificado

O exemplo a seguir retorna assinaturas ativas de notificação de consulta feitas pelo logon Ruth0.

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

C. Retornando metadados de tabela interna para assinaturas de notificação de consulta

O exemplo a seguir retorna os metadados de tabela interna para assinaturas de notificação de consulta.

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  

Confira também

Exibições e funções de gerenciamento dinâmico (Transact-SQL)
Exibições de gerenciamento dinâmico relacionadas a notificações de consulta (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)