Tengo una base de datos Oracle 12c y una tabla particionada. Hay una partición antigua que tiene 68734 MB, que es el 27% del total.

Necesito eliminar esta partición. Esta es una base de datos de producción y no tengo una ventana de tiempo de inactividad para esto.

Quiero saber si elimino esta partición, ¿los índices de esta tabla quedarán inutilizables o se reconstruirán? ¿Cuál sería la mejor estrategia para eliminar esta partición con un impacto mínimo en el tráfico en vivo?

Comentarios

  • Depende de los índices. Los índices globales necesitarán ser reconstruidos.

Respuesta

Cuando descarta una o más particiones, los índices locales son también cayó. Debes reconstruir los índices globales a menos que la cláusula UPDATE INDEXES o UPDATE GLOBAL INDEXES se especifique en la ALTER TABLE DROP PARTITION declaración.

Por ejemplo, tengo una tabla llamada TBL1 con partición de rango e índices globales.

SQL> select p.index_name, p.partition_name,p.status from dba_ind_partitions p, dba_indexes i where i.index_name=p.index_name and table_name="TBL1"; INDEX_NAME PARTITION_ STATUS ---------- ---------- -------- T_INDEX GI3 USABLE T_INDEX GI2 USABLE T_INDEX GI1 USABLE SQL> alter table tbl1 drop partition p0 UPDATE GLOBAL INDEXES; Table altered. SQL> select p.index_name, p.partition_name,p.status from dba_ind_partitions p, dba_indexes i where i.index_name=p.index_name and table_name="TBL1"; INDEX_NAME PARTITION_ STATUS ---------- ---------- -------- T_INDEX GI3 USABLE T_INDEX GI2 USABLE T_INDEX GI1 USABLE 

Como puede ver, si especifico la cláusula UPDATE GLOBAL INDEXES, los índices globales no se vuelven inutilizables.

Después de eliminar la partición, las entradas de los índices pertenecen a esas particiones permanecen. Cuando una consulta usa estos índices, simplemente ignoran dichas entradas (huérfanas). Puede limpiar dichas entradas huérfanas en su ventana de mantenimiento regular. También se dan detalles en la siguiente documentación.

Las operaciones de mantenimiento de la partición DROP PARTITION y TRUNCATE PARTITION se optimizan haciendo el mantenimiento del índice solo para metadatos.

En cualquier caso, el drop o truncamiento de una partición se completa inmediatamente, el índice es siempre av disponible para su uso y el mantenimiento del índice se aplaza

Documentación:

  • Mantenimiento de índice global asincrónico para eliminar y truncar particiones
  • En Oracle Database 12c

    Comentarios

    • Esta es información muy útil. ¿Tiene alguna idea sobre la duración de esta operación, dado que esta partición tiene la mayor cantidad de datos? ¿Tomará varias horas o la caída de la partición ocurre en un tiempo razonable? (con en segundos o minutos)
    • Según la última oración citada anteriormente, la eliminación real de una partición es una operación de metadatos, por lo que solo implicará actualizaciones de un puñado de registros. Básicamente será rápido.
  • Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *