Résolution des problèmes courants de Notification Services

Microsoft a rassemblé dans cette liste les problèmes rencontrés par les utilisateurs de Notification Services et les solutions proposées.

ms172473.note(fr-fr,SQL.90).gifImportant :
Lors du dépannage d'une application Notification Services, accédez d'abord au journal d'application dans l'Observateur d'événements de Windows. Les événements du journal d'application constituent souvent le meilleur moyen pour déterminer la source d'un problème.

Dépannage de l'administration et du déploiement

La création d'une instance a échoué en raison d'une erreur liée au délai d'expiration

Les processus qui créent une instance de Notification Services effectuent plusieurs taches, et chaque tâche a un délai à respecter. Le processus de création d'une base de données a tendance à durer plus longtemps que les autres opérations ; son délai est de 10 minutes, ce qui normalement suffit amplement. Si vos définitions de configuration ou application d'instance spécifient des tailles de base de données très volumineuses (plusieurs gigaoctets) le délai du processus de création peut expirer ; dans ce cas, un message d'expiration de délai s'affiche.

Pour créer l'instance avec succès, vous devez réduire les tailles de fichier de base de données dans le fichier de définition d'application et le fichier de configuration, puis créer l'instance. Vous pouvez ensuite augmenter les tailles des fichiers de base de données en utilisant l'instruction SQL Server Management Studio ou Transact-SQL.

La création d'une instance a échoué car le journal des transactions est plein

Si vous effectuez des ajouts dans un journal qui est plein ou quasiment plein, la création d'une instance de Notification Services peut échouer. Augmentez les valeurs de taille et de maxsize du journal des transactions et réessayez.

La mise à jour d'une instance a échoué

La mise à jour d'une instance Notification Services peut échouer en raison d'erreurs dans une définition d'application ou une configuration d'instance. Avant la mise à jour d'une instance, vous devez valider tous les fichiers XML afin de réduire le risque que cette erreur se produise. Si une erreur se produit, réparez le fichier et tentez d'effectuer à nouveau la mise à jour.

Étant donné que la mise à jour d'une instance modifie les bases de données d'instance et d'application, sauvegardez toujours les bases de données d'instance et d'application avant de mettre à jour l'instance.

Pour plus d'informations sur la mise à jour d'une instance, consultez Mise à jour des propriétés d'une instance. Pour plus d'informations sur la mise à jour d'une application, consultez Mise à jour d'une application.

Le service Windows ne démarre pas

Si vous utilisez le service Windows NS$instanceName pour exécuter les composants de moteur de Notification Services, et que ce service ne démarre pas, plusieurs raisons sont possibles : le mot de passe du service est incorrect, le nom de l'instance que vous essayez de démarrer ne correspond pas exactement au nom de l'instance de Notification Services, les bases de données sont inaccessibles ou le compte d'utilisateur Windows sous lequel le service a été configuré pour s'exécuter ne dispose pas des autorisations pour se connecter en tant que service. Pour résoudre ce problème, essayez les opérations suivantes :

  • **Vérifiez que le compte de service est membre du groupe SQLServer2005NotificationServicesUser$**nom_ordinateur dans Windows. Les membres du groupe SQLServer2005NotificationServicesUser$nom_ordinateur ont l'autorisation de lire et d'exécuter les fichiers binaires de Notification Services, y compris NSService.exe.
  • Redéfinissez le mot de passe Windows. Si vous utilisez les commandes Notification Services pour configurer un mot de passe de service, et si ce mot de passe contient des caractères spéciaux ou a été tapé de manière incorrecte, le service NS$instanceName ne démarrera pas.
    Pour corriger cette erreur, mettez le mot de passe à jour à l'aide de l'application Services :
    1. Dans le Panneau de configuration, ouvrez Outils d'administration.
    2. Ouvrez Services.
    3. Cliquez avec le bouton droit sur le service **NS$**instanceName (instanceName représente le nom de l'instance de Notification Services), puis cliquez sur Propriétés.
    4. Cliquez sur l'onglet Connexion, tapez votre mot de passe dans les zones de texte Mot de passe et Confirmer lemot de passe. Cliquez sur OK.
    5. Cliquez avec le bouton droit sur le service, puis cliquez sur Démarrer.
  • Vérifiez les bases de données. Si le service ne peut pas accéder aux bases de données d'instance et d'application, il ne démarrera pas.
    • Le nom de base de données dans le Registre d'instance est-il correct ?
    • L'instance du moteur de base de données SQL Server 2005 qui héberge les bases de données d'instance et d'application est-elle en cours d'exécution ?
    • Les bases de données d'instance et d'application sont-elles disponibles ?
    • Des problèmes réseau empêchent-ils le service d'accéder aux bases de données ?
  • Démarrez le service à partir de l'application Services. Lorsque vous démarrez le service à l'aide de la commande net start, les caractères utilisés dans la ligne de commande doivent correspondre aux caractères Unicode utilisés dans le fichier de configuration. Si les caractères ne correspondent pas, l'instance ne peut pas démarrer.
    Pour corriger cette erreur, démarrez le service à l'aide de l'application Services de Microsoft Windows :
    1. Dans le Panneau de configuration, ouvrez Outils d'administration.
    2. Ouvrez Services.
    3. Cliquez avec le bouton droit sur le service **NS$**instanceName, puis cliquez sur Démarrer.

Aucune erreur n'est écrite dans le journal d'application

Si le moteur de Notification Services ne démarre pas alors que dans le journal d'application aucune erreur n'en indique la raison, peut-être votre journal est-il plein. Pour reconfigurer le journal d'application, procédez ainsi :

  1. Dans le Panneau de configuration, ouvrez Outils d'administration.
  2. Ouvrez l'Observateur d'événements.
  3. Cliquez avec le bouton droit sur Application, puis cliquez sur Propriétés.
  4. Choisissez une ou les deux possibilités suivantes :
    • Augmentez la valeur de Taille maximale du journal.
    • Sélectionnez Remplacer les événements si nécessaire.

Des erreurs inattendues apparaissent dans le journal d'application

Si vous recevez des erreurs inattendues dans le journal d'application, essayez de redémarrer le moteur de Notification Services.

Par exemple, si vous supprimez une application d'une instance alors que le service est en cours d'exécution, et si vous voyez ensuite dans le journal des événements des erreurs pour l'application que vous avez supprimée, le redémarrage du service devrait arrêter l'apparition de ces erreurs.

Pour plus d'informations, consultez Démarrage et arrêt d'instances de Notification Services.

Dépannage de la collecte des événements

Je ne parviens pas à envoyer des événements à une application

Lors du dépannage de la collecte des événements, vérifiez les points suivants :

  • Si vous utilisez un fournisseur d'événements hébergé, vérifiez que le moteur de Notification Services qui exécute le fournisseur d'événements est en cours d'exécution.
  • Assurez-vous que la collecte des événements est activée. Vous pouvez rapidement afficher l'état des composants d'instance en exécutant la commande nscontrol status. Si des événements ont l'état Désactivé ou Activer la mise en attente, vous ne serez pas en mesure de les envoyer.
    Pour plus d'informations sur l'affichage de l'état, consultez Affichage de l'état des instances, des applications et des composants.
    Pour plus d'informations sur l'activation et le désactivation de composants, consultez Activation et désactivation d'instances, d'applications ou de composants.
  • Vérifiez que le compte utilisé pour exécuter le fournisseur d'événements possède les autorisations NSEventProvider dans les bases de données d'instance et d'application.

Le fournisseur d'événements FileSystemWatcher a échoué

Le fournisseur d'événements FileSystemWatcher peut échouer si les compteurs de performances du serveur ont été détériorés. Si vous recevez l'erreur ci-dessous dans le journal des événements, il est probable qu'un compteur de performances soit détérioré :

ID d'événement : 2980

Si un compteur de performances est détérioré, ce compteur ne renvoie pas de valeurs. Pour tenter de corriger cette détérioration, procédez ainsi :

  1. Si l'instance est en cours d'exécution, arrêtez-la. Pour plus d'informations, consultez Démarrage et arrêt d'instances de Notification Services.
  2. Fermez toutes les applications qui interrogent les compteurs de performances Notification Services, comme le Moniteur système.
  3. Réinscrivez l'instance. Pour plus d'informations, consultez Mise à jour des informations du Registre.

Ceci recrée les compteurs de performances de l'instance. Peut-être devrez-vous recommencer cette procédure plusieurs fois.

Dépannage de la génération et de la remise des notifications

Des notifications dupliquées sont générées

Si les abonnés reçoivent des notifications dupliquées, vérifiez la façon dont vous collectez et utilisez les événements :

  • Vérifiez que vos règles de création de notifications n'accèdent pas directement à la table de notifications, alors qu'elles devraient accéder à une vue nommée en fonction de la classe de notification. La vue renvoie uniquement le jeu d'événements actuel, tandis que la table de notifications contient tous les événements qui n'ont pas été supprimés par le ramasse-miettes.
    Par exemple si StockEvent est le nom d'une classe d'événement, utilisez la vue StockEvent dans votre règle d'abonnement, et non la table NSStockEventEvents.
  • Si vous obtenez les événements d'une autre source tels qu'une chronique d'événements ou une table externe, votre requête doit contenir la logique pour sélectionner uniquement les données que vous voulez utiliser pour créer les notifications. Vous pouvez par exemple inclure les événements envoyés dans les dernières 24 heures ou ceux qui possèdent une valeur spécifique dans une colonne. Les instructions dans vos règles d'abonnement peuvent modifier des valeurs dans la source d'événements pour vous permettre de suivre l'utilisation des événements.
  • Vérifiez que vous n'envoyez pas plusieurs fois les mêmes données d'événements.

Pour plus d'informations sur les règles d'abonnement, consultez Définition de règles d'abonnement.

Des notifications ne sont pas générées ou ne sont pas remises

Si des notifications ne sont pas envoyées par votre application, vérifiez les points suivants :

  • Le moteur de Notification Services qui exécute le composant de générateur est-il en cours d'exécution ? Est-il activé ?
  • Y a-t-il des événements disponibles ?
    Exécutez la procédure stockée NSDiagnosticEventClass dans la base de données d'instance. Regardez dans la colonne EventBatchesCollectedCount si des événements sont arrivés au moment où vous en attendiez.
  • Y-a-t-il des abonnements ?
    Utilisez la vue NSSubscriptionClassNameView dans la base de données d'application pour vérifier si l'application a des abonnements à évaluer.
  • Les abonnements planifiés sont-ils correctement planifiés ?
    Utilisez la vue NSSubscriptionClassNameView dans la base de données d'application ou exécutez les procédures stockées NSScheduledSubscriptionList et NSScheduledSubscriptionDetails dans la base de données d'application pour afficher les détails des abonnements.
  • Les périphériques d'abonnés auxquels font référence les notifications existent-ils ?
    Dans vos règles d'abonnement, vous devez fournir un ID d'abonné et un nom de périphérique d'abonné. Le nom de périphérique d'abonné doit correspondre au nom d'un périphérique d'abonné défini pour l'abonné. Pour afficher les périphériques d'abonné, utilisez NSSubscriberDeviceView dans la base de données d'instance.
  • Les règles expirent-elles ?
    Si le délai des règles d'abonnement qui génèrent les notifications expire, votre application ne générera pas de notifications. Vérifiez que vos règles sont efficaces, que les index définis sur les données d'événements et d'abonnement sont corrects, que le ramasse-miettes est en cours d'exécution pour supprimer les anciennes données et que les règles ne sont pas bloquées par d'autres processus s'exécutant sur le serveur. Pour plus d'informations sur le développement des règles d'abonnement, consultez Définition de règles d'abonnement.
  • Les notifications sont-elles générées ?
    Exécutez la procédure stockée NSDiagnosticNotificationClass dans la base de données d'instance pour vérifier que les notifications sont générées. Regardez dans la colonne NotificationsGenerated quel est la fréquence de génération des notifications que vous avez prévue. S'il n'y a pas de notifications, il se peut qu'il n'y ait pas d'événements ou pas d'abonnements, ou que les règles de correspondance de la classe d'abonnements n'insèrent pas de notifications dans la fonction de classe de notification. Pour plus d'informations sur les règles, consultez Définition de règles d'abonnement.
  • Y-a-t-il des notifications qui échouent ?
    Exécutez la procédure stockée NSDiagnosticFailedNotifications pour vérifier si des notifications ont échoué.
  • Les notifications vont-elles vers le bon canal de remise ?
    Vérifiez que l'application définit les bons protocoles pour la classe de notification et que les abonnements ajoutés à votre application utilisent le bon canal de remise.
  • Vos canaux de remise sont-ils en état de fonctionner ?
    Exécutez le rapport NSDiagnosticDeliveryChannel pour voir si les canaux de remise fonctionnent.
  • Vos distributeurs sont-ils activés ?
    Pour plus d'informations sur l'activation et le désactivation de composants, consultez Activation et désactivation d'instances, d'applications ou de composants.

Des erreurs de livraison génériques se produisent

Certaines erreurs de livraison peuvent être en réalité des erreurs de configuration. Si par exemple vous configurez de façon incorrecte un canal de remise SMTP, lorsque Notification Services essaiera de livrer une notification par ce canal, vous recevrez peut-être un message de ce type :

Erreur générique de livraison de notification SMTP

Si vous obtenez plusieurs erreurs de ce type, vérifiez que vos canaux de remise sont correctement configurés. Pour plus d'informations, consultez Définition des canaux de remise.

La remise SMTP a échoué

Lorsqu'il utilise le protocole SMTP IIS (Internet Information Services), Notification Services doit consulter un répertoire IIS pour déterminer où livrer les notifications. Seuls les administrateurs peuvent accéder à ces informations.

Afin d'utiliser le service SMTP IIS local, le compte utilisé pour exécuter le composant de moteur du distributeur doit être membre du groupe Administrateurs local.

Le délai d'attente du distributeur expire

Si vous recevez diverses erreurs d'expiration de délai dans le journal des événements, le niveau de journalisation du distributeur est probablement trop élevé. Ceci se produit en général lorsque le système de bases de données traite de gros volumes de notifications, et ne peut pas gérer à la fois la distribution et les tâches de journalisation.

Pour résoudre le problème, désactivez la journalisation. Pour plus d'informations, consultez Spécification des paramètres d'exécution d'un protocole de remise.

Dépannage du ramasse-miettes

Les données ne sont pas supprimées, ce qui aboutit à des tables d'événements et de notifications volumineuses

Si les données ne sont pas supprimées de votre base de données d'application comme prévu, vérifiez les points suivants :

  • Votre définition d'application fournit-elle une planification du ramasse-miettes ? Pour plus d'informations, consultez Configuration de la suppression de données.
  • Avez vous spécifié une période de conservation raisonnable ? (Plus la période de conservation est longue, plus les données s'accumulent dans vos tables).
  • Le ramasse-miettes s'exécute-t-il pendant un période de faible activité du système ? Si ce n'est pas le cas, le ramasse-miettes ne dispose peut-être pas des ressources système nécessaires pour supprimer efficacement les données.
    Notez que l'heure de début est une valeur UTC. Par exemple, si vous spécifiez la valeur 02:00:00 comme heure de début, cela correspond à 02:00 heure GMT. Pour spécifier une heure de 02:00 dans votre fuseau horaire, ajoutez ou soustrayez la différence entre votre fuseau horaire et l'heure GMT. Par exemple l'heure du Pacifique correspond à 8 heures de moins que l'heure GMT. Pour exécuter le ramasse-miettes à 02:00 heure du Pacifique, spécifiez une heure de début de 10:00:00.
  • La durée de ramasse-miettes est-elle adéquate ? Selon le volume de données, il peut être nécessaire d'exécuter le ramasse-miettes pendant des périodes plus longues.

Pour évaluer les performances du ramasse-miettes, utilisez les ressources suivantes :

  • Exécutez la procédure stockée NSSnapshotApplications pour déterminer quand la dernière exécution du ramasse-miettes s'est produite et le nombre d'événements et de notifications qui ont été supprimés. Pour plus d'informations, consultez NSSnapshotApplications (Transact-SQL).
  • Surveillez l'objet de performance NS$instanceName: Vacuumer à l'aide de l'analyseur de performances de Windows. Pour plus d'informations, consultez Objet NS$instance_name: Vacuumer.

Dépannage des applications Web

Mon application de gestion d'abonnements ne peut pas accéder à l'instance de Notification Services

Votre application de gestion d'abonnements doit être en mesure de trouver et d'accéder aux bases de données d'instance et d'application. Cela suppose que l'instance soit inscrite sur le serveur sur lequel l'application est exécutée, et que le compte utilisé par l'application soit ajouté au rôle NSSubscriberAdmin dans les bases de données d'instance et d'application. Pour plus d'informations, consultez Déploiement d'une interface de gestion d'abonnement.

Voir aussi

Tâches

Forum aux questions sur Notification Services
Configuration de la journalisation des événements Notification Services
Utilisation des messages d'événements

Aide et Informations

Assistance sur SQL Server 2005