Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na:SQL ServerAzure
SQL Managed Instance
Mění vlastnosti fronty.
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 (objekt)
Je název databáze, která obsahuje frontu, která má být změněna. Pokud není poskytnut žádný database_name , výchozí je aktuální databáze.
schema_name (objekt)
Je název schématu, do kterého nová fronta patří. Pokud není poskytnut žádný schema_name , výchozí je pro aktuálního uživatele výchozí schéma.
queue_name
Je název fronty, která má být změněna.
STAV (fronta)
Specifikuje, zda je fronta dostupná (ZAPNUTO) nebo nedostupná (VYPNUTO). Pokud fronta není dostupná, nelze do fronty přidat žádné zprávy ani je odstranit.
UDRŽENÍ
Specifikuje nastavení udržení fronty. Pokud je RETENTION = ZAPNUTO, všechny zprávy odeslané nebo přijaté v konverzacích v této frontě zůstávají ve frontě až do ukončení konverzace. To vám umožňuje uchovávat zprávy pro účely auditu nebo provádět kompenzační transakce v případě chyby
Note
Nastavení RETENTION = ZAPNUTO může snížit výkon. Toto nastavení by mělo být použito pouze v případě, že je to nutné pro splnění dohody o úrovni služeb pro danou aplikaci.
ACTIVATION
Specifikuje informace o uložené procedurě, která je aktivována pro zpracování zpráv přicházejících do této fronty.
STAV (Aktivace)
Specifikuje, zda fronta aktivuje uloženou proceduru. Když je STATUS = ZAPNUTO, fronta zahajuje uloženou proceduru specifikovanou s PROCEDURE_NAME když je počet aktuálně běžících procedur menší než MAX_QUEUE_READERS a když zprávy dorazí do fronty rychleji, než přijímají uložené procedury. Když je STATUS = VYPNUTO, fronta neaktivuje uloženou proceduru.
PŘESTAVBA [ S <queue_rebuild_options> ]
platí pro: SQL Server 2016 (13.x) a novější.
Přestavuje všechny indexy v interní tabulce fronty. Tuto schopnost využijte, když máte problémy s fragmentací způsobenou vysokým zatížením. MAXDOP je jediná podporovaná možnost obnovy fronty. REBUILD je vždy offline operace.
REORGANIZOVAT [ S ( LOB_COMPACTION = { ON | VYPNUTO } ) ]
platí pro: SQL Server 2016 (13.x) a novější.
Reorganizujte všechny indexy v interní tabulce fronty.
Na rozdíl od REORGANIZACE na uživatelských tabulkách se REORGANIZACE ve frontě vždy provádí offline operací, protože zámky na úrovni stránek jsou na frontách explicitně zakázány.
Tip
Pro obecné pokyny ohledně fragmentace indexu, pokud je fragmentace mezi 5% a 30%, reorganizujte index. Když je fragmentace nad 30%, znovu sestavte index. Tato čísla jsou však pouze obecná jako výchozí bod pro vaše prostředí. Pro určení míry fragmentace indexu použijte sys.dm_db_index_physical_stats (Transact-SQL) – viz příklad G v tom článku.
PŘESUN NA { file_group | "výchozí" }
platí pro: SQL Server 2016 (13.x) a novější.
Přesouvá interní tabulku fronty (s indexy) do uživatelem specifikované skupiny souborů. Nová skupina souborů nesmí být pouze pro čtení.
PROCEDURE_NAME = <postup>
Specifikuje název uložené procedury, která se aktivuje, když fronta obsahuje zprávy určené ke zpracování. Tato hodnota musí být identifikátor SQL Server.
database_name (zákrok)
Je název databáze, která obsahuje uloženou proceduru.
schema_name (zákrok)
Je název schématu, které vlastní uloženou proceduru.
stored_procedure_name
Je název uložené procedury.
MAX_QUEUE_READERS =max_reader
Specifikuje maximální počet instancí aktivační uložené procedury, které fronta spustí současně. Hodnota max_readers musí být mezi 0 a 32767.
EXECUTE AS
Specifikuje uživatelský účet databáze SQL Server, pod kterým spouští aktivační uložená procedura. SQL Server musí být schopen zkontrolovat oprávnění tohoto uživatele v době, kdy fronta aktivuje uloženou proceduru. Pro uživatele domény Windows musí být SQL Server připojen k doméně a schopen ověřit oprávnění určeného uživatele při aktivaci procedury nebo selhání aktivace. Pro uživatele SQL Server může server vždy kontrolovat oprávnění.
SELF
Specifikuje, že uložená procedura se vykonává jako aktuální uživatel. (Princip databáze, který toto ALTER QUEUE tvrzení vykonává.)
User_name
je jméno uživatele, pod kterým se uložená procedura vykonává. user_name musí být platný SQL Server uživatel specifikovaný jako identifikátor SQL Server. Současný uživatel musí mít oprávnění vydávat se za PŘEDSTÍRÁNÍ pro specifikovanou user_name .
VLASTNÍK
Specifikuje, že uložená procedura se vykonává jako vlastník fronty.
DROP
Smaže všechny aktivační informace spojené s frontou.
POISON_MESSAGE_HANDLING
Specifikuje, zda je povoleno zpracování jedovatých zpráv. Výchozí hodnota je ZAPNUTÁ.
Fronta, která má nastavené řešení jedovatých zpráv na VYPNUTO, nebude po pěti po sobě jdoucích návratech transakcí zakázána. To umožňuje definovat vlastní systém manipulace s jedovatými zprávami aplikací aplikací.
Remarks
Když fronta s určenou aktivační uloženou procedurou obsahuje zprávy, změna aktivačního stavu z VYPNUTO na ZAPNUTÉ okamžitě aktivuje uloženou proceduru. Změna aktivačního stavu z ZAPNUTO na VYPNUTO zabrání brokerovi aktivovat instance uložené procedury, ale nezastaví instance uložené procedury, které právě běží.
Změna fronty za účelem přidání aktivační uložené procedury nezmění stav aktivace fronty. Změna aktivačního uloženého postupu fronty neovlivňuje instance aktivačního uloženého postupu, které právě běží.
Service Broker kontroluje maximální počet čteček fronty ve frontě jako součást aktivačního procesu. Proto úprava fronty za účelem zvýšení maximálního počtu čteček fronty umožňuje Service Brokeru okamžitě spustit více instancí aktivačního uloženého procesu. Změna fronty za účelem snížení maximálního počtu čtenářů fronty neovlivňuje instance aktivačního uloženého postupu, které právě běží. Service Broker však nezačíná novou instanci uložené procedury, dokud počet instancí pro uloženou proceduru aktivace neklesne pod maximální konfigurovaný počet.
Když fronta není dostupná, Service Broker uchovává zprávy pro služby, které frontu používají ve frontě přenosu databáze. Zobrazení sys.transmission_queue katalogu poskytuje pohled na frontu přenosu.
Pokud RECEIVE příkaz nebo GET CONVERSATION GROUP příkaz specifikuje nedostupnou frontu, tento příkaz selže s chybou Transact-SQL.
Permissions
Oprávnění ke změně fronty je výchozí pro vlastníka fronty, členy pevných databázových rolí db_ddladmin nebo db_owner a členy pevné serverové role správce systému.
Examples
A. Nedostupnost fronty
Následující příklad způsobuje, že fronta není dostupná ExpenseQueue pro přijímání zpráv.
ALTER QUEUE ExpenseQueue WITH STATUS = OFF ;
B. Změna aktivačního uloženého postupu
Následující příklad mění uloženou proceduru, kterou fronta začíná. Uložená procedura se vykoná jako uživatel, který příkaz ALTER QUEUE spustil.
ALTER QUEUE ExpenseQueue
WITH ACTIVATION (
PROCEDURE_NAME = new_stored_proc,
EXECUTE AS SELF) ;
C. Změna počtu čteček fronty
Následující příklad stanovuje 7 maximální počet instancí uložených procedur, které Service Broker pro tuto frontu začíná.
ALTER QUEUE ExpenseQueue WITH ACTIVATION (MAX_QUEUE_READERS = 7) ;
D. Změna uložené procedury aktivace a EXECUTE AS účtu
Následující příklad mění uloženou proceduru, kterou Service Broker spouští. Uložená procedura se vykonává jako uživatel SecurityAccount.
ALTER QUEUE ExpenseQueue
WITH ACTIVATION (
PROCEDURE_NAME = AdventureWorks2022.dbo.new_stored_proc ,
EXECUTE AS 'SecurityAccount') ;
E. Nastavení fronty tak, aby si zprávy uchovávala
Následující příklad nastavuje frontu tak, aby zprávy uchovávala. Fronta uchovává všechny zprávy odeslané službám nebo ze služeb, které tuto frontu používají, dokud konverzace obsahující zprávu neskončí.
ALTER QUEUE ExpenseQueue WITH RETENTION = ON ;
F. Odstranění aktivace z fronty
Následující příklad odstraní veškeré aktivační informace z fronty.
ALTER QUEUE ExpenseQueue WITH ACTIVATION (DROP) ;
G. Přestavba indexů front
platí pro: SQL Server 2016 (13.x) a novější.
Následující příklad přestavuje indexy front'
ALTER QUEUE ExpenseQueue REBUILD WITH (MAXDOP = 2)
H. Reorganizace indexů front
platí pro: SQL Server 2016 (13.x) a novější.
Následující příklad reorganizuje indexy front
ALTER QUEUE ExpenseQueue REORGANIZE
I: Přesun interní tabulky fronty do jiné skupiny souborů
platí pro: SQL Server 2016 (13.x) a novější.
ALTER QUEUE ExpenseQueue MOVE TO [NewFilegroup]
Viz také
CREATE QUEUE (Transact-SQL)
DROP QUEUE (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.dm_db_index_physical_stats (Transact-SQL)