Problembehandlung bei Routing und Nachrichtenübermittlung
In diesem Abschnitt werden Vorschläge zum Beheben häufiger Symptome im Zusammenhang mit Routing und Nachrichtenübermittlung bereitgestellt.
Symptom: Nachrichten bleiben in der Übermittlungswarteschlange
Stellen Sie sicher, dass die Service Broker-Nachrichtenübermittlung in der Datenbank aktiviert ist. Die is_broker_enabled-Spalte von sys.databases zeigt, ob die Brokernachrichtenübermittlung aktiviert ist, wie im folgenden Beispiel dargestellt:
SELECT is_broker_enabled FROM sys.databases
WHERE database_id = DB_ID() ;
Die Brokernachrichtenübermittlung kann deaktiviert werden, um zu verhindern, dass Nachrichten der falschen Datenbank übermittelt werden. Weitere Informationen zur Service Broker-Nachrichtenübermittlung finden Sie unter Verwalten von Service Broker-Identitäten. Weitere Informationen zum Aktivieren der Service Broker-Nachrichtenübermittlung finden Sie unter Vorgehensweise: Aktivieren von Service Broker-Nachrichtenübermittlung in Datenbanken (Transact-SQL).
Wenn die Service Broker-Nachrichtenübermittlung aktiviert ist, überprüfen Sie die transmission_status-Spalte in der sys.transmission_queue-Katalogsicht auf die Nachrichten. Häufige Fehlermeldungen sind folgende:
Meldung | Beschreibung |
---|---|
Dem Zieldienstnamen für diese Konversation entspricht keine Route. |
Von Service Broker wurde keine Route zum angegebenen Dienst gefunden. |
Die Service Broker-Instanz des Ziels ist nicht erreichbar. |
Die Nachricht konnte von Service Broker nicht an den Ziel-Service Broker übermittelt werden. |
Transportebene ist nicht verfügbar. |
Es ist kein Service Broker-Endpunkt in der Instanz vorhanden, oder der Service Broker-Endpunkt wurde nicht erfolgreich gestartet. |
Zielwarteschlange ist deaktiviert. |
Die Warteschlange, die vom Zieldienst verwendet wird, weist den Status OFF auf. Einer Warteschlange mit dem Status OFF werden von Service Broker keine neuen Nachrichten hinzugefügt. |
Fehler beim Empfangen von Daten: '10054(Eine vorhandene Verbindung wurde vom Remotehost geschlossen.)'. |
Die Remoteseite der Konversation hat die TCP/IP-Verbindung angenommen, aber die Verbindung geschlossen, bevor eine Nachricht gesendet werden konnte. |
(Keine) |
Es wurde von Service Broker noch nicht versucht, die Nachricht zu senden. Dies kann darauf hinweisen, dass die Service Broker-Nachrichtenübermittlung in der Datenbank nicht aktiviert ist. |
Symptom: Route ist vorhanden, Übertragungsfehler besagt: Dem Zieldienstnamen für diese Konversation entspricht keine Route
Wenn die Route nach der Nachricht erstellt wurde, ist die häufigste Ursache für dieses Symptom, dass nach dem Erstellen der Route nicht erneut versucht wurde, die Nachricht zu übermitteln. Weitere Informationen zu erneuten Versuchen finden Sie unter Service Broker-Routing und -Netzwerk.
Überprüfen Sie, ob der in der Nachricht angegebene Dienstname genau mit dem in der Route angegebenen Dienstnamen übereinstimmt. Von Service Broker wird ein byteweiser binärer Vergleich für den Abgleich von Dienstnamen verwendet. Wenn eine Route vorhanden ist, in der der Dienstname angegeben ist, besteht eine Methode zum Überprüfen dieses Vergleichs darin, eine ähnliche Abfrage wie die folgende auszuführen:
SELECT N'No Exact Match' = tq.to_service_name
FROM sys.transmission_queue AS tq
WHERE NOT EXISTS
(SELECT remote_service_name
FROM sys.routes AS routes
WHERE tq.to_service_name = routes.remote_service_name) ;
Für die Dienstnamen im Resultset gibt es keine genaue Übereinstimmung in der Routingtabelle für die Datenbank. Beachten Sie, dass eine Route, in der kein Dienstname angegeben ist, mit jedem beliebigen Dienstnamen übereinstimmt. Weitere Informationen zum Routing finden Sie unter Service Broker-Routing.
Wenn in der Nachricht ein Brokerinstanzbezeichner angegeben ist, überprüfen Sie, ob durch die Route derselbe Brokerinstanzbezeichner oder kein Brokerinstanzbezeichner angegeben wird.
Überprüfen Sie, ob die Route abgelaufen ist. Die Lebensdauerspalte der sys.routes-Katalogsicht enthält Ablaufdatum und -zeit für die Route.
Symptom: Übertragungsfehler besagt, dass die Service Broker-Instanz des Ziels nicht erreichbar ist
Das Ziel hat die Nachricht nicht angenommen. Dies kann darauf hinweisen, dass der angegebene Dienstname nicht mit dem Namen eines Dienstes übereinstimmt, den die SQL Server-Zielinstanz hostet, oder dass das Ziel keine Route für den Dienst enthält. Überprüfen Sie zur Problembehandlung die Routing- und Dienstkonfiguration für das Ziel.
Symptom: Übertragungsfehler besagt, dass die Transportebene nicht verfügbar ist
Überprüfen Sie, ob ein Service Broker-Endpunkt vorhanden und der Status des Endpunkts STARTED ist. Erstellen Sie gegebenenfalls einen Endpunkt. Weitere Informationen zu Service Broker-Endpunkten finden Sie unter Service Broker-Endpunkte. Weitere Informationen zum Erstellen eines Endpunkts finden Sie unter Vorgehensweise: Aktivieren des Service Broker-Netzwerks (Transact-SQL).
Symptom: Übertragungsfehler besagt: Eine vorhandene Verbindung wurde vom Remotehost geschlossen
Die Transportsicherheit kann falsch konfiguriert sein, oder in der TCP/IP-Adresse für die Route ist ein Port angegeben, der von einem anderen Dienst als Service Broker verwendet wird. Beachten Sie, dass das Tabular Data Stream-Protokoll (TDS) von Service Broker nicht verwendet wird. Bei der Route muss der Port angeben sein, der dem vom Service Broker-Endpunkt auf der SQL Server-Remoteinstanz verwendeten Port entspricht.
Überprüfen Sie die Service Broker-Endpunktkonfiguration, um sicherzustellen, dass die beiden Instanzen kompatible Netzwerksicherheitseinstellungen aufweisen. Wenn vom Service Broker-Endpunkt für eine Instanz REQUIRED oder ENABLED angegeben wird, darf beim Service Broker-Endpunkt für die andere Instanz nicht NONE angegeben sein.
Überprüfen Sie Zertifikate, Benutzer und Berechtigungen auf die Service Broker-Transportsicherheit. Die Konfiguration für die Transportsicherheit wird im Thema Service Broker-Transportsicherheit erläutert.
Siehe auch
Aufgaben
Vorgehensweise: Aktivieren des Service Broker-Netzwerks (Transact-SQL)
Konzepte
Service Broker-Routing und -Netzwerk
Service Broker-Endpunkte
Service Broker-Routing
Starten und Beenden einer Warteschlange
Andere Ressourcen
sys.databases (Transact-SQL)
sys.transmission_queue (Transact-SQL)
sys.routes (Transact-SQL)
sys.service_broker_endpoints (Transact-SQL)