Как очистить очередь в Oracle AQ - PullRequest
17 голосов
/ 24 ноября 2010

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

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

Какой лучший способ сделать это?

Ответы [ 2 ]

22 голосов
/ 24 ноября 2010

Вы можете использовать процедуру 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;
2 голосов
/ 24 ноября 2010

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

Не берите в голову, просто сделали проверку и не правильно :

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


Итак, вам придется создать небольшую подпрограмму PL / SQL для извлечения элементоввыкл.

Используйте пакет dbms_aq.Посмотрите пример из документации: Удаление сообщений из очереди .Прокрутите немного вниз и получите полный пример.

...