ALTER QUEUE (Transact-SQL)
Ändert die Eigenschaften einer Warteschlange.
Transact-SQL-Syntaxkonventionen
Syntax
ALTER QUEUE <object> WITH
[ STATUS = { ON | OFF } [ , ] ]
[ RETENTION = { ON | OFF } [ , ] ]
[ ACTIVATION (
{ [ STATUS = { ON | OFF } [ , ] ]
[ PROCEDURE_NAME = <procedure> [ , ] ]
[ MAX_QUEUE_READERS = max_readers [ , ] ]
[ EXECUTE AS { SELF | 'user_name' | OWNER } ]
| DROP }
) [ , ]]
[ POISON_MESSAGE_HANDLING (
STATUS = { ON | OFF } )
]
[ ; ]
<object> ::=
{
[ database_name. [ schema_name ] . | schema_name. ]
queue_name
}
<procedure> ::=
{
[ database_name. [ schema_name ] . | schema_name. ]
stored_procedure_name
}
Argumente
database_name (Objekt)
Der Name der Datenbank, die die zu ändernde Warteschlange enthält. Wenn database_name nicht bereitgestellt wird, wird standardmäßig die aktuelle Datenbank verwendet.schema_name (object)
Der Name des Schemas, zu dem die neue Warteschlange gehört. Wenn schema_name nicht bereitgestellt wird, wird das Standardschema des aktuellen Benutzers verwendet.queue_name
Der Name der zu ändernden Warteschlange.STATUS (Warteschlange)
Gibt an, ob die Warteschlange verfügbar ist (ON) oder nicht (OFF). Ist die Warteschlange nicht verfügbar, können der Warteschlange keine Nachrichten hinzugefügt oder aus ihr entfernt werden.RETENTION
Gibt die Beibehaltungseinstellung für die Warteschlange an. Ist RETENTION = ON, werden alle Nachrichten, die für Konversationen mit dieser Warteschlange gesendet oder empfangen werden, in der Warteschlange beibehalten, bis die Konversationen beendet sind. Dies ermöglicht es Ihnen, Nachrichten zu Überwachungszwecken oder zur Ausführung von kompensierenden Transaktionen beim Auftreten eines Fehlers beizubehalten.Hinweis Das Festlegen von RETENTION = ON kann die Leistung reduzieren. Diese Einstellung sollte nur verwendet werden, wenn die Vereinbarung zum Servicelevel (SLA, Service Level Agreement) für die Anwendung eingehalten werden muss.
ACTIVATION
Gibt Informationen zur gespeicherten Prozedur an, die zum Verarbeiten von in dieser Warteschlange ankommenden Nachrichten aktiviert wird.STATUS (Aktivierung)
Gibt an, ob die gespeicherten Prozedur von der Warteschlange aktiviert wird. Ist STATUS = ON, startet die Warteschlange die mit PROCEDURE_NAME angegebene gespeicherte Prozedur, wenn die Anzahl der zurzeit ausgeführten Prozeduren kleiner als MAX_QUEUE_READERS ist und wenn Nachrichten schneller in der Warteschlange ankommen, als die gespeicherten Prozeduren Nachrichten empfangen. Ist STATUS = OFF, aktiviert die Warteschlange die gespeicherte Prozedur nicht.PROCEDURE_NAME = <Prozedur>
Gibt den Namen der gespeicherten Prozedur an, die aktiviert werden soll, wenn die Warteschlange zu verarbeitende Nachrichten enthält. Bei diesem Wert muss es sich um einen SQL Server-Bezeichner handeln.database_name (procedure)
Der Name der Datenbank, die die gespeicherte Prozedur enthält.schema_name (procedure)
Der Name des Schemas, das der Besitzer der gespeicherten Prozedur ist.stored_procedure_name
Der Name der gespeicherten Prozedur.MAX_QUEUE_READERS =max_reader
Gibt die maximale Anzahl von Instanzen der gespeicherten Aktivierungsprozedur an, die von der Warteschlange gleichzeitig gestartet werden. Der Wert von max_readers muss eine Zahl zwischen 0 und 32767 sein.EXECUTE AS
Gibt das SQL Server-Datenbank-Benutzerkonto an, unter dem die gespeicherte Aktivierungsprozedur ausgeführt wird. SQL Server muss zum Zeitpunkt der Aktivierung der gespeicherten Prozedur durch die Warteschlange die Berechtigungen für diesen Benutzer überprüfen können. Handelt es sich um einen Windows-Domänenbenutzer, muss SQL Server mit der Domäne verbunden sein und die Berechtigungen des angegebenen Benutzers überprüfen können, wenn die Prozedur aktiviert wird. Andernfalls erzeugt die Aktivierung einen Fehler. Bei einem SQL Server-Benutzer kann der Server immer die Berechtigungen überprüfen.SELF
Gibt an, dass die gespeicherte Prozedur als der aktuelle Benutzer ausgeführt wird. (Der Datenbankprinzipal, der diese ALTER QUEUE-Anweisung ausführt.)'user_name'
Der Name des Benutzers, als der die gespeicherte Prozedur ausgeführt wird. user_name muss ein gültiger SQL Server-Benutzer sein, der als SQL Server-Bezeichner angegeben ist. Der aktuelle Benutzer muss über die IMPERSONATE-Berechtigung für den mit user_name angegebenen Benutzer verfügen.OWNER
Gibt an, dass die gespeicherte Prozedur als der Besitzer der Warteschlange ausgeführt wird.DROP
Löscht alle der Warteschlange zugeordneten Aktivierungsinformationen.POISON_MESSAGE_HANDLING
Gibt an, ob die Behandlung nicht verarbeitbarer Nachrichten aktiviert ist. Die Standardeinstellung ist ON.Eine Warteschlange, für die die Behandlung nicht verarbeitbarer Nachrichten auf OFF festgelegt ist, wird erst nach fünf aufeinander folgenden Transaktionsrollbacks deaktiviert. Daher ist es möglich, dass von der Anwendung ein System für die Behandlung nicht verarbeitbarer Nachrichten definiert wird.
Hinweise
Wenn eine Warteschlange mit einer angegebenen gespeicherten Aktivierungsprozedur Nachrichten enthält, wird die gespeicherte Aktivierungsprozedur unmittelbar aktiviert, wenn der Aktivierungsstatus von OFF in ON geändert wird. Durch das Ändern des Aktivierungsstatus von ON zu OFF beendet der Broker das Aktivieren von Instanzen der gespeicherten Prozedur. Instanzen der gespeicherten Prozedur, die aktuell ausgeführt werden, werden jedoch nicht beendet.
Wird eine Warteschlange geändert, um eine gespeicherte Aktivierungsprozedur hinzuzufügen, wird dadurch der Aktivierungsstatus der Warteschlange nicht geändert. Wird die gespeicherte Aktivierungsprozedur für die Warteschlange geändert, hat dies keine Auswirkungen auf Instanzen der gespeicherten Aktivierungsprozedur, die aktuell ausgeführt werden.
Während des Aktivierungsprozesses überprüft Service Broker die maximale Anzahl von Warteschlangenlesevorgängen für eine Warteschlange. Wenn eine Warteschlange geändert wird, sodass die maximale Anzahl von Warteschlangenlesevorgängen erhöht wird, kann Service Broker daher sofort weitere Instanzen der gespeicherten Aktivierungsprozedur starten. Wird eine Warteschlange geändert, sodass die maximale Anzahl von Warteschlangenlesevorgängen verringert wird, hat dies auf die zurzeit ausgeführten Instanzen der gespeicherten Aktivierungsprozedur keine Auswirkungen. Service Broker startet jedoch erst dann eine neue Instanz der gespeicherten Prozedur, wenn die Anzahl von Instanzen für die gespeicherte Aktivierungsprozedur unter den konfigurierten Maximalwert fällt.
Ist eine Warteschlange nicht verfügbar, speichert Service Broker Nachrichten für Dienste, die die Warteschlange verwenden, in der Übertragungswarteschlange für die Datenbank. Die sys.transmission_queue-Katalogsicht stellt eine Sicht der Übertragungswarteschlange bereit.
Falls in einer RECEIVE-Anweisung oder einer GET CONVERSATION GROUP-Anweisung eine nicht verfügbare Warteschlange angegeben ist, tritt bei dieser Anweisung ein Transact-SQL-Fehler auf.
Berechtigungen
Die Berechtigung zum Ändern einer Warteschlange wird standardmäßig dem Besitzer der Warteschlange, den Mitgliedern der festen Datenbankrolle db_ddladmin oder db_owner und den Mitgliedern der festen Serverrolle sysadmin zugewiesen.
Beispiele
A.Festlegen, dass eine Warteschlange nicht verfügbar ist
Im folgenden Beispiel wird festgelegt, dass die ExpenseQueue-Warteschlange nicht für den Empfang von Nachrichten verfügbar ist.
ALTER QUEUE ExpenseQueue WITH STATUS = OFF ;
B.Ändern der gespeicherten Aktivierungsprozedur
Im folgenden Beispiel wird die von der Warteschlange gestartete gespeicherte Prozedur geändert. Die gespeicherte Prozedur wird als der Benutzer ausgeführt, der die ALTER QUEUE-Anweisung ausgeführt hat.
ALTER QUEUE ExpenseQueue
WITH ACTIVATION (
PROCEDURE_NAME = new_stored_proc,
EXECUTE AS SELF) ;
C.Ändern der Anzahl von Warteschlangenlesevorgängen
Im folgenden Beispiel wird die maximale Anzahl von Instanzen der gespeicherten Prozedur, die von Service Broker für diese Warteschlange gestartet werden, auf 7 festgelegt.
ALTER QUEUE ExpenseQueue WITH ACTIVATION (MAX_QUEUE_READERS = 7) ;
D.Ändern der gespeicherten Aktivierungsprozedur und des EXECUTE AS-Kontos
Im folgenden Beispiel wird die von Service Broker gestartete gespeicherte Prozedur geändert. Die gespeicherte Prozedur wird als der Benutzer SecurityAccount ausgeführt.
ALTER QUEUE ExpenseQueue
WITH ACTIVATION (
PROCEDURE_NAME = AdventureWorks2012.dbo.new_stored_proc ,
EXECUTE AS 'SecurityAccount') ;
E.Festlegen, dass Nachrichten in der Warteschlange aufbewahrt werden
Im folgenden Beispiel wird festgelegt, dass Nachrichten in der Warteschlange aufbewahrt werden. Die Warteschlange bewahrt alle Nachrichten auf, die von Diensten gesendet bzw. von diesen empfangen werden, die diese Warteschlange verwenden. Die Aufbewahrung endet, wenn die Konversation, in der die Nachrichten enthalten sind, beendet wurde.
ALTER QUEUE ExpenseQueue WITH RETENTION = ON ;
F.Entfernen der Aktivierung aus einer Warteschlange
Im folgenden Beispiel werden alle Aktivierungsinformationen aus der Warteschlange entfernt.
ALTER QUEUE ExpenseQueue WITH ACTIVATION (DROP) ;