?
Solved

Oracle Advanced Queue: Dequeue not working, stuck in WAIT state, DELAY_TIMESTAMP - SYSTIMESTAMP > 0

Posted on 2009-07-01
2
Medium Priority
?
4,835 Views
Last Modified: 2013-12-19
The queue's view DELAY_TIMESTAMP column appears to have the correct time, but when compared to SYSTIMESTAMP, there's an unexpected five hour difference.   After the message should have gone to the READY state, it is still in the WAIT state.

For example, a message is enqueued using DBMS_AQ.ENQUEUE with delay of 60 seconds.  I wait till well after the message should be dequeued.  The message is still in the queue despite attempting to dequeue it with DBMS_AQ.DEQUEUE.  Here is what the query looks like.

select delay_timestamp, systimestamp , delay_timestamp - systimestamp
from AQ$THE_QUEUE;
DELAY_TIMESTAMP =                     7/1/2009 8:23:05.769546 PM
SYSTIMESTAMP =                            7/1/2009 9:06:23.944861 PM +00:00
DELAY_TIMESTAMP-SYSTIMESTAMP   +00 04:16:41.824685

The difference should be negative because the time should have expired.  However, it's positive, exactly 5 hours less the time since it was enqueued.

This code worked fine until it was re-installed as part of dropping and creating the Oracle user.  It works fine on Oracle XE and other databases.  The problem is consistent with some change having been done either in Oracle or the Unix operating system.  I don't have control over those systems and the administrator says nothing changed.  Oracle has been stopped and started since the problem was noticed.  The queue table was then dropped and recreated.

Do you have any idea as to what could cause the difference?  It looks like a difference between GMT and CDT time zones.  It could be related to the session time zone.

It is Oracle 10g 10.2.0.4.0.

Thank you...

w_enqueue_options    dbms_aq.enqueue_options_t;
   w_message_handle     RAW(16);
   w_message_properties dbms_aq.message_properties_t;
BEGIN
   w_obj := NEW obj();
   w_message_properties.delay := 60;
 
   dbms_aq.enqueue(queue_name => 'AQ.THE_QUEUE',
                   enqueue_options => w_enqueue_options,
                   message_properties => w_message_properties,
                   payload => w_obj,
                   msgid => w_message_handle);
 
END;

Open in new window

0
Comment
Question by:EdFred
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
2 Comments
 
LVL 13

Expert Comment

by:anand_2000v
ID: 24770713
what about the code to dequeue?
0
 

Accepted Solution

by:
EdFred earned 0 total points
ID: 24785927
Thanks for the reply.

Here's the DEQUEUE code.  I do not expect DEQUEUE to retrieve any data because the because the message MSG_STATE is WAIT.

But it is moot.  I just decided to not use Oracle AQ.  It's has a lot of neat features and works with the many tests I've run on it.  But, for me, it has not been as stable as regular tables.

It's not worth investigating anymore.
-Ed
   w_dequeue_options    DBMS_AQ.DEQUEUE_OPTIONS_T;
   w_message_handle     RAW(16);
   w_message_properties DBMS_AQ.MESSAGE_PROPERTIES_T;
BEGIN
   w_dequeue_options.wait := 30;
   --in_filter is an input arg
   w_dequeue_options.deq_condition :='tab.user_data.filter='''||in_filter||'''';
 
   DBMS_AQ.DEQUEUE(queue_name => 'AQ.THE_QUEUE',
                   dequeue_options => w_dequeue_options,
                   message_properties => w_message_properties,
                   payload => w_obj,   --SP instantiates v_message
                   msgid => w_message_handle);

Open in new window

0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

How to Create User-Defined Aggregates in Oracle Before we begin creating these things, what are user-defined aggregates?  They are a feature introduced in Oracle 9i that allows a developer to create his or her own functions like "SUM", "AVG", and…
I remember the day when someone asked me to create a user for an application developement. The user should be able to create views and materialized views and, so, I used the following syntax: (CODE) This way, I guessed, I would ensure that use…
This video shows information on the Oracle Data Dictionary, starting with the Oracle documentation, explaining the different types of Data Dictionary views available by group and permissions as well as giving examples on how to retrieve data from th…
This video shows how to configure and send email from and Oracle database using both UTL_SMTP and UTL_MAIL, as well as comparing UTL_SMTP to a manual SMTP conversation with a mail server.
Suggested Courses

765 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question