DBAtlas · Атлас эксплуатации баз данных

Выполнить 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) удалить нельзя.

Открыть в DBAtlas →

Связанные материалы