Oracle Streams:ORA-0001出列了吗?

时间:2013-02-15 17:36:54

标签: oracle stream queue

在生产过程中,我们偶尔会在出列消息时出现ORA-0001错误。我们使用:

  1. Solaris 10
  2. Oracle 10g
  3. C ++应用程序
  4. PROC * C with dbms_aq package for queuing operations
  5. 使用XML有效负载的队列
  6. 我们处理大量邮件(1K /分钟)。
  7. 为什么出列会导致ORA-0001(唯一约束)错误的任何线索?

    更新:按请求添加代码。

    EXEC SQL EXECUTE
    DECLARE
          message_properties dbms_aq.message_properties_t;
          dequeue_options    dbms_aq.dequeue_options_t;
          message_payload xmltype;
          tmpclob clob;
          dynamic_sql_string varchar2(512);
    
    BEGIN
    dequeue_options.wait := :iReadTimeout;
    dequeue_options.dequeue_mode := dbms_aq.REMOVE;
    dequeue_options.visibility := dbms_aq.ON_COMMIT;
    
    
    IF :iBuffered = 1 then
        dequeue_options.delivery_mode := dbms_aq.buffered;
        dequeue_options.visibility := dbms_aq.immediate;
        :iNavigationMode := 0;
    END IF;
    
    IF :iDequeueOnly = 1 and :iQueueType <> 1 THEN
        dequeue_options.dequeue_mode := dbms_aq.REMOVE_NODATA;
        dequeue_options.wait := dbms_aq.NO_WAIT;
        dequeue_options.msgid := hextoraw(:pszDequeueMsgId);
    ELSE
        IF :iNavigationMode = 0 THEN
           dequeue_options.navigation := dbms_aq.FIRST_MESSAGE;
        ELSE
           dequeue_options.navigation := dbms_aq.NEXT_MESSAGE;
        END IF;
    END IF;
    
    
    dequeue_options.deq_condition := :pszDeqCondition;
    
    dbms_aq.dequeue(queue_name => :pszQueueName,
          message_properties => message_properties,
          dequeue_options => dequeue_options,
          payload => message_payload,
          msgid => :msgid );
    IF dequeue_options.dequeue_mode <> dbms_aq.REMOVE_NODATA THEN
            EXECUTE IMMEDIATE dynamic_sql_string USING OUT tmpclob, IN message_payload;
            :gpoXmlClob := tmpclob;
    ELSE
            :gpoXmlClob := message_payload.getclobval();
    END IF;
    END;
    

0 个答案:

没有答案