Jeg har Oracle 12c-database og partisjonert tabell. Det er en gammel partisjon som har 68734 MB, som er 27% av total.

Jeg må droppe denne partisjonen. Dette er en produksjonsdatabase, og jeg har ikke et nedetidsvindu for dette.

Jeg vil vite om jeg slipper denne partisjonen, vil indeksene i denne tabellen være ubrukelige eller gjenoppbygge? Hva ville være den beste strategien for å slippe denne partisjonen med minimal innvirkning på live-trafikken?

Kommentarer

  • Avhenger av indeksene. Globale indekser må bygges opp på nytt.

Svar

Når du slipper en eller flere partisjoner, er lokale indekser falt også. Du må gjenoppbygge globale indekser med mindre UPDATE INDEXES eller UPDATE GLOBAL INDEXES klausul er spesifisert i ALTER TABLE DROP PARTITION uttalelse.

For eksempel har jeg en tabell som heter TBL1 med områdepartisjon 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 jeg kan se, hvis jeg spesifiserer UPDATE GLOBAL INDEXES klausul, vil globale indekser ikke bli ubrukelige.

Etter at partisjonen er falt, tilhører indeksoppføringer til disse partisjonene forblir. Når et spørsmål bruker disse indeksene, ignorerer de bare slike oppføringer (foreldreløse). Du kan rydde opp i slike foreldreløse oppføringer i det vanlige vedlikeholdsvinduet. Detaljer er også gitt i de følgende dokumentasjonene.

Vedlikeholdsoperasjonene for partisjonen DROP PARTITION og TRUNCATE PARTITION er optimalisert ved å bare gjøre indeksvedlikehold for metadata.

I alle fall faller eller trunkeres en partisjon fullføres umiddelbart, indeksen er alltid av tilgjengelig for bruk, og vedlikehold av indeksen utsettes

Dokumentasjon:

  • Asynkront globalt indeksvedlikehold for å slippe og avkutte partisjoner
  • På Oracle Database 12c

    Kommentarer

    • Dette er veldig nyttig informasjon. Har du noen ide om varigheten av denne operasjonen, gitt at denne partisjonen har mest mengde data? Vil det ta flere timer eller hvis partisjonsfall faller rimelig tid? (med i sekunder eller minutter)
    • I henhold til den siste setningen som er sitert ovenfor, er den faktiske slippingen av en partisjon en metadataoperasjon, så det vil bare innebære oppdateringer til en håndfull poster. I utgangspunktet vil det være raskt.
  • Legg igjen en kommentar

    Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *