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)