Выполнить truncate/drop секции с сохранением работоспособности глобальных индексов
OracleСекционированиеКоманда
-- Empty a partition / remove a partition (global indexes stay maintained):
ALTER TABLE customer_app.sale_part TRUNCATE PARTITION p2025 UPDATE INDEXES;
ALTER TABLE customer_app.sale_part DROP PARTITION p2025 UPDATE INDEXES;
-- 12c+ asynchronous global index maintenance: index is VALID but carries orphaned entries
SELECT index_name, status, orphaned_entries
FROM dba_indexes
WHERE owner = 'CUSTOMER_APP' AND table_name = 'SALE_PART';
-- Clean orphaned entries now (normally SYS.PMO_DEFERRED_GIDX_MAINT_JOB does it at night):
EXEC DBMS_PART.CLEANUP_GIDX(schema_name_in => 'CUSTOMER_APP', table_name_in => 'SALE_PART');
-- or a single index: ALTER INDEX customer_app.sale_part_id_gidx COALESCE CLEANUP;
-- Target the partition by value instead of name:
-- ALTER TABLE customer_app.sale_part DROP PARTITION FOR (DATE '2025-06-15') UPDATE INDEXES;Что делает
Мгновенно удаляет старые данные на уровне секции вместо построчного DELETE. В 12c+ UPDATE INDEXES лишь помечает глобальные индексы в словаре (асинхронное обслуживание) вместо обновления каждой записи; индекс сразу остаётся пригодным, а осиротевшие записи очищаются позже.
Когда использовать
При удалении старых периодов по политике хранения данных, в заданиях ILM/purge и чтобы избежать нагрузки undo/redo от DELETE на больших таблицах.
Внимание
Требует опции Partitioning (платная, EE). DROP/TRUNCATE необратимы (flashback table не возвращает секцию); сначала сделайте бэкап или архивируйте через exchange. Если забыть UPDATE INDEXES, глобальные индексы станут UNUSABLE, и запросы могут получить ORA-01502. Операция завершится ошибкой, если на таблицу ссылаются дочерние таблицы (FK). В interval-таблицах последнюю range-секцию (transition) удалить нельзя.