Abfragebenachrichtigungen – sys.dm_qn_subscriptions
Gilt für: SQL Server
Gibt Informationen zu den aktiven Abfragebenachrichtigungsabonnements auf dem Server zurück. Diese Sicht können Sie verwenden, um in der Serverdatenbank oder in einer angegebenen Datenbank eine Überprüfung auf aktive Abonnements vorzunehmen oder um auf eine Überprüfung auf einen angegebenen Serverprinzipal vorzunehmen.
Spaltenname | Datentyp | BESCHREIBUNG |
---|---|---|
id | int | ID eines Abonnements. |
database_id | int | ID der Datenbank, für die die Abfragebenachrichtigung ausgeführt wurde. In dieser Datenbank sind die mit diesem Abonnement verbundenen Informationen gespeichert. |
sid | varbinary(85) | Sicherheits-ID des Serverprinzipals, der dieses Abonnement erstellt hat und besitzt. |
object_id | int | ID der internen Tabelle, in der die Informationen zu Abonnementparametern gespeichert sind. |
created | datetime | Datum und Uhrzeit des Zeitpunktes, an dem das Abonnement erstellt wurde. |
timeout | int | Timeout für das Abonnement in Sekunden. Die Benachrichtigung wird ausgelöst, nachdem diese Zeit verstrichen ist. Hinweis: Die tatsächliche Schießzeit kann größer als der angegebene Timeout sein. Wenn jedoch eine Änderung, die das Abonnement ungültig macht, nach dem angegebenen Timeout auftritt, aber bevor das Abonnement ausgelöst wird, stellt SQL Server sicher, dass das Auslösen zum Zeitpunkt der Änderung erfolgt. |
status | int | Gibt den Status des Abonnements an. Die Liste der Codes finden Sie in der Tabelle unter den Hinweisen. |
Kardinalität der Beziehungen
From | Beschreibung | Ein | type |
---|---|---|---|
sys.dm_qn_subscriptions | sys.databases | database_id | Viele-zu-eins |
sys.dm_qn_subscriptions | sys.internal_tables | object_id | Viele-zu-eins |
Hinweise
Der Statuscode 0 gibt einen nicht definierten Status an.
Die folgenden Statuscodes geben an, dass ein Abonnement aufgrund einer Änderung ausgelöst wurde:
Code | Untergeordneter Status | Info |
---|---|---|
65798 | Abonnement wurde ausgelöst, da sich Daten geändert haben. | Abonnement wurde durch eine Einfügung ausgelöst. |
65799 | Abonnement wurde ausgelöst, da sich Daten geändert haben. | Löschen |
65800 | Abonnement wurde ausgelöst, da sich Daten geändert haben. | Aktualisieren |
65801 | Abonnement wurde ausgelöst, da sich Daten geändert haben. | Merge |
65802 | Abonnement wurde ausgelöst, da sich Daten geändert haben. | Tabelle abschneiden |
66048 | Abonnement wurde ausgelöst, da das Timeout abgelaufen ist. | Nicht definierter Infomodus |
66315 | Abonnement wurde ausgelöst, da sich ein Objekt geändert hat. | Objekt oder Benutzer wurde gelöscht. |
66316 | Abonnement wurde ausgelöst, da sich ein Objekt geändert hat. | Objekt wurde geändert. |
66565 | Abonnement wurde ausgelöst, da eine Datenbank getrennt oder gelöscht wurde. | Server oder Datenbank wurde neu gestartet. |
66571 | Abonnement wurde ausgelöst, da eine Datenbank getrennt oder gelöscht wurde. | Objekt oder Benutzer wurde gelöscht. |
66572 | Abonnement wurde ausgelöst, da eine Datenbank getrennt oder gelöscht wurde. | Objekt wurde geändert. |
67341 | Abonnement wurde aufgrund von Ressourcenmangel auf dem Server ausgelöst. | Abonnement wurde aufgrund von Ressourcenmangel auf dem Server ausgelöst. |
Die folgenden Statuscodes geben an, dass ein Abonnement nicht erstellt wurde:
Code | Untergeordneter Status | Info |
---|---|---|
132609 | Abonnement konnte nicht erstellt werden, weil die Anweisung nicht unterstützt wird. | Abfrage ist zu komplex. |
132610 | Abonnement konnte nicht erstellt werden, weil die Anweisung nicht unterstützt wird. | Ungültige Anweisung für Abonnement. |
132611 | Abonnement konnte nicht erstellt werden, weil die Anweisung nicht unterstützt wird. | Ungültige festgelegte Optionen für das Abonnement. |
132612 | Abonnement konnte nicht erstellt werden, weil die Anweisung nicht unterstützt wird. | Ungültige Isolationsstufe |
132622 | Abonnement konnte nicht erstellt werden, weil die Anweisung nicht unterstützt wird. | Wird intern verwendet. |
132623 | Abonnement konnte nicht erstellt werden, weil die Anweisung nicht unterstützt wird. | Überschreitet den Vorlagengrenzwert pro Tabelle. |
Die folgenden Statuscodes werden intern verwendet und als Check Kill- und Init-Modi klassifiziert:
Code | Untergeordneter Status | Info |
---|---|---|
198656 | Intern verwendet: Check Kill- und Init-Modus | Nicht definierter Infomodus |
198928 | Abonnement wurde zerstört. | Abonnement wurde ausgelöst, da eine Datenbank angefügt wurde. |
198929 | Abonnement wurde zerstört. | Abonnement wurde ausgelöst, da ein Benutzer gelöscht wurde. |
198930 | Abonnement wurde zerstört. | Abonnement wurde aufgrund eines erneuten Abonnements gelöscht. |
198931 | Abonnement wurde zerstört. | Abonnement wurde abgebrochen. |
199168 | Abonnement ist aktiv. | Nicht definierter Infomodus |
199424 | Abonnement wurde initialisiert, ist aber noch nicht aktiv. | Nicht definierter Infomodus |
Berechtigungen
Erfordert die VIEW SERVER STATE-Berechtigung auf dem Server.
Hinweis
Falls der Benutzer die VIEW SERVER STATE-Berechtigung nicht besitzt, gibt diese Sicht Informationen zu Abonnements zurück, die sich im Besitz des aktuellen Benutzers befinden.
Berechtigungen für SQL Server 2022 und höher
Erfordert die VIEW SERVER PERFORMANCE STATE-Berechtigung auf dem Server.
Beispiele
A. Zurückgeben von aktiven Abfragebenachrichtigungsabonnements für den aktuellen Benutzer
Im folgenden Beispiel werden die aktiven Abfragebenachrichtigungsabonnements des aktuellen Benutzers zurückgegeben. Wenn der Benutzer über VIEW SERVER STATE-Berechtigungen verfügt, werden alle aktiven Abonnements auf dem Server zurückgegeben.
SELECT id, database_id, sid, object_id, created, timeout, status
FROM sys.dm_qn_subscriptions;
GO
B. Zurückgeben von aktiven Abfragebenachrichtigungsabonnements für einen angegebenen Benutzer
Im folgenden Beispiel werden die aktiven Abfragebenachrichtigungsabonnements zurückgegeben, die vom Anmeldenamen Ruth0
abonniert wurden.
SELECT id, database_id, sid, object_id, created, timeout, status
FROM sys.dm_qn_subscriptions
WHERE sid = SUSER_SID('Ruth0');
GO
C. Zurückgeben von internen Tabellenmetadaten für Abfragebenachrichtigungsabonnements
Im folgenden Beispiel werden die Metadaten interner Tabellen für Abfragebenachrichtigungsabonnements zurückgegeben.
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
Weitere Informationen
Dynamische Verwaltungssichten und Funktionen (Transact-SQL)
Abfragebenachrichtigungen im Zusammenhang mit dynamischen Verwaltungsansichten (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)