Устранение неполадок хранимых процедур активации
Активированная хранимая процедура запускается в фоновом сеансе. Поэтому методы устранения неполадок хранимых процедур активации несколько отличаются от методов устранения неполадок для хранимых процедур, составляющих часть интерактивного сеанса.
Метод: анализ конфигурации компонента Service Broker
Если активированные хранимые процедуры не выполняются успешно, попытайтесь найти ошибки в настройке связанных с ними служб с помощью программы ssbdiagnose. Дополнительные сведения см. в разделе Программа ssbdiagnose.
Метод: просмотр выходных данных хранимой процедуры активации
Если активированные хранимые процедуры возвращают неверные результаты или не выполняют считывание из очереди, проверьте журнал ошибок SQL Server на наличие ошибок и сообщений, указывающих на неполадки. Активированные хранимые процедуры не связаны ни с каким приложением. Сведения, которые обычно возвращаются вызывающему приложению, вместо этого помещаются в журнал ошибок SQL Server. Сюда относятся ошибки, сообщения и выходные данные инструкций PRINT и RAISERROR.
Метод: запуск хранимой процедуры в интерактивном сеансе
Для устранения неполадок хранимых процедур активации можно отключить активацию очереди и запуск хранимой процедуры из среды SQL Server Management Studio (или с помощью служебной программы sqlcmd). Запуск хранимой процедуры в интерактивном сеансе позволяет увидеть любые ошибки, возвращаемые хранимой процедурой.
Однако результаты будут отличаться, если контекст безопасности и параметры базы данных различаются в интерактивном сеансе и при активации хранимой процедуры компонентом Database Engine. Перед тем как запускать процедуру, выполните следующие действия.
С помощью инструкции EXECUTE AS задайте пользователя для интерактивного сеанса в качестве пользователя, указанного для активации.
Установите параметры сеанса в их значения по умолчанию для базы данных.
Дополнительные сведения см. в разделе Контекст внутренней активации.
Симптом: хранимая процедура активации не запускается
Причиной этого могут служить следующие факторы.
Возможно, были изменены параметры очереди. С помощью представления каталога sys.service_queues убедитесь, что параметры очереди остались теми же. Убедитесь, что активация очереди включена, что в очереди указана верная хранимая процедура и верный участник безопасности. Убедитесь, что участник безопасности имеет разрешение выполнять хранимую процедуру.
Хранимая процедура может не запуститься или же завершится сразу после запуска. В этом случае проверьте, не присутствуют ли в журнале ошибок SQL Server ошибки хранимой процедуры. Можно также запустить хранимую процедуру из среды SQL Server Management Studio и проверить результаты.
Симптом: Сообщения остаются в очереди
Убедитесь, что хранимые процедуры активации запускаются правильно:
Проверьте динамическое административное представление sys.dm_broker_queue_monitors, чтобы убедиться в активности монитора очереди. Включите активацию очереди (ON) с помощью инструкции ALTER QUEUE.
Состояние монитора очереди для данной очереди должно быть RECEIVES_OCCURRING. Если состояние монитора очереди другое, проверьте динамическое административное представление sys.dm_broker_activated_tasks, чтобы убедиться, что активированные задания для очереди в данное время выполняются. Если активированные задачи отсутствуют, то активация завершается неуспешно. Дополнительные сведения см. в разделе «Признак: Хранимые процедуры активации не запускаются» в этом разделе.
Если активированные задачи выполняются, но сообщения остаются в очереди, то задача либо не выполняет инструкцию RECEIVE, либо завершается неуспешно при фиксации транзакции. Проверьте, не присутствуют ли в журнале ошибок SQL Server ошибки хранимой процедуры. Неполадку может устранить остановка активации и запуск хранимой процедуры вручную.