ALTER QUEUE (Transact-SQL)
Cambia las propiedades de una cola.
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 }
) [ , ]]
[ POISON_MESSAGE_HANDLING (
STATUS = { ON | OFF } )
]
[ ; ]
<object> ::=
{
[ database_name. [ schema_name ] . | schema_name. ]
queue_name
}
<procedure> ::=
{
[ database_name. [ schema_name ] . | schema_name. ]
stored_procedure_name
}
Cuando una cola que tiene especificado un procedimiento almacenado de activación contiene mensajes, al cambiar el estado de activación de OFF a ON, se activa inmediatamente el procedimiento almacenado de activación. Cambiar el estado de activación de ON a OFF impide que el broker active instancias del procedimiento almacenado, pero las instancias que están en ejecución no se detienen.
Modificar una cola para agregar un procedimiento almacenado de activación no afecta al estado de activación de la cola. Modificar el procedimiento almacenado de activación de la cola no afecta a las instancias del procedimiento almacenado de activación que se estén ejecutando en el momento actual.
Service Broker comprueba el número máximo de lectores de cola como parte del proceso de activación. Por tanto, si se modifica una cola para aumentar el número máximo de lectores de cola, Service Broker iniciará inmediatamente más instancias del procedimiento almacenado de activación. Modificar una cola para reducir el número máximo de lectores de cola no afecta a las instancias del procedimiento almacenado de activación que se estén ejecutando en el momento actual. No obstante, Service Broker no inicia ninguna nueva instancia del procedimiento almacenado hasta que el número de instancias del procedimiento almacenado de activación sea inferior al número máximo configurado. Para obtener una descripción más detallada del proceso de activación, vea Entender cuándo se produce la activación.
Cuando una cola no está disponible, Service Broker retiene los mensajes para los servicios que utilizan la cola en la cola de transmisión para la base de datos. La vista de catálogo sys.transmission_queue proporciona una vista de la cola de transmisión.
Si las instrucciones RECEIVE o GET CONVERSATION GROUP especifican una cola que no está disponible, generarán un error de Transact-SQL.
A. Hacer que una cola no esté disponible
En el ejemplo siguiente se hace que la cola de ExpenseQueue no esté disponible para recibir mensajes.
ALTER QUEUE ExpenseQueue WITH STATUS = OFF ;
B. Cambiar el procedimiento almacenado de activación
En el siguiente ejemplo se muestra cómo cambiar el procedimiento almacenado iniciado por la cola. El procedimiento almacenado se ejecuta como el usuario que ejecutó la instrucción ALTER QUEUE.
ALTER QUEUE ExpenseQueue
WITH ACTIVATION (
PROCEDURE_NAME = new_stored_proc,
EXECUTE AS SELF) ;
C. Cambiar el número de lectores de cola
En el ejemplo siguiente se establece en 7 el número máximo de instancias de procedimiento almacenado que inicia Service Broker para esta cola.
ALTER QUEUE ExpenseQueue WITH ACTIVATION (MAX_QUEUE_READERS = 7) ;
D. Cambiar el procedimiento almacenado de activación y la cuenta EXECUTE AS
En el ejemplo siguiente se cambia el procedimiento almacenado iniciado por Service Broker. El procedimiento almacenado se ejecuta con el usuario SecurityAccount.
ALTER QUEUE ExpenseQueue
WITH ACTIVATION (
PROCEDURE_NAME = AdventureWorks2008R2.dbo.new_stored_proc ,
EXECUTE AS 'SecurityAccount') ;
E. Configurar la cola para retener mensajes
En el siguiente ejemplo se muestra cómo configurar la cola para retener mensajes. La cola retiene todos los mensajes enviados a o desde los servicios que utilizan la cola hasta que la conversación que contiene el mensaje finaliza.
ALTER QUEUE ExpenseQueue WITH RETENTION = ON ;
F. Quitar la activación de una cola
En el siguiente ejemplo se muestra cómo quitar toda la información de activación de la cola.
ALTER QUEUE ExpenseQueue WITH ACTIVATION (DROP) ;