2010-11-23 21 views
17

Ich habe Oracle AQ zum ersten Mal getestet. Ich habe es geschafft, 2000 Reihen von Testeinfügungen in die von mir erstellte Warteschlange zu schreiben.So löschen Sie eine Warteschlange in Oracle AQ

Jetzt möchte ich diese herausräumen. Wie ich mir selbst beibrachte, habe ich die Ablaufzeit auf einen Monat festgelegt. Ich kann nicht so lange warten. Und ich glaube nicht, dass ich sie einfach aus der Queue-Tabelle löschen sollte.

Was ist der beste Weg, dies zu tun?

+1

Diese Lösung genau wie das Beispiel sieht hier: http://psoug.org/reference/dbms_aqadm.html. Für diejenigen, die Oracle Docs http://docs.oracle.com/cd/B19306_01/server.102/b14257/aq_admin.htm#BAJFEDGG mögen, siehe Beispiele 8-17 und 8-18 "Alle Nachrichten in einer Queue-Tabelle löschen" – ono2012

Antwort

19

Sie können die DBMS_aqadm.purge_queue_table Prozedur verwenden.


SOLUTION

Das sieht SQL etwas wie folgt aus:

-- 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

Arbeitete perfekt! Danke vielmals –

2

Führen Sie einen Löschvorgang in der Queue-Tabelle durch.

Es macht nichts, habe gerade einen Scheck und that's not right:

Oracle Streams AQ unterstützen Datenbearbeitungssprache (DML) Operationen an Warteschlange Tabellen oder zugehörige Index-organisierte Tabellen (IOT), wenn überhaupt nicht. Das einzige unterstützte Mittel zum Ändern von Warteschlangentabellen sind die bereitgestellten APIs. Queue-Tabellen und IOTs können inkonsistent werden und daher effektiv ruiniert werden, wenn DML-Operationen für sie ausgeführt werden.


So werden Sie ein wenig PL/SQL-Routine erstellen müssen, um aus den Gegenständen zu ziehen.

Verwenden Sie das dbms_aq Paket. Überprüfen Sie das Beispiel aus der Dokumentation: Dequeuing Messages. Scrollen Sie ein wenig runter und es gibt ein komplettes Beispiel.

+0

Ich wusste, dass ich nicht aus der Queue-Tabelle löschen konnte. Mit welcher API lösche ich eine Nachricht aus der Warteschlange? –