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:
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.