Compartir a través de


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 usadas para solucionar problemas de procedimientos almacenados que forman parte de una sesión interactiva.

Técnica: Analizar la configuración de Service Broker

Si los procedimientos almacenados activados no se ejecutan correctamente, use la utilidad ssbdiagnose para buscar errores de configuración en los servicios asociados. Para obtener más información, vea Utilidad ssbdiagnose.

Técnica: Ver el resultado del procedimiento almacenado de activación

Si el procedimiento almacenado activado genera resultados incorrectos, o no lee de la cola, compruebe el registro de errores de SQL Server para ver errores y mensajes que ayuden a localizar el problema. Los procedimientos almacenados activados no están asociados a ninguna aplicación. Información que se devuelve normalmente a la aplicación que realiza la llamada se coloca en su lugar en el registro de errores de SQL Server. Esto incluye errores, mensajes y el resultado de las instrucciones PRINT y RAISERROR.

Técnica: Ejecutar el procedimiento almacenado de una sesión interactiva

Para solucionar los problemas de un procedimiento almacenado de activación, puede 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. Si ejecuta el procedimiento almacenado desde una sesión interactiva, puede ver cualquier error devuelto por el procedimiento almacenado.

Sin embargo, podría ver resultados diferentes si el contexto de seguridad y la configuración de la base de datos son diferentes en la sesión interactiva que cuando el Motor de base de datos activa el procedimiento almacenado. Antes de ejecutar el procedimiento, haga lo siguiente:

  • Use EXECUTE AS para establecer el usuario para la sesión interactiva en el usuario especificado para la activación.

  • Establezca las opciones para la sesión en los valores predeterminados de la base de datos.

Para obtener más información, vea Contexto de activación interna.

Síntoma: no se ejecutan los procedimientos almacenados de activación.

Las siguientes son las causas comunes de este síntoma:

  • La configuración de la cola podría haber cambiado. Utilice la vista de catálogo sys.service_queues para confirmar la configuración de la cola. Asegúrese de 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 podría no iniciarse o podría 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í, use la instrucción ALTER QUEUE para habilitar la activación.

  • 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. Para obtener más información, vea la sección anterior de este tema "Síntoma: no se ejecutan los procedimientos almacenados de activació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.