Activation proc failed

Good day,

I have send a msg successful,but the proc failed. I altered the proc to correct the problem in the proc. The msg are still in the queue. Is there a manual way to excute the proc again to process the msg in the q? or do I wait for service broker to do it after a retry time (self recover)?

thank you in advance.

[339 byte] By [Rudolf_E] at [2007-12-23]
# 1

If the proc fails (i.e. throws an exception), Service Broker will try to restart the proc every 5 seconds. However, if your proc actually did a RECEIVE which was rolled back, then the rollback handler will detect this as a poisoned message and disable the queue. You can check this by doing:

select is_receive_enabled from sys.service_queues where name='YourQueue';

You can enable the queue by:

alter queue [YourQueue] with status = on;

RushiDesai at 2007-8-30 > top of Msdn Tech,SQL Server,SQL Service Broker...
# 2

Rudhi

what I did :

receive top(1) @receivedMsg = message_body,

@h = conversation_handle,

@msgType = message_type_name

from q111 -- wrong queue ,finger trouble.

In theLog file viewer :
The activated proc [dbo].[HandleRecieveMsg] running on queue EOGDB.dbo.q2eog output the following: 'Invalid object name 'q111'.'

So I corrected the proc to point to the correct queue.

I did as you said: "select is_receive_enabled from sys.service_queues where name='q2eog'; " q return a value of 1.

The message still is in the correct q after 5 seconds and longer.

Is there something else I can look or do?

Rudolf_E at 2007-8-30 > top of Msdn Tech,SQL Server,SQL Service Broker...
# 3

Okay I followed the steps in the help:

"Symptom: Activation Stored Procedures Do Not Run". And discovered that the proc I execute inside the RecieveProc fails.

(the proc I exec inside the recieving proc is proc reference a external assmbly)

Now my q is if a proc fails and the msg is allready retrieved from the queue, what happens to the msg? where does it go or the error msg?

Rudolf_E at 2007-8-30 > top of Msdn Tech,SQL Server,SQL Service Broker...
# 4

You can look at the state of the queue monitor:

select * from sys.dm_broker_queue_monitors;

If it is in 'NOTIFIED' state (which means, waiting for someone to do a RECEIVE), you can either reset the state by doing a RECEIVE or an ALTER QUEUE:

ALTER QUEUE [YourQueue] WITH STATUS = ON;

Hope that helps.

RushiDesai at 2007-8-30 > top of Msdn Tech,SQL Server,SQL Service Broker...
# 5
If you are doing that within a transaction scope, the transaction should rollback and the message should be put back into the queue.
RushiDesai at 2007-8-30 > top of Msdn Tech,SQL Server,SQL Service Broker...

SQL Server

Site Classified