ALTER QUEUE (Transact-SQL)

 

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)neinAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse

Ändert die Eigenschaften einer Warteschlange.

Topic link icon Transact-SQL-Syntaxkonventionen

  
ALTER QUEUE <object>   
   queue_settings  
   | queue_action  
[ ; ]  
  
<object> : :=  
{  
    [ database_name. [ schema_name ] . | schema_name. ]  
        queue_name  
}   
  
<queue_settings> : :=  
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 } )  
         ]   
  
<queue_action> : :=  
   REBUILD [ WITH <query_rebuild_options> ]  
   | REORGANIZE [ WITH (LOB_COMPACTION = { ON | OFF } ) ]  
   | MOVE TO { file_group | "default" }  
  
<procedure> : :=  
{  
    [ database_name. [ schema_name ] . | schema_name. ]  
        stored_procedure_name  
}  
  
<queue_rebuild_options> : :=  
{  
   ( MAXDOP = max_degree_of_parallelism )  
}  
  

Database_name (Objekt)
Der Name der Datenbank, die die zu ändernde Warteschlange enthält. Wenn kein Database_name angegeben wird, wird standardmäßig auf die aktuelle Datenbank.

Schema_name (Objekt)
Der Name des Schemas, zu dem die neue Warteschlange gehört. Wenn kein Schema_name angegeben wird, wird standardmäßig das Standardschema für den aktuellen Benutzer.

Warteschlangenname
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 Ihnen, Nachrichten zu Überwachungszwecken beizubehalten, oder zum Ausführen von kompensierenden Transaktionen, wenn ein Fehler auftritt

System_CAPS_ICON_note.jpg Hinweis


Festlegen von RETENTION = ON kann die Leistung verringern. 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.

REBUILD [mit <queue_rebuild_options>]</queue_rebuild_options>

Gilt für: SQL Server 2016 bis SQL Server 2016.

Erstellt alle Indizes für die interne Warteschlange-Tabelle neu. Verwenden Sie diese Funktion, wenn Sie Fragmentierungsprobleme aufgrund von Überlastung auftreten. MAXDOP ist die einzige unterstützte Warteschlange rebuild-Option. Neuerstellung der Fall ist immer ein Offlinevorgang.

REORGANIZE [MIT (LOB_COMPACTION = {ON | OFF})]

Gilt für: SQL Server 2016 bis SQL Server 2016.

Organisieren Sie alle Indizes für die interne Warteschlange-Tabelle neu.
Im Gegensatz zu REORGANIZE auf Benutzertabellen REORGANIZE in einer Warteschlange als Offlinevorgang erfolgt immer da Ebene Seitensperren für Warteschlangen explizit deaktiviert werden.

System_CAPS_ICON_tip.jpg Tipp


Allgemeine Richtlinien zur Fragmentierung des Indexes wenn Fragmentierung 5 % bis 30 % ist, neu organisieren Sie den Index. Wenn Fragmentierung über 30 % liegt, erstellen Sie den Index neu. Allerdings sind diese Zahlen nur für allgemeine Anleitungen als Ausgangspunkt für Ihre Umgebung ein. Verwenden Sie zum Bestimmen des Betrag der Indexfragmentierung Sys. dm_db_index_physical_stats (Transact-SQL) -finden Sie unter Beispiel G in diesem Artikel Beispiele.

MOVE TO { File_group | "Default"}

Gilt für: SQL Server 2016 bis SQL Server 2016.

Verschiebt die Warteschlange für die interne Tabelle (mit seiner Indizes) zu einer vom Benutzer angegebenen Dateigruppe. Die neue Dateigruppe darf nicht schreibgeschützt sein.

PROCEDURE_NAME =<>>
Gibt den Namen der gespeicherten Prozedur an, die aktiviert werden soll, wenn die Warteschlange zu verarbeitende Nachrichten enthält. Dieser Wert muss ein SQL Server-Bezeichner sein.

Database_name (Vorgehensweise)
Der Name der Datenbank, die die gespeicherte Prozedur enthält.

Schema_name (Vorgehensweise)
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, die die Warteschlange gleichzeitig gestartet wird. Der Wert der 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"
Ist der Name des Benutzers, der als die gespeicherte Prozedur ausgeführt wird. USER_NAME muss ein gültiger SQL Server als angegebenen Benutzers eine SQL Server Bezeichner. Der aktuelle Benutzer benötigen die IMPERSONATE-Berechtigung für die User_name angegebenen.

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. Der Standardwert 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.

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.

Die Berechtigung zum Ändern einer Warteschlange wird standardmäßig dem Besitzer der Warteschlange, den Mitgliedern der festen Datenbankrollen db_ddladmin oder db_owner sowie Mitgliedern der festen Serverrolle sysadmin zugewiesen.

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) ;  

G. Das Neuerstellen von Indizes für Warteschlangen

Gilt für: SQL Server 2016 bis SQL Server 2016.

Im folgende Beispiel Warteschlange erstellt Indizes neu

ALTER QUEUE ExpenseQueue REBUILD WITH (MAXDOP = 2)   

H. Warteschlange Indizes neu organisieren

Gilt für: SQL Server 2016 bis SQL Server 2016.

Im folgende Beispiel neu Warteschlange Indizes organisiert werden.

ALTER QUEUE ExpenseQueue REORGANIZE   

I: Verschieben Warteschlange interne Tabelle in eine andere Dateigruppe

Gilt für: SQL Server 2016 bis SQL Server 2016.
ALTER QUEUE ExpenseQueue MOVE TO [NewFilegroup]   

Erstellen der Warteschlange (Transact-SQL)
Löschen der Warteschlange (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.dm_db_index_physical_stats (Transact-SQL)

Community-Beiträge

HINZUFÜGEN
Anzeigen: