Jeg har Oracle 12c-database og partitioneret tabel. Der er en gammel partition, der har 68734MB, hvilket er 27% af det samlede antal.

Jeg er nødt til at droppe denne partition. Dette er en produktionsdatabase, og jeg har ikke et nedetidsvindue til dette.

Jeg vil vide, om jeg dropper denne partition, vil indekserne i denne tabel være ubrugelige eller genopbygges? Hvad ville være den bedste strategi til at droppe denne partition med minimal indflydelse på den live trafik?

Kommentarer

  • Afhænger af indekserne. Globale indekser skal genopbygges.

Svar

Når du slipper en eller flere partitioner, er lokale indekser faldt også. Du skal genopbygge globale indekser, medmindre UPDATE INDEXES eller UPDATE GLOBAL INDEXES -klausulen er specificeret i ALTER TABLE DROP PARTITION erklæring.

For eksempel har jeg en tabel, der hedder TBL1 med rækkevidde og globale indekser.

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 

Som du kan se, hvis jeg angiver UPDATE GLOBAL INDEXES klausul, bliver globale indekser ikke ubrugelige.

Efter at partitionen er droppet, hører indeksposter til til disse partitioner forbliver. Når en forespørgsel bruger disse indekser, ignorerer de simpelthen sådanne poster (forældreløse). Du kan rydde op i sådanne forældreløse poster i dit regelmæssige vedligeholdelsesvindue. Detaljer er også angivet i de følgende dokumentationer.

Vedligeholdelsesoperationerne for partitioner DROP PARTITION og TRUNCATE PARTITION er optimeret ved kun at foretage indeksvedligeholdelse til metadata.

Under alle omstændigheder skal en partition slippe eller afkortes udfyldes med det samme, indekset er altid av tilgængelig til brug, og vedligeholdelsen af indekset udsættes

Dokumentation:

  • Asynkron global indeksvedligeholdelse til at droppe og trunke partitioner
  • På Oracle Database 12c

    Kommentarer

    • Dette er meget nyttig information. Har du nogen idé om varigheden af denne handling, da denne partition har mest data? Vil det tage flere timer, eller hvis partitionsfald sker rimelig tid? (med i sekunder eller minutter)
    • I henhold til den sidste sætning, der er citeret ovenfor, er den faktiske droppe af en partition en metadataoperation, så det vil kun involvere opdateringer til en håndfuld poster. Dybest set vil det være hurtigt.
  • Skriv et svar

    Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *