Problembehandlung bei gespeicherten Aktivierungsprozeduren

Gespeicherte Aktivierungsprozeduren werden in einer Hintergrundsitzung ausgeführt. Deshalb unterscheiden sich die Techniken der Problembehandlung bei gespeicherten Aktivierungsprozeduren ein wenig von denen der Problembehandlung von gespeicherten Prozeduren, die Teil einer interaktiven Sitzung sind.

Technik: Analysieren der Service Broker-Konfiguration

Wenn gespeicherte Aktivierungsprozeduren nicht erfolgreich ausgeführt werden, suchen Sie mithilfe des Dienstprogramms ssbdiagnose nach Konfigurationsfehlern in den zugeordneten Diensten. Weitere Informationen finden Sie unter Hilfsprogramm 'ssbdiagnose'.

Technik: Anzeigen der Ausgabe von gespeicherten Aktivierungsprozeduren

Wenn die gespeicherte Aktivierungsprozedur zu falschen Ergebnissen führt oder nicht aus der Warteschlange liest, überprüfen Sie das SQL Server-Fehlerprotokoll auf Fehler und Meldungen, die Aufschluss über das Problem geben. Gespeicherte Aktivierungsprozeduren sind keiner Anwendung zugeordnet. Informationen, die normalerweise an die aufrufende Anwendung zurückgegeben werden, werden stattdessen im SQL Server-Fehlerprotokoll erfasst. Dazu zählen Fehler, Meldungen und die Ausgabe der PRINT-Anweisung und der RAISERROR-Anweisung.

Technik: Ausführen der gespeicherten Prozedur von einer interaktiven Sitzung

Zur Problembehandlung bei einer gespeicherten Aktivierungsprozedur können Sie die Aktivierung für die Warteschlange ausschalten und anschließend die gespeicherte Prozedur von SQL Server Management Studio oder im Dienstprogramm sqlcmd ausführen. Wenn Sie die gespeicherte Prozedur von einer interaktiven Sitzung ausführen, können Sie Fehler erkennen, die von der gespeicherten Prozedur zurückgegeben werden.

Allerdings werden möglicherweise andere Ergebnisse angezeigt, wenn in der interaktiven Sitzung ein anderer Sicherheitskontext und andere Datenbankeinstellungen verwendet werden als bei Aktivierung der gespeicherten Prozedur durch Database Engine (Datenbankmodul). Führen Sie vor dem Ausführen der Prozedur folgende Schritte aus:

  • Legen Sie mit EXECUTE AS den Benutzer für die interaktive Sitzung auf den für die Aktivierung angegebenen Benutzer fest.

  • Legen Sie die Optionen für die Sitzung auf die Datenbankstandards fest.

Weitere Informationen finden Sie unter Kontext der internen Aktivierung.

Symptom: Gespeicherte Aktivierungsprozeduren werden nicht ausgeführt

Dieses Symptom hat häufig folgende Ursachen:

  • Die Einstellungen für die Warteschlange wurden möglicherweise geändert. Verwenden Sie die Katalogsicht sys.service_queues, um die Einstellungen für die Warteschlange zu bestätigen. Stellen Sie sicher, dass die Aktivierung für die Warteschlange eingeschaltet ist und dass die Warteschlange die richtige gespeicherte Prozedur sowie den richtigen Sicherheitsprinzipal angibt. Vergewissern Sie sich, dass der Sicherheitsprinzipal über Ausführungsberechtigungen für die gespeicherte Prozedur verfügt.

  • Die gespeicherte Prozedur wird möglicherweise nicht gestartet oder sofort nach dem Start beendet. Überprüfen Sie in diesem Fall das SQL Server-Fehlerprotokoll nach Fehlern aus der gespeicherten Prozedur. Sie können die gespeicherte Prozedur auch von SQL Server Management Studio ausführen und die Ergebnisse überprüfen.

Symptom: Nachrichten bleiben in der Warteschlange

So stellen Sie sicher, dass die gespeicherten Aktivierungsprozeduren richtig gestartet wurden:

  • Überprüfen Sie die dynamische Verwaltungssicht sys.dm_broker_queue_monitors, um sicherzustellen, dass eine Warteschlangenüberwachung für die Warteschlange aktiviert ist. Andernfalls verwenden Sie die ALTER QUEUE-Anweisung, um die Aktivierung einzuschalten.

  • Der Status der Warteschlangenüberwachung für die Warteschlange sollte RECEIVES_OCCURRING sein. Befindet sich die Warteschlangenüberwachung nicht in diesem Status, überprüfen Sie die dynamische Verwaltungssicht sys.dm_broker_activated_tasks, um sicherzustellen, dass aktivierte Tasks für die Warteschlange aktuell ausgeführt werden. Wenn keine aktivierten Tasks vorhanden sind, treten Fehler bei der Aktivierung auf. Weitere Informationen finden Sie Abschnitt "Symptom: Gespeicherte Aktivierungsprozeduren werden nicht ausgeführt" weiter oben in diesem Thema.

Wenn aktivierte Tasks zwar ausgeführt werden, Nachrichten jedoch weiterhin in der Warteschlange bleiben, kann der Task nicht empfangen oder kein Commit für die Transaktionen ausführen. Überprüfen Sie das SQL Server-Fehlerprotokoll nach Fehlern aus der gespeicherten Prozedur. Das Beenden der Aktivierung und das manuelle Ausführen der gespeicherten Prozedur können bei der Problembehandlung hilfreich sein.