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
Solved

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

Posted on 2009-07-01
2
4,637 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
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: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying 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

Have you ever had to make fundamental changes to a table in Oracle, but haven't been able to get any downtime?  I'm talking things like: * Dropping columns * Shrinking allocated space * Removing chained blocks and restoring the PCTFREE * Re-or…
How to Unravel a Tricky Query Introduction If you browse through the Oracle zones or any of the other database-related zones you'll come across some complicated solutions and sometimes you'll just have to wonder how anyone came up with them.  …
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.
This videos aims to give the viewer a basic demonstration of how a user can query current session information by using the SYS_CONTEXT function

808 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