Как очистить расширенную очередь в Oracle

В документации четко указано, как очистить Oracle AQ:

dbms_aqadm.purge_queue_table()

Однако что происходит с хранилищем, особенно с верхними точками таблицы очереди, индексами и сегментами LOB? Нужно ли также сжимать таблицу?

В рабочей среде очереди почти всегда пусты (как и должно быть), но в нашей тестовой системе они по разным причинам заполняют до миллионов строк, поэтому иногда их нужно очищать.

Нужно ли смотреть на базовые таблицы и индексы или это делается автоматически?

Большое спасибо!


person wolφi    schedule 12.07.2016    source источник


Ответы (1)


DBMS_AQADM.PURGE_QUEUE_TABLE эквивалентен для усеченной таблицы. Также посмотрите на это сообщение об ошибке, когда вы пытаетесь усечь таблицу очереди

ORA-24005: Inappropriate utilities used to perform DDL on AQ table %s.%s
 *Cause:  An attempt was made to use the SQL command DROP TABLE or TRUNCATE
          TABLE or ALTER TABLE on queue metadata or tables.
 *Action: Use the DBMS_AQADM.DROP_QUEUE_TABLE to DROP TABLE,
          DBMS_AQADM.PURGE_QUEUE_TABLE to TRUNCATE TABLE.
          ALTER TABLE redefinition based on only ALTER_TABLE_PROPERTIES and
          ALTER_TABLE_PARTITIONING clauses are allowed.

Tom Kyte уже написал информацию о часто усекающей таблице https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:47911859692542

person Evgeniy K.    schedule 27.07.2016
comment
Вы имели в виду PURGE_QUEUE_TABLE вместо DROP_QUEUE_TABLE, верно? - person wolφi; 01.08.2016
comment
@wolφi О, да. Спасибо, я немедленно меняю ответ - person Evgeniy K.; 01.08.2016