duży przepływ danych

11

Chciałbym przenieść miliardy wierszy ze schema1.table1 do nowego schema2.table2, gdzie table2 jest refaktoryzowanym z table1. Stąd ich struktura tabel jest inna. zarówno tabela 1, jak i tabela 2 są podzielone na partycje, ale tabela 2 jest pusta. Oba te schematy znajdują się w tej samej bazie danych Oracle. Jaki jest efektywny sposób przeprowadzania tej migracji danych? Czy chcesz wykonać zatwierdzenie tylko na samym końcu, czy zdecydować się na zatwierdzenie przyrostowe? tzn. powiedzmy, że migracja danych kończy się niepowodzeniem po ukończeniu 99% zadania, które zajęło kilka godzin. Czy wycofujesz się teraz? Jeśli wykonasz zatwierdzenie przyrostowe, jak poradzisz sobie z niepowodzeniem?

Jan
źródło

Odpowiedzi:

8

Równolegle INSERT APPENDze NOLOGGINGbyłby sposób, aby to zrobić, to podobnie jak w przypadku wszystkich operacji NOLOGGING, wziąć kopię zapasową natychmiast po zakończeniu. Najpierw zaznacz indeksy bezużyteczne, wyłącz ograniczenia, zmień tabelę, wykonaj operację, a następnie ponownie włącz ograniczenia itp.

Append powoduje, że Oracle zawsze chwyta wolne miejsce powyżej obecnego wysokiego poziomu wody, więc nie jest efektywne w ponownym wykorzystywaniu przestrzeni w segmencie, ale pozwala uniknąć majstrowania przy liście swobodnej i kosztach UNDO. Jeśli musisz zacząć od nowa z jakiegokolwiek powodu, TRUNCATEnie rób tego DELETE.

Jeśli chodzi o zatwierdzanie przyrostowe, będzie to zależeć od tego, w jaki sposób dane są podzielone na segmenty. Czy możesz łatwo powiedzieć, że przenosisz wartość miesiąca na raz (np. Czy schemat partycjonowania jest taki sam w źródle i celu)? Ponieważ pamiętaj, że jeśli musisz spełnić jakieś orzeczenie, to oczywiście cię spowolni. Sprawdź, aby upewnić się, że operacja nie zawiedzie logicznie (np. Niezgodne typy danych w źródłowym i docelowym), a następnie przydziel wystarczające zasoby i po prostu przejdź do jednej transakcji. Powodzenia!

Gajusz
źródło
Wiem, że używanie redefinu online będzie wolne, ale dbms_redef może nawet nie obsługiwać powyższego scenariusza?
John
3

jeśli schemat partycji jest taki sam (dane partycji a w tabeli 1 trafiają do partycji a w tabeli 2 itd.), to wybrałbym wiele sesji i kazałem każdej sesji dołączyć swoje dane do „własnej” partycji. Zapobiega to częstemu blokowaniu i ma najlepszą prędkość. W zależności od sprzętu możesz napełnić karty HBA do samej szyi. Zatwierdzenie dla każdej partycji - zakładając więcej niż kilka wierszy dla każdej partycji - nie będzie problemem i na pewno bym to zrobił. Zakładając, że aplikacja nie działa podczas migracji, cofnięcie jest proste: nie zmieniaj aplikacji i obcinaj partycje tabeli 2 przed ponowną próbą, przynajmniej w tych częściach, w których aplikacja zmieniła dane przed drugim uruchomieniem.

mam nadzieję, że to pomoże

ik_zelf
źródło