Jag har Oracle 12c-databas och partitionerad tabell. Det finns en gammal partition som har 68734MB vilket är 27% av det totala.

Jag måste släppa den här partitionen. Detta är en produktionsdatabas och jag har inget stilleståndsfönster för detta.

Jag vill veta om jag tappar den här partitionen, kommer indexen i denna tabell att vara oanvändbara eller byggas om? Vad skulle vara den bästa strategin för att släppa den här partitionen med minsta möjliga inverkan på direkttrafiken?

Kommentarer

  • Beror på indexen. Globala index måste byggas om.

Svar

När du släpper en eller flera partitioner är lokala index tappade också. Du måste bygga om globala index såvida inte UPDATE INDEXES eller UPDATE GLOBAL INDEXES klausulen anges i ALTER TABLE DROP PARTITION uttalande.

Till exempel har jag en tabell som heter TBL1 med intervallpartition och globala index.

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 jag kan se, om jag anger UPDATE GLOBAL INDEXES klausul, blir globala index inte oanvändbara.

Efter att ha tappat partitionen hör indexposter till dessa partitioner kvar. När en fråga använder dessa index ignorerar de bara sådana poster (föräldralösa). Du kan städa upp sådana föräldralösa poster i ditt vanliga underhållsfönster. Detaljer ges också i följande dokumentationer.

Partitionens underhållsoperationer DROP PARTITION och TRUNCATE PARTITION optimeras genom att endast indexet underhålls för metadata.

I vilket fall som helst tappar eller trunkerar du en partition slutför omedelbart, indexet är alltid av kan användas och underhållet av indexet skjuts upp

Dokumentation:

  • Asynkront globalt indexunderhåll för att tappa och trunka partitioner
  • På Oracle Database 12c

    Kommentarer

    • Detta är mycket användbar information. Har du någon aning om hur länge operationen är, med tanke på att den här partitionen har mest data? Kommer det ta flera timmar eller faller partitionen på rimlig tid? (med i sekunder eller minuter)
    • Enligt den sista meningen som citeras ovan är den faktiska släppningen av en partition en metadataåtgärd, så det innebär bara uppdateringar av en handfull poster. I grund och botten blir det snabbt.
  • Lämna ett svar

    Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *