Как очистить очередь в Oracle AQ

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

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

Как лучше всего это сделать?


person jeph perro    schedule 23.11.2010    source источник
comment
Это решение выглядит точно так же, как приведенный здесь пример: psoug.org/reference/dbms_aqadm.html. Для тех, кому нравится документация Oracle docs.oracle.com/ cd/B19306_01/server.102/b14257/ см. примеры 8-17 и 8-18 Очистка всех сообщений в таблице очереди   -  person ono2012    schedule 04.10.2013


Ответы (2)


Вы можете использовать процедуру 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;
person erbsock    schedule 23.11.2010
comment
Сработало идеально! Большое спасибо - person Ev.Rei.; 21.02.2018

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

Ничего, только что проверил и это неправильно:

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


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

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

person JOTN    schedule 23.11.2010
comment
Я знал, что не могу удалить из таблицы очереди. Какой API я использую для удаления сообщения из очереди? - person jeph perro; 24.11.2010