Mam bazę danych Oracle 12c i partycjonowaną tabelę. Istnieje stara partycja, która ma 68734 MB, co stanowi 27% całości.

Muszę porzucić tę partycję. To jest produkcyjna baza danych i nie mam do tego okna przestoju.

Chcę wiedzieć, czy jeśli usunę tę partycję, indeksy tej tabeli będą bezużyteczne lub czy zostaną odbudowane? Jaka byłaby najlepsza strategia upuszczenia tej partycji przy minimalnym wpływie na ruch na żywo?

Komentarze

  • Zależy od indeksów. Globalne indeksy będą musiały zostać odbudowane.

Odpowiedź

Po upuszczeniu jednej lub więcej partycji indeksy lokalne są również spadł. Musisz przebudować indeksy globalne, chyba że klauzula UPDATE INDEXES lub UPDATE GLOBAL INDEXES jest określona w ALTER TABLE DROP PARTITION

Na przykład mam tabelę o nazwie TBL1 z partycją zakresu i indeksami globalnymi.

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 

Jak widać, jeśli podam klauzulę UPDATE GLOBAL INDEXES, indeksy globalne nie staną się bezużyteczne.

Po usunięciu partycji wpisy indeksów należą do tych partycji pozostają. Kiedy kwerenda używa tych indeksów, po prostu ignorują takie wpisy (osierocone). Możesz wyczyścić takie osierocone wpisy w swoim zwykłym oknie obsługi. Szczegóły są również podane w następujących dokumentach.

Operacje obsługi partycji DROP PARTITION i TRUNCATE PARTITION są optymalizowane poprzez utrzymywanie indeksu tylko dla metadanych.

W każdym przypadku porzucenie lub obcięcie partycji kończy się natychmiast, indeks jest zawsze av gotowe do użycia, a utrzymanie indeksu jest odroczone

Dokumentacja:

  • Asynchroniczna obsługa indeksu globalnego w celu usuwania i obcinania partycji
  • W Oracle Database 12c

    Komentarze

    • To jest bardzo przydatna informacja. Czy masz pojęcie o czasie trwania tej operacji, biorąc pod uwagę, że ta partycja zawiera najwięcej danych? Czy zajmie to kilka godzin, czy porzucenie partycji nastąpi w rozsądnym czasie? (w sekundach lub minutach)
    • Zgodnie z ostatnim cytowanym powyżej zdaniem, faktyczne usunięcie partycji jest operacją na metadanych, więc będzie obejmować tylko aktualizacje kilku rekordów. Zasadniczo będzie to szybkie.
  • Dodaj komentarz

    Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *