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


Устранение неполадок хранимых процедур активации

Активированная хранимая процедура запускается в фоновом сеансе. Поэтому методы устранения неполадок хранимых процедур активации несколько отличаются от методов устранения неполадок для хранимых процедур, составляющих часть интерактивного сеанса.

Метод: анализ конфигурации компонента 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 ошибки хранимой процедуры. Неполадку может устранить остановка активации и запуск хранимой процедуры вручную.