ALTER QUEUE (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL Managed Instance

Verandert de eigenschappen van een wachtrij.

Transact-SQL syntaxis-conventies

Syntax

ALTER QUEUE <object>   
   queue_settings  
   | queue_action  
[ ; ]  
  
<object> : :=  
{ database_name.schema_name.queue_name | schema_name.queue_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.stored_procedure_name | schema_name.stored_procedure_name | stored_procedure_name }
  
<queue_rebuild_options> : :=  
{  
   ( MAXDOP = max_degree_of_parallelism )  
}  

Arguments

database_name (object)
Is de naam van de database die de wachtrij bevat die gewijzigd moet worden. Wanneer er geen database_name wordt gegeven, wordt deze standaard naar de huidige database gezet.

schema_name (object)
Is de naam van het schema waartoe de nieuwe wachtrij behoort. Wanneer er geen schema_name wordt gegeven, wordt dit standaard het standaardschema voor de huidige gebruiker.

queue_name
Is de naam van de wachtrij die veranderd moet worden?

STATUS (Wachtrij)
Geeft aan of de wachtrij beschikbaar is (AAN) of niet beschikbaar (UIT). Wanneer de wachtrij niet beschikbaar is, kunnen er geen berichten aan de wachtrij worden toegevoegd of uit de wachtrij worden verwijderd.

RETENTIE
Specificeert de retentie-instelling voor de wachtrij. Als RETENTION = AAN, worden alle berichten die zijn verzonden of ontvangen in gesprekken via deze wachtrij in de wachtrij behouden totdat de gesprekken zijn beëindigd. Dit stelt je in staat berichten te bewaren voor auditdoeleinden, of om compensatietransacties uit te voeren als er een fout optreedt.

Note

Het instellen van RETENTION = ON kan de prestaties verminderen. Deze instelling mag alleen worden gebruikt als het vereist is om aan de service level agreement voor de applicatie te voldoen.

ACTIVATION
Specificeert informatie over de opgeslagen procedure die wordt geactiveerd om berichten te verwerken die in deze wachtrij binnenkomen.

STATUS (Activatie)
Specificeert of de wachtrij de opgeslagen procedure activeert. Wanneer STATUS = ON, start de wachtrij de opgeslagen procedure gespecificeerd met PROCEDURE_NAME wanneer het aantal lopende procedures kleiner is dan MAX_QUEUE_READERS en wanneer berichten sneller in de wachtrij aankomen dan de opgeslagen procedures berichten ontvangen. Wanneer STATUS = UIT, activeert de wachtrij de opgeslagen procedure niet.

HERBOUW [ MET <queue_rebuild_options> ]
Van toepassing op: SQL Server 2016 (13.x) en hoger.

Bouwt alle indexen op de interne tabel van de wachtrij opnieuw op. Gebruik deze mogelijkheid wanneer je fragmentatieproblemen ondervindt door hoge belasting. MAXDOP is de enige ondersteunde optie voor het herbouwen van de wachtrij. REBUILD is altijd een offline operatie.

REORGANISEER [ MET ( LOB_COMPACTION = { ON | UIT } ) ]
Van toepassing op: SQL Server 2016 (13.x) en hoger.

Reorganiseer alle indexen in de interne tabel van de wachtrij.
In tegenstelling tot REORGANIZE op gebruikerstabellen wordt REORGANIZE in een wachtrij altijd uitgevoerd als een offline operatie omdat paginaniveau-locks expliciet zijn uitgeschakeld in wachtrijen.

Tip

Voor algemene richtlijnen met betrekking tot indexfragmentatie, wanneer fragmentatie tussen 5% en 30%ligt, herstructureer je de index. Wanneer fragmentatie boven de 30%ligt, bouw de index opnieuw op. Deze cijfers zijn echter alleen bedoeld als algemene richtlijn als uitgangspunt voor je omgeving. Om de mate van indexfragmentatie te bepalen, gebruik sys.dm_db_index_physical_stats (Transact-SQL) - zie voorbeeld G in dat artikel voor voorbeelden.

VERPLAATSEN NAAR { file_group | "default" }
Van toepassing op: SQL Server 2016 (13.x) en hoger.

Verplaatst de interne tabel van de wachtrij (met zijn indexen) naar een door de gebruiker opgegeven bestandsgroep. De nieuwe bestandsgroep mag niet alleen-lezen zijn.

PROCEDURE_NAME = <procedure>
Specificeert de naam van de opgeslagen procedure die geactiveerd moet worden wanneer de wachtrij berichten bevat die verwerkt moeten worden. Deze waarde moet een SQL Server-identificatie zijn.

database_name (procedure)
Is de naam van de database die de opgeslagen procedure bevat.

schema_name (procedure)
Is de naam van het schema dat eigenaar is van de opgeslagen procedure.

stored_procedure_name
Is de naam van de opgeslagen procedure.

MAX_QUEUE_READERS =max_reader
Geeft het maximale aantal instanties van de activatie-opgeslagen procedure aan dat de wachtrij gelijktijdig start. De waarde van max_readers moet een getal zijn tussen 0 en 32767.

EXECUTE AS
Specificeert het SQL Server-databasegebruikersaccount waaronder de activatie-opgeslagen procedure wordt uitgevoerd. SQL Server moet in staat zijn de rechten van deze gebruiker te controleren op het moment dat de wachtrij de opgeslagen procedure activeert. Voor gebruikers van het Windows-domein moet de SQL Server verbonden zijn met het domein en in staat zijn de rechten van de opgegeven gebruiker te valideren wanneer de procedure wordt geactiveerd of de activatie mislukt. Voor een SQL Server-gebruiker kan de server altijd de rechten controleren.

ZELF
Geeft aan dat de opgeslagen procedure wordt uitgevoerd als de huidige gebruiker. (De databaseprincipal voert deze ALTER QUEUE instructie uit.)

'user_name'
Is de naam van de gebruiker waarmee de opgeslagen procedure wordt uitgevoerd. user_name moet een geldige SQL Server gebruiker zijn gespecificeerd als een SQL Server-identificatie. De huidige gebruiker moet IMPERSONATE-toestemming hebben voor de user_name die wordt gespecificeerd.

EIGENAAR
Specificeert dat de opgeslagen procedure wordt uitgevoerd als eigenaar van de wachtrij.

DROP
Verwijdert alle activatie-informatie die aan de wachtrij hoort.

POISON_MESSAGE_HANDLING
Geeft aan of gifberichtbehandeling is ingeschakeld. De standaardwaarde is AAN.

Een wachtrij met gifberichten op UIT wordt niet uitgeschakeld na vijf opeenvolgende transactie-terugrollen. Dit maakt het mogelijk om een aangepast gifbericht-handingsysteem door de applicatie te definiëren.

Remarks

Wanneer een wachtrij met een gespecificeerde activatie-opgeslagen procedure berichten bevat, activeert het wijzigen van de activatiestatus van UIT naar AAN onmiddellijk de activatie-opgeslagen procedure. Het wijzigen van de activatiestatus van AAN naar UIT voorkomt dat de broker instanties van de opgeslagen procedure activeert, maar stopt niet de instanties van de opgeslagen procedure die momenteel draaien.

Het wijzigen van een wachtrij om een activatie-opgeslagen procedure toe te voegen, verandert de activatiestatus van de wachtrij niet. Het wijzigen van de activatie-opgeslagen procedure voor de wachtrij beïnvloedt geen instanties van de activatie-opgeslagen procedure die momenteel draaien.

Service Broker controleert het maximale aantal wachtrijlezers voor een wachtrij als onderdeel van het activatieproces. Daarom stelt het aanpassen van een wachtrij om het maximale aantal wachtrijlezers te verhogen Service Broker in staat om direct meer instanties van de opgeslagen activatieprocedure te starten. Het aanpassen van een wachtrij om het maximale aantal wachtrijlezers te verminderen, beïnvloedt geen instanties van de activatieopgeslagen procedure die momenteel draaien. Service Broker start echter pas een nieuwe instantie van de opgeslagen procedure als het aantal instanties voor de activatie-opgeslagen procedure onder het geconfigureerde maximale aantal ligt.

Wanneer een wachtrij niet beschikbaar is, houdt Service Broker berichten vast voor diensten die de wachtrij in de transmissiewachtrij voor de database gebruiken. De catalogusweergave van sys.transmission_queue geeft een overzicht van de transmissiewachtrij.

Als een RECEIVE instructie of een GET CONVERSATION GROUP instructie een niet-beschikbare wachtrij specificeert, faalt die instructie met een Transact-SQL fout.

Permissions

De toestemming voor het wijzigen van een wachtrij is standaard voor de eigenaar van de wachtrij, leden van de db_ddladmin of db_owner vaste databaserollen, en leden van de sysadmin vaste serverrol.

Examples

A. Een wachtrij onbeschikbaar maken

Het volgende voorbeeld maakt de ExpenseQueue wachtrij onbeschikbaar om berichten te ontvangen.

ALTER QUEUE ExpenseQueue WITH STATUS = OFF ;  

B. De activatie-opgeslagen procedure wijzigen

Het volgende voorbeeld verandert de opgeslagen procedure die de wachtrij start. De opgeslagen procedure wordt uitgevoerd als de gebruiker die de ALTER QUEUE instructie heeft uitgevoerd.

ALTER QUEUE ExpenseQueue  
    WITH ACTIVATION (  
        PROCEDURE_NAME = new_stored_proc,  
        EXECUTE AS SELF) ;  

C. Het aantal wachtrijlezers wijzigen

Het volgende voorbeeld stelt 7 het maximale aantal stored procedure-instanties in dat Service Broker voor deze wachtrij start.

ALTER QUEUE ExpenseQueue WITH ACTIVATION (MAX_QUEUE_READERS = 7) ;  

D. Het wijzigen van de activatie-opgeslagen procedure en het EXECUTE AS account

Het volgende voorbeeld verandert de opgeslagen procedure die Service Broker start. De opgeslagen procedure wordt uitgevoerd als de gebruiker SecurityAccount.

ALTER QUEUE ExpenseQueue  
    WITH ACTIVATION (  
        PROCEDURE_NAME = AdventureWorks2022.dbo.new_stored_proc ,  
        EXECUTE AS 'SecurityAccount') ;  

E. De wachtrij instellen om berichten te bewaren

Het volgende voorbeeld stelt de wachtrij zo in dat berichten behouden blijven. De wachtrij bewaart alle berichten die naar of van diensten die deze wachtrij gebruiken worden verzonden, totdat het gesprek met het bericht eindigt.

ALTER QUEUE ExpenseQueue WITH RETENTION = ON ;  

F. Activatie uit een wachtrij verwijderen

Het volgende voorbeeld verwijdert alle activatie-informatie uit de wachtrij.

ALTER QUEUE ExpenseQueue WITH ACTIVATION (DROP) ;  

G. Wachtrijindexen herbouwen

Van toepassing op: SQL Server 2016 (13.x) en hoger.

Het volgende voorbeeld reconstrueert wachtrijindexen'

ALTER QUEUE ExpenseQueue REBUILD WITH (MAXDOP = 2)   

H. Reorganiseren van wachtrijindexen

Van toepassing op: SQL Server 2016 (13.x) en hoger.

Het volgende voorbeeld reorganiseert wachtrijindexen

ALTER QUEUE ExpenseQueue REORGANIZE   

I: Het verplaatsen van de interne tabel van de wachtrij naar een andere bestandsgroep

Van toepassing op: SQL Server 2016 (13.x) en hoger.

ALTER QUEUE ExpenseQueue MOVE TO [NewFilegroup]   

Zie ook

CREATE QUEUE (Transact-SQL)
DROP QUEUE (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.dm_db_index_physical_stats (Transact-SQL)