Ho un database Oracle 12c e una tabella partizionata. Cè una vecchia partizione che ha 68734 MB che è il 27% del totale.

Devo eliminare questa partizione. Questo è un database di produzione e non ho una finestra di inattività per questo.

Voglio sapere se elimino questa partizione, gli indici di questa tabella saranno inutilizzabili o verranno ricostruiti? Quale sarebbe la strategia migliore per eliminare questa partizione con un impatto minimo sul traffico in tempo reale?

Commenti

  • Dipende dagli indici. Gli indici globali dovranno essere ricostruiti.

Risposta

Quando rilasci una o più partizioni, gli indici locali vengono anche caduto. Devi ricostruire gli indici globali a meno che la clausola UPDATE INDEXES o UPDATE GLOBAL INDEXES non sia specificata nella ALTER TABLE DROP PARTITION istruzione.

Ad esempio, ho una tabella chiamata TBL1 con partizione di intervallo e indici globali.

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 

Come puoi vedere, se specifico la clausola UPDATE GLOBAL INDEXES, gli indici globali non diventano inutilizzabili.

Dopo aver rilasciato la partizione, le voci degli indici appartengono a quelle partizioni rimangono. Quando una query utilizza questi indici, ignorano semplicemente tali voci (orfane). Puoi ripulire tali voci orfane nella normale finestra di manutenzione. I dettagli sono forniti anche nelle seguenti documentazioni.

Le operazioni di manutenzione della partizione DROP PARTITION e TRUNCATE PARTITION sono ottimizzate effettuando la manutenzione dellindice solo per i metadati.

In ogni caso, leliminazione o il troncamento di una partizione viene completato immediatamente, lindice è sempre av disponibile per luso e la manutenzione dellindice è differita

Documentazione:

  • Manutenzione asincrona dellindice globale per leliminazione e il troncamento di partizioni
  • Su Oracle Database 12c

    Commenti

    • Questa è uninformazione molto utile. Hai qualche idea sulla durata di questa operazione, dato che questa partizione ha la maggior parte dei dati? Ci vorranno diverse ore o la caduta della partizione avverrà in un tempo ragionevole? (con in secondi o minuti)
    • Secondo lultima frase citata sopra, leffettivo rilascio di una partizione è unoperazione di metadati, quindi coinvolgerà solo gli aggiornamenti di una manciata di record. Fondamentalmente sarà veloce.
  • Lascia un commento

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *