sys.dm_qn_subscriptions (Transact-SQL)
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 une entité de sécurité 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é de l'entité de sécurité 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. |
créé |
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 temps de déclenchement réel peut être supérieur au délai d'expiration spécifié. Cependant, si une modification qui invalide l'abonnement a lieu après le délai d'expiration, mais avant le déclenchement de l'abonnement, SQL Server fait en sorte que le déclenchement ait lieu au moment de la modification.
|
status |
int |
Indique l'état de l'abonnement. Consultez le tableau sous la section Remarques pour obtenir la liste de codes. |
Cardinalités des relations
De |
Vers |
Sur |
Type |
---|---|---|---|
sys.dm_qn_subscriptions |
sys.databases |
database_id |
Plusieurs-à-un |
sys.dm_qn_subscriptions |
sys.internal_tables |
object_id |
Plusieurs-à-un |
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 |
Suppression |
65800 |
L'abonnement a été déclenché parce que les données ont été modifiées |
Mise à jour |
65801 |
L'abonnement a été déclenché parce que les données ont été modifiées |
Fusion |
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.
Exemples
A. 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