ALTER QUEUE (Transact-SQL)

Dotyczy:SQL ServerAzure SQL Managed Instance

Zmienia właściwości kolejki.

Transact-SQL konwencje składni

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 (obiekt)
To nazwa bazy danych, która zawiera kolejkę do zmiany. Gdy nie podaje się database_name , domyślnie wraca do bieżącej bazy danych.

schema_name (obiekt)
To nazwa schematu, do którego należy nowa kolejka. Gdy nie ma schema_name , domyślnie przyjmuje się domyślny schemat dla aktualnego użytkownika.

queue_name
Czy nazwa kolejki ma zostać zmieniona.

STATUS (kolejka)
Określa, czy kolejka jest dostępna (WŁĄCZONA) czy niedostępna (WYŁĄCZONA). Gdy kolejka jest niedostępna, nie można dodać ani usunąć z niej żadnych komunikatów.

RETENCJA
Określa ustawienie retencji dla kolejki. Jeśli RETENCJA = WŁĄCZONA, wszystkie wiadomości wysyłane lub odebrane w rozmowach korzystających z tej kolejki pozostają w kolejce aż do zakończenia rozmów. Pozwala to zachować wiadomości do celów audytu lub wykonywać transakcje kompensacyjne w przypadku błędu

Note

Ustawienie retencji = ON może obniżyć wydajność. To ustawienie powinno być używane tylko wtedy, gdy jest to konieczne do spełnienia umowy o poziomie usług dla aplikacji.

ACTIVATION
Określa informacje o procedurze przechowywanej, która jest aktywowana do przetwarzania wiadomości przybywających w tej kolejce.

STATUS (Aktywacja)
Określa, czy kolejka aktywuje procedurę przechowywaną. Gdy STATUS = ON, kolejka rozpoczyna procedurę przechowywaną określoną PROCEDURE_NAME gdy liczba bieżąco działających procedur jest mniejsza niż MAX_QUEUE_READERS i gdy wiadomości docierają do kolejki szybciej niż procedury przechowywane otrzymują wiadomości. Gdy STATUS = WYŁĄCZONE, kolejka nie aktywuje procedury przechowywanej.

ODBUDOWA [ Z <queue_rebuild_options> ]
Dotyczy: SQL Server 2016 (13.x) i nowszych.

Odbudowuje wszystkie indeksy w wewnętrznej tabeli kolejki. Używaj tej funkcji, gdy masz problemy z fragmentacją spowodowaną dużym obciążeniem. MAXDOP jest jedyną obsługiwaną opcją odbudowy kolejki. REBUILD to zawsze operacja offline.

REORGANIZUJ [ Z ( LOB_COMPACTION = { ON | WYŁĄCZONE } ) ]
Dotyczy: SQL Server 2016 (13.x) i nowszych.

Przeorganizuj wszystkie indeksy w wewnętrznej tabeli kolejki.
W przeciwieństwie do REORGANIZE na tabelach użytkownika, REORGANIZE na kolejce jest zawsze wykonywany jako operacja offline, ponieważ blokady na poziomie stron są jawnie wyłączone na kolejkach.

Wskazówka

Dla ogólnych wskazówek dotyczących fragmentacji indeksów, gdy fragmentacja wynosi od 5% do 30%, zreorganizuj indeks. Gdy fragmentacja przekroczy 30%, odbuduj indeks. Jednak te liczby służą jedynie ogólnym wskazówkom jako punkt wyjścia dla Twojego środowiska. Aby określić stopień fragmentacji indeksu, użyj sys.dm_db_index_physical_stats (Transact-SQL) – zobacz przykład G w tym artykule, aby zobaczyć przykłady.

PRZENIEŚ DO { file_group | "domyślne" }
Dotyczy: SQL Server 2016 (13.x) i nowszych.

Przenosi wewnętrzną tabelę kolejki (wraz z indeksami) do grupy plików określonych przez użytkownika. Nowa grupa plików nie może być tylko do odczytu.

PROCEDURE_NAME = <procedura>
Określa nazwę procedury przechowywanej, która ma się aktywować, gdy kolejka zawiera wiadomości do przetworzenia. Ta wartość musi być identyfikatorem SQL Server.

database_name (procedura)
To nazwa bazy danych zawierającej procedurę przechowywaną.

schema_name (procedura)
To nazwa schematu, który jest właścicielem procedury przechowywanej.

stored_procedure_name
To nazwa procedury przechowywanej.

MAX_QUEUE_READERS =max_reader
Określa maksymalną liczbę instancji procedury aktywacji przechowywanej, które kolejka uruchamia jednocześnie. Wartość max_readers musi mieć wartość od 0 do 32767.

EXECUTE AS
Określa konto użytkownika bazy SQL Server, pod którym uruchamiana jest procedura aktywacji przechowywanej. SQL Server musi być w stanie sprawdzić uprawnienia tego użytkownika w momencie, gdy kolejka aktywuje procedurę przechowywaną. Dla użytkownika domeny Windows SQL Server musi być połączony z domeną i zdolny do weryfikacji uprawnień określonego użytkownika po aktywacji procedury lub niepowodzeniu. Dla użytkownika SQL Server serwer zawsze może sprawdzić uprawnienia.

SELF
Określa, że procedura przechowywana wykonuje się jako aktualny użytkownik. (Główny wykonawca bazy danych wykonujący to ALTER QUEUE zdanie.)

"user_name"
To nazwa użytkownika, pod którym wykonywana jest procedura przechowywana. user_name musi być ważnym SQL Server użytkownik określony jako identyfikator SQL Server. Obecny użytkownik musi mieć uprawnienia do podszywania się do określonych user_name .

WŁAŚCICIEL
Określa, że procedura przechowywana wykonuje się jako właściciel kolejki.

DROP
Usuwa wszystkie informacje aktywacyjne powiązane z kolejką.

POISON_MESSAGE_HANDLING
Określa, czy obsługa wiadomości trucizny jest włączona. Wartość domyślna to WŁĄCZONE.

Kolejka, w której obsługa trucizny jest ustawiona na WYŁĄCZONE, nie zostanie wyłączona po pięciu kolejnych cofnięciach transakcji. Pozwala to na zdefiniowanie przez aplikację niestandardowego systemu obsługi wiadomości trucizny.

Remarks

Gdy kolejka z określoną procedurą aktywacji zawiera wiadomości, zmiana statusu aktywacji z OFF na ON natychmiast aktywuje procedurę aktywacyjną przechowywaną. Zmiana statusu aktywacji z ON na OFF uniemożliwia brokerowi aktywację instancji procedury przechowywanej, ale nie zatrzymuje instancji procedury przechowywanej, które są obecnie uruchomione.

Zmiana kolejki w celu dodania procedury aktywacyjnej przechowywanej nie zmienia statusu aktywacji kolejki. Zmiana procedury aktywacyjnej przechowywanej dla kolejki nie wpływa na instancje procedury aktywacji przechowywanej, które są obecnie uruchomione.

Service Broker sprawdza maksymalną liczbę czytników kolejek w ramach procesu aktywacji. Dlatego zmiana kolejki w celu zwiększenia maksymalnej liczby czytników kolejki pozwala Service Brokerowi natychmiast rozpocząć kolejne instancje procedury aktywacyjnej przechowywanej. Zmiana kolejki w celu zmniejszenia maksymalnej liczby czytników kolejki nie wpływa na instancje procedury aktywacyjnej przechowywanej obecnie działającej. Jednak Service Broker nie uruchamia nowej instancji procedury przechowywanej, dopóki liczba instancji procedury aktywacyjnej nie spadnie poniżej maksymalnej liczby skonfigurowanej.

Gdy kolejka jest niedostępna, Service Broker przechowuje komunikaty dla usług, które korzystają z kolejki w kolejce transmisji bazy danych. Widok katalogu sys.transmission_queue udostępnia przegląd kolejki transmisji.

Jeśli RECEIVE polecenie lub instrukcja określa GET CONVERSATION GROUP niedostępną kolejkę, to zdanie kończy się błędem Transact-SQL.

Permissions

Uprawnienia do zmiany kolejki domyślnie przysługują właścicielowi kolejki, członkom stałych ról bazy danych db_ddladmin lub db_owner oraz członkom stałej roli administratora systemu.

Examples

A. Niedostępność kolejki

Poniższy przykład sprawia, że kolejka ExpenseQueue jest niedostępna do odbierania wiadomości.

ALTER QUEUE ExpenseQueue WITH STATUS = OFF ;  

B. Zmiana procedury aktywacji przechowywanej

Poniższy przykład zmienia procedurę przechowywaną, którą uruchamia kolejka. Procedura przechowywana wykonuje się jako użytkownik, który wykonał ALTER QUEUE polecenie.

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

C. Zmiana liczby czytników kolejek

Poniższy przykład określa 7 maksymalną liczbę instancji procedur przechowywanych, które Service Broker uruchamia dla tej kolejki.

ALTER QUEUE ExpenseQueue WITH ACTIVATION (MAX_QUEUE_READERS = 7) ;  

D. Zmiana procedury aktywacji i EXECUTE AS konta

Poniższy przykład zmienia procedurę przechowywaną, którą uruchamia Service Broker. Procedura przechowywana wykonuje się jako użytkownik SecurityAccount.

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

E. Ustawianie kolejki do przechowywania wiadomości

Poniższy przykład ustawia kolejkę tak, aby zachowywała wiadomości. Kolejka przechowuje wszystkie wiadomości wysyłane do lub od usług korzystających z tej kolejki, aż do zakończenia rozmowy zawierającej tę wiadomość.

ALTER QUEUE ExpenseQueue WITH RETENTION = ON ;  

F. Usuwanie aktywacji z kolejki

Poniższy przykład usuwa wszystkie informacje o aktywacji z kolejki.

ALTER QUEUE ExpenseQueue WITH ACTIVATION (DROP) ;  

G. Odbudowa indeksów kolejek

Dotyczy: SQL Server 2016 (13.x) i nowszych.

Poniższy przykład odbudowuje indeksy kolejek'

ALTER QUEUE ExpenseQueue REBUILD WITH (MAXDOP = 2)   

H. Reorganizacja indeksów kolejek

Dotyczy: SQL Server 2016 (13.x) i nowszych.

Poniższy przykład reorganizuje indeksy kolejek

ALTER QUEUE ExpenseQueue REORGANIZE   

I: Przeniesienie wewnętrznej tabeli kolejki do innej grupy plików

Dotyczy: SQL Server 2016 (13.x) i nowszych.

ALTER QUEUE ExpenseQueue MOVE TO [NewFilegroup]   

Zobacz też

CREATE QUEUE (Transact-SQL)
DROP QUEUE (Transact-SQL)
DANE ZDARZEŃ (Transact-SQL)
sys.dm_db_index_physical_stats (Transact-SQL)