2010-11-23 1 views
17

Я тестировал Oracle AQ в первый раз. Мне удалось создать 2000 строк тестовых вставок в созданной мной очереди.Как очистить очередь в Oracle AQ

Теперь я хотел бы очистить их. Когда я учился, я назначил время истечения месяца. Я не могу так долго ждать. И я не думаю, что я должен просто удалить их из таблицы очередей.

Каков наилучший способ для этого?

+1

Это решение выглядит точно так же, как пример здесь: http://psoug.org/reference/dbms_aqadm.html. Для тех, кто любит документы Oracle http://docs.oracle.com/cd/B19306_01/server.102/b14257/aq_admin.htm#BAJFEDGG, см. Примеры 8-17 и 8-18 «Очистка всех сообщений в таблице очередей» – ono2012 2013-10-03 22:25:03

ответ

19

Вы можете использовать процедуру DBMS_aqadm.purge_queue_table.


РЕШЕНИЕ

SQL, выглядит примерно так:

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

Работал отлично! большое спасибо – 2018-02-21 15:59:12

2

Просто сделайте удаление в таблице очередей.

Ничего, просто сделал чек и that's not right:

Oracle Streams AQ не поддерживает язык манипулирования данными (DML) операции по таблицам очередей или связанных с ними индексов организованные таблицы (IOTs), если таковые имеются. Единственное поддерживаемое средство изменения таблиц очереди - через поставляемые API. Таблицы очередей и IOT могут стать непоследовательными и, следовательно, эффективно разрушены, если на них выполняются операции DML.


Таким образом, вы должны создать немного PL/SQL процедуру, чтобы вытащить элементы прочь.

Используйте пакет dbms_aq. Проверьте пример из документации: Dequeuing Messages. Прокрутите немного вниз, и есть полный пример.

+0

Я знал, что не могу удалить из таблицы очередей. Какой API я использую для удаления сообщения из очереди? – 2010-11-23 23:11:59