Hoy vamos a ver un poco del purgado de colas:

Tenemos 73 ordenes en coladas que se intentado procesar en multiples ocasiones y dan error.

select count(*) from EJEMPLOQUEUE_DRM_TAB;
COUNT(*)
----------
 73
select queue,msg_state,count(*) from aq$EJEMPLOQUEUE_TAB; group by queue,msg_state;
QUEUE MSG_STATE COUNT(*)
------------------------------ ---------------- ----------
CDBQUEUE_DRM READY 73

Con esto las purgamos, más detalles sobre este paquete en http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_aqadm.htm#i1014013

Ejemplo de la sentencia, basandonos en número de repeticiones.

DECLARE
 po_t dbms_aqadm.aq$_purge_options_t;
BEGIN
 dbms_aqadm.purge_queue_table('MMOADSL.EJEMPLOQUEUE_TAB;', 'qtview.RETRY_COUNT > 100' , po_t);
END;
select count(*) from EJEMPLOQUEUE_TAB;
COUNT(*)
----------
 0
 
 
Select Q_NAME, RETRY_COUNT from EJEMPLOQUEUE_TAB;
Q_NAME RETRY_COUNT
------------------------------ -----------
EJEMPLOQUEUE;_DRM 9892
EJEMPLOQUEUE;_DRM 17909
EJEMPLOQUEUE;_DRM 17912
EJEMPLOQUEUE;_DRM 17909
EJEMPLOQUEUE;_DRM 17917
EJEMPLOQUEUE;_DRM 17912
EJEMPLOQUEUE;_DRM 17912
EJEMPLOQUEUE;_DRM 17880
EJEMPLOQUEUE;_DRM 17878
EJEMPLOQUEUE;_DRM 17881
EJEMPLOQUEUE;_DRM 17871
Q_NAME RETRY_COUNT
------------------------------ -----------
EJEMPLOQUEUE;_DRM 17871
EJEMPLOQUEUE;_DRM 17873
EJEMPLOQUEUE;_DRM 17868
EJEMPLOQUEUE;_DRM 17869
EJEMPLOQUEUE;_DRM 17868
EJEMPLOQUEUE;_DRM 16813
EJEMPLOQUEUE;_DRM 16811
EJEMPLOQUEUE;_DRM 16811
EJEMPLOQUEUE;_DRM 15561
EJEMPLOQUEUE;_DRM 15306
EJEMPLOQUEUE;_DRM 15305
Q_NAME RETRY_COUNT
------------------------------ -----------
EJEMPLOQUEUE;_DRM 11617
EJEMPLOQUEUE;_DRM 11617
EJEMPLOQUEUE;_DRM 11617
EJEMPLOQUEUE;_DRM 11434
EJEMPLOQUEUE;_DRM 11428
EJEMPLOQUEUE;_DRM 11429
EJEMPLOQUEUE;_DRM 15350
EJEMPLOQUEUE;_DRM 25662
EJEMPLOQUEUE;_DRM 25666
EJEMPLOQUEUE;_DRM 25652
EJEMPLOQUEUE;_DRM 11918
Q_NAME RETRY_COUNT
------------------------------ -----------
EJEMPLOQUEUE;_DRM 11917
EJEMPLOQUEUE;_DRM 11917
EJEMPLOQUEUE;_DRM 5361
EJEMPLOQUEUE;_DRM 5360
EJEMPLOQUEUE;_DRM 5361
EJEMPLOQUEUE;_DRM 15629
EJEMPLOQUEUE;_DRM 21670
EJEMPLOQUEUE;_DRM 21674
EJEMPLOQUEUE;_DRM 15629
EJEMPLOQUEUE;_DRM 21669
EJEMPLOQUEUE;_DRM 15627
Q_NAME RETRY_COUNT
------------------------------ -----------
EJEMPLOQUEUE;_DRM 15611
EJEMPLOQUEUE;_DRM 15610
EJEMPLOQUEUE;_DRM 15610
EJEMPLOQUEUE;_DRM 8793
EJEMPLOQUEUE;_DRM 8790
EJEMPLOQUEUE;_DRM 8791
EJEMPLOQUEUE;_DRM 1871
EJEMPLOQUEUE;_DRM 25950
EJEMPLOQUEUE;_DRM 25941
EJEMPLOQUEUE;_DRM 25943
EJEMPLOQUEUE;_DRM 1871
Q_NAME RETRY_COUNT
------------------------------ -----------
EJEMPLOQUEUE;_DRM 1872
EJEMPLOQUEUE;_DRM 12769
EJEMPLOQUEUE;_DRM 12769
EJEMPLOQUEUE;_DRM 12768
EJEMPLOQUEUE;_DRM 12769
EJEMPLOQUEUE;_DRM 8795
EJEMPLOQUEUE;_DRM 8798
EJEMPLOQUEUE;_DRM 8794
EJEMPLOQUEUE;_DRM 9906
EJEMPLOQUEUE;_DRM 19360
EJEMPLOQUEUE;_DRM 19358
Q_NAME RETRY_COUNT
------------------------------ -----------
EJEMPLOQUEUE;_DRM 19353
EJEMPLOQUEUE;_DRM 15568
EJEMPLOQUEUE;_DRM 21100
EJEMPLOQUEUE;_DRM 21097
EJEMPLOQUEUE;_DRM 2787
EJEMPLOQUEUE;_DRM 2787
EJEMPLOQUEUE;_DRM 2785

ORA-24012 No se puede borrar QUEUE_TABLE

Al intentar borrar un QUEUE_TABLE me da el siguiente error, es necesario borrar primero la cola para poder borrar la tabla

BEGIN
  SYS.DBMS_AQADM.DROP_QUEUE_TABLE
    (QUEUE_TABLE          =>        '<usuario>.<nombre_tabla_cola>');
END;
/

 

BEGIN
  SYS.DBMS_AQADM.STOP_QUEUE ( QUEUE_NAME => '<usuario>.<nombre_cola>');
  SYS.DBMS_AQADM.DROP_QUEUE ( QUEUE_NAME => '<usuario>.<nombre_cola>');
END;
/