DBAtlas · Atlas de operaciones de bases de datos

Truncar/eliminar una partición manteniendo utilizables los índices globales

OracleParticionamiento

Comando

-- 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;

Qué hace

Elimina al instante los datos antiguos a nivel de partición en lugar de un DELETE fila a fila. En 12c+, UPDATE INDEXES solo marca los índices globales en el diccionario (mantenimiento asíncrono) en lugar de actualizar cada entrada; el índice sigue utilizable de inmediato y las entradas huérfanas se limpian más tarde.

Cuándo usarlo

Al purgar periodos antiguos según una política de retención de datos, en jobs de ILM/purga, y para evitar la carga de undo/redo de DELETE en tablas grandes.

Precaución

Requiere la opción Partitioning (EE con costo adicional). DROP/TRUNCATE es irreversible (flashback table no recupera una partición); haga antes un backup o archívela mediante exchange. Si se olvida UPDATE INDEXES, los índices globales pasan a UNUSABLE y las consultas pueden recibir ORA-01502. La operación falla si hay tablas hijas que la referencian (FK). En tablas interval no se puede eliminar la última partición range (de transición).

Abrir en DBAtlas →

Relacionado