2010-11-23 22 views
17

He estado probando Oracle AQ por primera vez. Pude crear 2000 filas de insertos de prueba en la cola que creé.Cómo borrar una cola en Oracle AQ

Ahora, me gustaría borrarlos. Como me estaba enseñando a mí mismo, establecí el tiempo de vencimiento en un mes. No puedo esperar tanto tiempo. Y no creo que deba eliminarlos de la tabla de espera.

¿Cuál es la mejor manera de hacerlo?

+1

Esta solución se ve exactamente como el ejemplo aquí: http://psoug.org/reference/dbms_aqadm.html. Para aquellos a los que les gustan los documentos de Oracle http://docs.oracle.com/cd/B19306_01/server.102/b14257/aq_admin.htm#BAJFEDGG, consulte los ejemplos 8-17 y 8-18 "Purga de todos los mensajes en una tabla de cola" – ono2012

Respuesta

19

Puede usar el procedimiento DBMS_aqadm.purge_queue_table.


SOLUCIÓN

El SQL se ve algo como esto:

-- purge queue 
DECLARE 
po_t dbms_aqadm.aq$_purge_options_t; 
BEGIN 
    dbms_aqadm.purge_queue_table('MY_QUEUE_TABLE', NULL, po_t); 
END; 
+0

¡Funcionó perfecto! Muchas gracias –

2

Simplemente haga una eliminación en la tabla de espera.

No importa, acaba de hacer un cheque y that's not right:

Oracle Streams AQ no soporta operaciones de lenguaje de manipulación de datos (DML) en las mesas de cola o tablas organizadas por índices asociados (IOT), si los hubiere. El único medio admitido para modificar tablas de cola es a través de las API provistas. Las tablas de cola y las IOT pueden volverse inconsistentes y, por lo tanto, arruinadas de manera efectiva si se realizan operaciones DML en ellas.


Por lo tanto, tendrá que crear una pequeña rutina PL/SQL para tirar de los elementos fuera.

Utilice el paquete dbms_aq. Consulte el ejemplo de la documentación: Dequeuing Messages. Desplácese un poco hacia abajo y hay un ejemplo completo.

+0

Sabía que no podía eliminar de la tabla de espera. ¿Qué API utilizo para eliminar un mensaje de la cola? –

Cuestiones relacionadas