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:
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.