Notifications de requête - sys.dm_qn_subscriptions
S'applique à : SQL Server
Retourne des informations sur les abonnements aux notifications de requêtes actifs dans le serveur. Vous pouvez utiliser cette vue pour vérifier les abonnements actifs dans le serveur ou une base de données spécifiée, ou pour vérifier un principal de serveur.
Nom de la colonne | Type de données | Description |
---|---|---|
id | int | ID d'un abonnement. |
database_id | int | ID de la base de données dans laquelle la requête de notification a été exécutée. Cette base de données stocke les informations relatives à cet abonnement. |
sid | varbinary(85) | ID de sécurité du principal du serveur qui a créé cet abonnement et qui en est propriétaire. |
object_id | int | ID de la table interne qui stocke les informations sur les paramètres de l'abonnement. |
created | datetime | Date et heure de création de l’abonnement. |
timeout | int | Délai d'expiration de l'abonnement, en secondes. La notification est marquée pour se déclencher après ce délai. Remarque : Le délai de déclenchement réel peut être supérieur au délai d’attente spécifié. Toutefois, si une modification qui invalide l’abonnement se produit après le délai d’expiration spécifié, mais avant le déclenchement de l’abonnement, SQL Server garantit que le déclenchement se produit au moment où la modification a été effectuée. |
statut | int | Indique l'état de l'abonnement. Consultez le tableau sous la section Remarques pour obtenir la liste de codes. |
Cardinalités de la relation
Du | À | Activé | Type |
---|---|---|---|
sys.dm_qn_subscriptions | sys.databases | database_id | Plusieurs-à-une |
sys.dm_qn_subscriptions | sys.internal_tables | object_id | Plusieurs-à-une |
Notes
Le code d'état 0 indique un état indéfini.
Les codes d'état suivants indiquent qu'un abonnement a été déclenché à cause d'une modification :
Code | État secondaire | Info |
---|---|---|
65798 | L'abonnement a été déclenché parce que les données ont été modifiées | Abonnement déclenché par insertion |
65799 | L'abonnement a été déclenché parce que les données ont été modifiées | Supprimer |
65800 | L'abonnement a été déclenché parce que les données ont été modifiées | Update |
65801 | L'abonnement a été déclenché parce que les données ont été modifiées | Fusionner (Merge) |
65802 | L'abonnement a été déclenché parce que les données ont été modifiées | Troncation de la table |
66048 | L'abonnement a été déclenché parce que le délai d'attente a expiré | Mode d'information indéfini |
66315 | L'abonnement a été déclenché parce que l'objet a été modifié | L'objet ou l'utilisateur a été supprimé |
66316 | L'abonnement a été déclenché parce que l'objet a été modifié | L'objet a été modifié |
66565 | L'abonnement a été déclenché parce que la base de données a été détachée ou supprimée | Serveur ou db redémarré |
66571 | L'abonnement a été déclenché parce que la base de données a été détachée ou supprimée | L'objet ou l'utilisateur a été supprimé |
66572 | L'abonnement a été déclenché parce que la base de données a été détachée ou supprimée | L'objet a été modifié |
67341 | L'abonnement a été déclenché en raison d'un manque de ressources sur le serveur | L'abonnement a été déclenché en raison d'un manque de ressources sur le serveur |
Les codes d'état suivants indiquent que la création d'un abonnement a échoué :
Code | État secondaire | Info |
---|---|---|
132609 | La création d'un abonnement a échoué parce que l'instruction n'est pas prise en charge | La requête est trop complexe |
132610 | La création d'un abonnement a échoué parce que l'instruction n'est pas prise en charge | Instruction non valide pour l'abonnement |
132611 | La création d'un abonnement a échoué parce que l'instruction n'est pas prise en charge | Options définies non valides pour l'abonnement |
132612 | La création d'un abonnement a échoué parce que l'instruction n'est pas prise en charge | Niveau d'isolation non valide |
132622 | La création d'un abonnement a échoué parce que l'instruction n'est pas prise en charge | Utilisation en interne |
132623 | La création d'un abonnement a échoué parce que l'instruction n'est pas prise en charge | Au-delà de la limite de modèle par table |
Les codes d'état suivants sont utilisés en interne et classés comme fin de contrôle et modes d'initialisation :
Code | État secondaire | Info |
---|---|---|
198656 | Utilisation en interne : fin de contrôle et modes d'initialisation | Mode d'information indéfini |
198928 | L'abonnement a été détruit | L'abonnement a été déclenché parce que db a été attaché |
198929 | L'abonnement a été détruit | L'abonnement a été déclenché parce que l'utilisateur a été supprimé |
198930 | L'abonnement a été détruit | L'abonnement a été supprimé à cause d'un nouvel abonnement |
198931 | L'abonnement a été détruit | L'abonnement a été arrêté |
199168 | L'abonnement est actif | Mode d'information indéfini |
199424 | L'abonnement a été initialisé, mais n'est pas encore actif | Mode d'information indéfini |
autorisations
Nécessite l'autorisation VIEW SERVER STATE sur le serveur.
Remarque
Si l'utilisateur n'a pas l'autorisation VIEW SERVER STATE, cette vue retourne des informations sur les abonnements qui appartiennent à l'utilisateur actuel.
Autorisations pour SQL Server 2022 (et versions plus récentes)
Nécessite l’autorisation VIEW SERVER PERFORMANCE STATE sur le serveur.
Exemples
R. Retour des abonnements aux notifications de requêtes actives pour l'utilisateur actif
L'exemple suivant retourne les abonnements aux notifications de requêtes actives de l'utilisateur actif. Si l'utilisateur possède les autorisations VIEW SERVER STATE, tous les abonnements actifs du serveur sont retournés.
SELECT id, database_id, sid, object_id, created, timeout, status
FROM sys.dm_qn_subscriptions;
GO
B. Retour des abonnements aux notifications de requêtes actives pour un utilisateur spécifié
L'exemple suivant retourne les abonnements aux notifications de requêtes actives auxquelles souscrit la connexion Ruth0
.
SELECT id, database_id, sid, object_id, created, timeout, status
FROM sys.dm_qn_subscriptions
WHERE sid = SUSER_SID('Ruth0');
GO
C. Retour des métadonnées des tables internes pour les abonnements aux notifications de requêtes
L'exemple suivant retourne les métadonnées des tables internes pour les abonnements aux notifications de requêtes.
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
Voir aussi
Fonctions et vues de gestion dynamique (Transact-SQL)
Vues de gestion dynamique associées aux notifications de requête (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)