5

sys.transmission_queue に表示される唯一の情報は、「このダイアログの対象となるローカル サービスに 1 つ以上のメッセージを配信できませんでした」というものです。

問題のあるキュー (5 つある) の 1 つを再度有効にし、Activation を OFF のままにすると、キューがメッセージでいっぱいになります。その後、Activation SP を実行すると、メッセージは問題なく正しく処理されます。しかし、アクティブ化をオンにするとすぐに、キューにメッセージがある場合、キューは再び無効になります。

私は完全に迷っています。これをトラブルシューティングする方法を知っている人はいますか?

4

2 に答える 2

11

キューは、ポイズン メッセージ処理保護への反応として自身を無効にします。これは、おそらく何らかの例外が原因で、アクティブ化されたプロシージャがロールバックしていることを意味します。アクティブ化されたプロシージャにはエラーを送信するセッションがないため、代わりにエラーを ERRORLOG に送信します。エラーログを確認してください。アクティブ化されたプロシージャからのエラーメッセージがたくさんあるはずです。

トラブルシューティングの最も簡単な方法は、アクティブ化がオフのときに、SSMS からアクティブ化された手順を手動で実行することです。アクティベーションと同じ実行コンテキストを再作成してみてください。内部アクティベーション コンテキストを参照してください。重要な部分は、多くの動作、特にセキュリティを変更している EXECUTE AS コンテキストです。これを試してください(キューが の下で実行されると仮定しますdbo):

use <dbname>;
go

execute as user = 'dbo';
go

exec <sp_my_activated_proc>;
go

revert;
go

エラー メッセージが表示される可能性があり、これが無効化を繰り返した原因である可能性があります。

于 2013-03-29T18:17:09.303 に答える