Ich habe eine Oracle 12c-Datenbank und eine partitionierte Tabelle. Es gibt eine alte Partition mit 68734 MB, was 27% der Gesamtmenge entspricht.
Ich muss diese Partition löschen. Dies ist eine Produktionsdatenbank, für die ich kein Ausfallzeitfenster habe.
Ich möchte wissen, ob die Indizes dieser Tabelle unbrauchbar sind oder neu erstellt werden, wenn ich diese Partition lösche. Was wäre die beste Strategie, um diese Partition mit minimalen Auswirkungen auf den Live-Verkehr zu löschen?
Kommentare
- Abhängig von den Indizes. Globale Indizes müssen neu erstellt werden.
Antwort
Wenn Sie eine oder mehrere Partitionen löschen, sind dies lokale Indizes auch fallen gelassen. Sie müssen globale Indizes neu erstellen, es sei denn, die Klausel UPDATE INDEXES
oder UPDATE GLOBAL INDEXES
ist in der ALTER TABLE DROP PARTITION
angegeben Anweisung.
Ich habe beispielsweise eine Tabelle mit dem Namen TBL1
mit Bereichspartition und globalen Indizes.
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
Wie Sie sehen, werden globale Indizes nicht unbrauchbar, wenn ich die Klausel UPDATE GLOBAL INDEXES
spezifiziere.
Nach dem Löschen der Partition gehören Indexeinträge dazu Wenn eine Abfrage diese Indizes verwendet, ignorieren sie solche Einträge einfach (verwaist). Sie können solche verwaisten Einträge in Ihrem regulären Wartungsfenster bereinigen. Details finden Sie auch in den folgenden Dokumentationen.
Die Partitionswartungsvorgänge DROP PARTITION und TRUNCATE PARTITION werden optimiert, indem die Indexpflege nur für Metadaten durchgeführt wird.
In jedem Fall das Löschen oder Abschneiden einer Partition Wird sofort abgeschlossen, ist der Index immer av zur Verwendung verfügbar, und die Pflege des Index wird verzögert.
Dokumentation:
Kommentare
- Dies sind sehr nützliche Informationen. Haben Sie eine Vorstellung von der Zeitdauer dieses Vorgangs, da diese Partition die meisten Daten enthält? Wird es mehrere Stunden dauern oder wird die Partition in angemessener Zeit gelöscht? (mit in Sekunden oder Minuten)
- Gemäß dem oben zitierten letzten Satz ist das tatsächliche Löschen einer Partition eine Metadatenoperation, bei der nur eine Handvoll Datensätze aktualisiert werden. Grundsätzlich wird es schnell gehen.