Поделиться через


ALTER QUEUE (Transact-SQL)

Изменяет свойства очереди.

Значок ссылки на разделСоглашения о синтаксисе в Transact-SQL

Синтаксис

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 }
          ) ] 
[ ; ]

<object> ::=
{
    [ database_name. [ schema_name ] . | schema_name. ]
        queue_name
} 

<procedure> ::=
{
    [ database_name. [ schema_name ] . | schema_name. ]
        stored_procedure_name
}

Аргументы

  • database_name(object)
    Название базы данных, которая содержит изменяемую очередь. Если не указан аргумент database_name, по умолчанию используется текущая база данных.
  • schema_name(object)
    Имя схемы, которой принадлежит новая очередь. Если не указан аргумент schema_name, по умолчанию используется схема текущего пользователя.
  • queue_name
    Имя изменяемой очереди.
  • STATUS (Очередь)
    Указывает, доступна очередь (ON) или нет (OFF). Когда очередь недоступна, нельзя ни добавлять в нее сообщения, ни удалять их из нее.
  • RETENTION
    Задает параметр хранения для очереди. Если указано RETENTION = ON, все сообщения, посылаемые или отправляемые во время диалогов, которые используют данную очередь, хранятся в очереди до окончания этих диалогов. Это позволяет сохранять сообщения для целей ревизии или для выполнения компенсирующих транзакций, если возникают ошибки

    ms189529.note(ru-ru,SQL.90).gifПримечание.
    Установка RETENTION = ON может уменьшить производительность. Эта установка должна использоваться только тогда, когда необходимо достичь соглашения уровня службы для приложения.
  • ACTIVATION
    Указывает сведения о хранимой процедуре, которая активизируется для обработки сообщений, которые поступают в данную очередь.
  • STATUS (Activation)
    Указывает, активирует ли очередь хранимую процедуру. Если параметр STATUS = ON, то очередь запускает хранимую процедуру, указанную параметром PROCEDURE_NAME, если количество выполняемых в настоящий момент хранимых процедур меньше, чем значение MAX_QUEUE_READERS, и если сообщения прибывают в очередь быстрее, чем хранимые процедуры получают сообщения. Если параметр STATUS = OFF, очередь не активирует хранимую процедуру.
  • PROCEDURE_NAME = <procedure>
    Указывает имя активируемой хранимой процедуры, если очередь содержит сообщения, которые нужно обработать. Это значение должно являться идентификатором SQL Server. Дополнительные сведения об активации см. в разделе Understanding When Activation Occurs.
  • database_name (процедура)
    Имя базы данных, которая содержит хранимую процедуру.
  • schema_name (процедура)
    Имя схемы, которой принадлежит хранимая процедура.
  • stored_procedure_name
    Имя хранимой процедуры.
  • MAX_QUEUE_READERS = max_readers
    Указывает максимальное число экземпляров хранимой процедуры активации, которые очередь одновременно может запустить. Значение аргумента max_readers должно быть из интервала от 0 до 32 767.
  • EXECUTE AS
    Определяет учетную запись пользователя базы данных SQL Server, под которой выполняется хранимая процедура активации. SQL Server должен иметь возможность проверить разрешения для этого пользователя в момент, когда очередь активирует хранимую процедуру. Для пользователя домена Windows SQL Server должен быть подключен к домену и иметь возможность проверить разрешения указанного пользователя при активизации процедуры или неудачной попытке запуска процедуры. Для пользователя SQL Server сервер всегда в состоянии проверить разрешения.
  • SELF
    Указывает, что хранимая процедура выполняется как текущий пользователь. (Участник базы данных, выполняющий эту инструкцию ALTER QUEUE)
  • 'user_name'
    Имя пользователя, под которым выполняется хранимая процедура. Аргумент user_name должен быть допустимым пользователем SQL Server, указанным в качестве идентификатора SQL Server. Текущий пользователь должен иметь разрешение IMPERSONATE для указанного значения user_name.
  • OWNER
    Указывает, что хранимая процедура выполняется как владелец очереди.
  • DROP
    Удаляет все сведения об активации, ассоциированные с очередью.

Замечания

Если очередь с указанной хранимой процедурой активации содержит сообщения, которые изменяют состояние активации с OFF на ON, тут же активирует хранимую процедуру активации. Изменение состояния активации с ON на OFF прекращает активацию экземпляров хранимой процедуры брокером, но не останавливает экземпляры хранимой процедуры, которые уже запущены.

Изменение очереди для добавления хранимой процедуры активации не изменяет состояния активации очереди. Изменение хранимой процедуры активации для очереди не влияет на экземпляры хранимых процедур активации, которые уже запущены.

Компонент Service Broker проверяет максимальное число агентов чтения очереди для очереди в качестве части процесса активации. Поэтому, изменение очереди с целью увеличения максимального числа агентов чтения очереди позволяет компоненту Service Broker немедленно запустить больше экземпляров хранимой процедуры активации. Изменение очереди с целью уменьшения максимального числа агентов чтения очереди не влияет на экземпляры хранимой процедуры активации, которые уже запущены. Однако компонент Service Broker не запускает новый экземпляр хранимой процедуры до тех пор, пока число экземпляров хранимой процедуры активации не уменьшится до заданного максимального числа. Подробное описание процесса активации см. в разделе Understanding When Activation Occurs.

Если очередь недоступна, компонент Service Broker сохраняет сообщения для служб, пользующихся данной очередью, в очереди передачи для базы данных. Представление каталога sys.transmission_queue содержит представление очереди обмена.

Если инструкция RECEIVE или инструкция GET CONVERSATION GROUP указывает недоступную очередь, выполнение инструкции завершается ошибкой языка Transact-SQL.

Разрешения

По умолчанию разрешение на очистку очереди предоставляется владельцу очереди, членам фиксированных ролей db_ddladmin или db_owner базы данных и членам фиксированной серверной роли sysadmin.

Примеры

A. Сделать очередь недоступной

В этом примере очередь ExpenseQueue делается недоступной для приема сообщений.

ALTER QUEUE ExpenseQueue WITH STATUS = OFF ;

Б. Изменение хранимой процедуры активации

Следующий пример изменяет хранимую процедуру, которую запускает очередь. Хранимая процедура выполняется в контексте пользователя, выполнившего инструкцию ALTER QUEUE.

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

В. Изменение числа агентов чтения очереди

Следующий пример устанавливает максимальное число экземпляров хранимых процедур, запускаемых компонентом Service Broker для этой очереди, равное 7.

ALTER QUEUE ExpenseQueue WITH ACTIVATION (MAX_QUEUE_READERS = 7) ;

Г. Изменение хранимой процедуры активации и учетной записи EXECUTE AS

Следующий пример изменяет хранимую процедуру, которую запускает компонент Service Broker. Хранимая процедура выполняется в контексте пользователя SecurityAccount.

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

Д. Настройка очереди на хранение сообщений

Следующий пример настраивает очередь на хранение сообщений. Очередь хранит все сообщения, отправленные службам или службами, которые используют эту очередь, до тех пор, пока не завершится диалог, который содержит сообщения.

ALTER QUEUE ExpenseQueue WITH RETENTION = ON ;

Е. Удаление активации из очереди

Следующий пример удаляет все сведения активации из очереди.

ALTER QUEUE ExpenseQueue WITH ACTIVATION (DROP) ;

См. также

Справочник

CREATE QUEUE (Transact-SQL)
DROP QUEUE (Transact-SQL)
EVENTDATA (Transact-SQL)

Другие ресурсы

Очереди
Service Broker Activation
Internal Activation Context

Справка и поддержка

Получение помощи по SQL Server 2005