Solucionar problemas de procedimientos almacenados de activación
Los procedimientos almacenados de activación se ejecutan en una sesión en segundo plano. Por tanto, las técnicas para solucionar problemas de un procedimiento almacenado difieren ligeramente de las utilizadas para solucionar problemas de procedimientos almacenados que forman parte de una sesión interactiva.
Técnica: ver el resultado del procedimiento almacenado de activación
El Database Engine (Motor de base de datos) escribe el resultado de un procedimiento almacenado de activación en el registro de errores de SQL Server. Si el procedimiento almacenado genera resultados incorrectos o no puede leer la cola, compruebe el registro de errores de SQL Server para ver el resultado del procedimiento. ?A menudo, el resultado del procedimiento almacenado proporciona suficiente información para localizar el problema.
Técnica: ejecutar el procedimiento almacenado desde una sesión interactiva
Una de las mejores formas de solucionar los problemas de un procedimiento almacenado de activación consiste en deshabilitar la activación en la cola y, a continuación, ejecutar el procedimiento almacenado desde SQL Server Management Studio (o desde la utilidad sqlcmd). La ejecución del procedimiento almacenado desde una sesión interactiva permite ver cualquier error generado por el procedimiento almacenado.
Sin embargo, cuando Database Engine (Motor de base de datos) activa el procedimiento almacenado, los parámetros de la base de datos y el contexto de seguridad pueden ser distintos. Antes de ejecutar el procedimiento, utilice EXECUTE AS para establecer el usuario de la sesión como el usuario especificado para la activación y para establecer las opciones de la sesión con los valores predeterminados de la base de datos.
Para obtener más información, vea Internal Activation Context.
Síntoma: no se ejecutan los procedimientos almacenados de activación
Existen varias causas comunes de este síntoma.
La configuración de la cola puede haber cambiado. Utilice la vista de catálogo sys.service_queues para confirmar la configuración de la cola. En especial, compruebe que la activación de la cola está habilitada, que la cola especifica el procedimiento almacenado correcto y que la cola especifica la entidad de seguridad correcta. Confirme que la entidad de seguridad tiene permiso de ejecución en el procedimiento almacenado.
El procedimiento almacenado puede generar errores al iniciarse o puede salir inmediatamente después de iniciarse. En este caso, compruebe los errores del procedimiento almacenado en el registro de errores de SQL Server. También puede ejecutar el procedimiento almacenado desde SQL Server Management Studio y comprobar los resultados.
Síntoma: los mensajes permanecen en la cola
Asegúrese de que los procedimientos almacenados de activación se han iniciado correctamente:
- Compruebe la vista de administración dinámica sys.dm_broker_queue_monitors para asegurarse de que hay un monitor de cola activo para la cola. De no ser así, la activación no estará activa (ON) para la cola. Utilice la instrucción ALTER QUEUE para establecer la activación en ON.
- El estado del monitor de la cola debería ser RECEIVES_OCCURRING. Si el monitor de cola no está en este estado, compruebe la vista de administración dinámica sys.dm_broker_activated_tasks para asegurarse de que las tareas activadas para la cola se están ejecutando actualmente. Si no hay ninguna tarea activada, significa que la activación presenta un error. Vea "Síntoma: no se ejecutan los procedimientos almacenados de activación", en esta sección.
Si las tareas activadas se están ejecutando pero los mensajes permanecen en la cola, significa que la tarea presenta errores en la instrucción RECEIVE o que no puede confirmar transacciones. Compruebe los errores del procedimiento almacenado en el registro de errores de SQL Server. Detener la activación y ejecutar el procedimiento almacenado manualmente puede ayudar a solucionar el problema.
Vea también
Otros recursos
sys.service_queues (Transact-SQL)
sys.dm_broker_queue_monitors
sys.dm_broker_activated_tasks