Freigeben über


Grundlegendes zu Abfragebenachrichtigungen

Das Abfragebenachrichtigungen zugrunde liegende Konzept besagt, dass die Anwendung so lange zwischengespeicherte Daten verwenden kann, bis eine Benachrichtigungsmeldung ankommt. Wenn SQL Server nicht mehr sicherstellen kann, dass die zwischengespeicherten Daten zuverlässig sind, sendet SQL Server eine Benachrichtigungsmeldung. SQL Server sendet eine Abfragebenachrichtigung für ein Abonnement, wenn eines der folgenden Ereignisse auftritt:

  • In den Abfrageergebnissen enthaltene Zeilen haben sich möglicherweise geändert.

  • Das Abonnement läuft ab.

  • Der Server wird neu gestartet.

  • Das Abonnement für die Abfragebenachrichtigung konnte nicht erstellt werden (die SELECT-Anweisung entspricht z. B. nicht den unter Erstellen einer Abfrage für die Benachrichtigung angegebenen Anforderungen).

  • Der Server ist stark belastet.

  • Objekte, von denen das Abonnement abhängt, wurden gelöscht oder geändert.

Beachten Sie, dass SQL Server eine Abfragebenachrichtigung als Antwort auf Ereignisse erzeugen kann, die die Daten nicht verändern, oder als Antwort auf eine Änderung, die sich nicht wirklich auf die Ergebnisse der Abfrage auswirkt. Wenn z. B. eine UPDATE-Anweisung eine der von der Abfrage zurückgegebenen Zeilen ändert, kann die Benachrichtigung auch dann ausgelöst werden, wenn die Aktualisierung der Zeile die Spalten in den Abfrageergebnissen nicht geändert hat. Abfragebenachrichtigungen dienen der Leistungsverbesserung für Anwendungen, die Daten zwischenspeichern. Wenn der Server sehr stark belastet ist, kann SQL Server für das Abonnement eine Abfragebenachrichtigungsmeldung erzeugen, statt zu ermitteln, ob sich die Ergebnisse der Abfrage geändert haben.

Das Benachrichtigungsabonnement erfolgt, bevor Database Engine (Datenbankmodul) die einzelnen in der Abonnementanforderung enthaltenen Anweisungen ausführt. Wenn der Befehl sowohl eine Abfrage als auch eine Anweisung enthält, die die von der Abfrage zurückgegebenen Daten verändert, kann die Anwendung daher eine Benachrichtigungsmeldung erhalten, bevor der Befehl, der die Benachrichtigungsanforderung enthält, abgeschlossen ist.

Jedes Abonnement besitzt eine Mindestgültigkeitsdauer. Nach Ablauf der Mindestgültigkeitsdauer entfernt SQL Server das Abonnement und erstellt eine Benachrichtigungsmeldung. Die Meldung informiert die Anwendung darüber, dass die Benachrichtigung nicht mehr aktiv ist und dass SQL Server keine Änderungen der Abfrage mehr verfolgt.

Wenn SQL Server startet, erstellt der Server für alle in der Datenbank enthaltenen Abfragebenachrichtigungsabonnements automatisch Abfragebenachrichtigungsmeldungen. Dadurch können Anwendungen zwischengespeicherte Daten sofort aktualisieren, und SQL Server kann starten, ohne die in allen Benachrichtigungen enthaltenen Abfragen zu verarbeiten. Wenn Sie eine Datenbank löschen, erzeugt Database Engine (Datenbankmodul) für alle in der Datenbank registrierten Abonnements Abfragebenachrichtigungsmeldungen.

Wenn eine Benachrichtigungsabonnementanforderung mit einer Abfrage gesendet wird, die die Anforderungen für Abfragebenachrichtigungen nicht erfüllt, erzeugt die Datenbank sofort eine Abfragebenachrichtigungsmeldung. Diese Nachricht informiert die Anwendung darüber, dass die Abfrage die Anforderungen für ein Abonnement nicht erfüllt. Da SQL Server Änderungen der Abfrage nicht nachverfolgen kann, muss die Anwendung die Ergebnisse einer Abfrage darüber hinaus sofort als veraltet einstufen.

HinweisHinweis

Ein durch ein Abhängigkeitsobjekt (wie SqlDependency in ADO.NET) verwaltetes Abfragebenachrichtigungsabonnement erzeugt kein Ereignis, wenn zwischen der Anwendung und der Datenbank ein Verbindungsfehler auftritt. Wenn die Anwendung die Datenbank jedoch wieder erreichen kann, erhält die Anwendung sofort alle Benachrichtigungen, die erzeugt wurden, während die Datenbank nicht erreichbar war.

Wenn ein Befehl eine Benachrichtigungsmeldung erzeugt, findet der Prozess des Erstellens und Sendens der Nachricht innerhalb der die Nachricht erzeugenden Transaktion als Teil der Anweisung statt. Wenn Database Engine (Datenbankmodul) die Benachrichtigungsmeldung nicht erfolgreich erstellen und senden kann, verläuft der Befehl fehlerhaft, was im SQL Server-Fehlerprotokoll verzeichnet wird. Beachten Sie, dass Database Engine (Datenbankmodul) das Benachrichtigungsabonnement entfernt, wenn die Benachrichtigungsmeldung erzeugt ist. Dies geschieht unabhängig davon, ob Database Engine (Datenbankmodul) die Benachrichtigungsmeldung erfolgreich erzeugen kann.

HinweisHinweis

Abonnements werden entfernt, ohne eine Benachrichtigungsmeldung zu erzeugen, wenn das Datenbankbenutzerkonto, von dem das Abonnement erstellt wurde, gelöscht oder deaktiviert wird, wenn die Datenbank, die das Abonnement enthält, angefügt wird oder wenn KILL QUERY NOTIFICATION SUBSCRIPTION zum Entfernen des Abonnements verwendet wird.