Jaki jest Twój przepływ pracy związany z planowaniem migracji danych?

23

Tyle razy byłem zaangażowany w prace programistyczne i powiedziano mi coś w stylu „ok, mamy cały ten nowy kod i wymaga to zmiany tabel i migracji danych”.

Wygląda na to, że za każdym razem jest to jednorazowy scenariusz „strzelać z biodra”, który najlepiej zgaduje. Wydaje mi się, że to moja najsłabsza umiejętność jako DBA.

Chciałbym zapoznać się z niektórymi wzorcami podejścia, zarządzania i testowania migracji danych .

Proszę wskazać mi kilka najlepszych praktyk i / lub gdzie mogę zdobyć materiały do ​​nauki, które pomogą mi się lepiej w tej dziedzinie.

randomx
źródło

Odpowiedzi:

14

Za każdym razem, gdy to robię, wybieramy dwa przejścia ...

  1. zrób migawkę i pracując na innym serwerze, użyj tego, aby określić, co należy zrobić dla migracji, i wykonaj skrypt.
  2. kiedy już mają skrypt w ręku, sklep snapshop jest przywracany w systemie testowym, a jego czas sprawdza, czy uruchomi się w wymaganym czasie, czy jest dostrojony i modyfikowany, dopóki nie będzie mógł.
  3. niech zainteresowane strony podpiszą, że dane w systemie testowym nie wyglądają źle.

Następnie przez weekend masz zaplanowane przerwy:

  1. W piątek wieczorem systemy korzystające z bazy danych zostają wyłączone, wykonywana jest pełna zimna kopia zapasowa, a skrypty są uruchamiane w celu migracji / modyfikacji / czegokolwiek do danych
  2. Systemy są przywracane pod jakimś prywatnym adresem lub w jakiś sposób skonfigurowane, więc nie są otwarte dla nikogo oprócz interesariuszy do testów akceptacyjnych
  3. Jeśli zainteresowane strony wyrażą na to zgodę, system zostaje udostępniony online i upubliczniony; jeśli nie, baza danych zostanie przywrócona z kopii zapasowej wykonanej w piątek wieczorem i proces rozpocznie się od nowa.

Zgodnie z naszym harmonogramem ludzie z bazy danych zwykle mieli od 18:00 w piątek do 10 rano w sobotę na uruchomienie skryptów tworzenia kopii zapasowych i migracji, więc naszym celem było uruchomienie ich w ciągu 8 godzin (~ 6 z nich to kopie zapasowe), więc „ d mieć trochę czasu na nasze testy i poprawki, zanim zostaną udostępnione interesariuszom.

Zainteresowanym stronom podano z góry swoje okna czasowe, więc wiedzieli, że pozostawiają weekend otwarty na testy na początku okna. Powiedziano im także koniec okna, zwykle w niedzielne popołudnie, gdzie gdyby wszyscy się nie wypisali, musielibyśmy się wycofać.

Aha i oczywiście ... jeśli ktoś miał zmianę podczas jednego z testów akceptacyjnych, a my dokonaliśmy zmiany, oznaczało to, że wszystkie podpisy interesariuszy zostały unieważnione i musieli ponownie przetestować ... więc staramy się dać im wszystkim chwilę na poszukiwanie problemów i przeprowadzanie korekt jako partii, zamiast stosować je pojedynczo.

Na szczęście jedyne sytuacje, w których miałem jedną z tych sytuacji, w których nie mogliśmy mieć znacznego przestoju, systemy, które migrowałem, były zasilane ze skryptów, a nie ze strony użytkownika, więc mogłem po prostu uruchomić dwa równoległe systemy i wymienić je kiedy wszystko się wypisało. (tylko raz pojawił się problem, gdy mój szef nalegał, abyśmy wzięli pełną kopię zapasową, nie rozumiejąc, że cała sprawa będzie nadal dostępna online pod innym adresem IP ... więc co powinno być 5-minutowym przestojem na zły dzień stał się przerwą na 5 godzin).

Joe
źródło
6

Wszystko zależy od ilości danych w porównaniu do mocy sprzętu obsługującego bazę danych oraz od uzgodnień dotyczących dostępności systemu. Czy zdarza ci się czasem przestoju, czy wszystko to należy zrobić online? Rozpocznij czyszczenie danych, usuwając w jak największym stopniu nieaktualne wiersze. To jest projekt sam w sobie. Jeśli dane są czyste i wartościowe, poproś użytkownika o decyzję o przestoju. Jeśli przestoje są dostępne, jest to dość proste, jeśli jest to znana transformacja, którą należy zastosować do istniejących danych w celu utworzenia zaktualizowanego zbioru. Jeśli nie ma - lub bardzo mało - przestojów jest dozwolonych, wyzwanie się rozpoczyna. Oracle obsługuje to na kilka sposobów, takich jak redefinicja tabeli online i - nowa w 11g - redefinicja oparta na edycji. Dzięki redefinicji stołów online możesz przygotować stoły do ​​nowej formy. Można to zrobić, gdy aplikacja działa na starej formie tabel [s]. Jeśli wszystkie są gotowe, możesz przejść do nowej formy tabeli [s]. Będzie to również moment na wprowadzenie nowego kodu aplikacji i jednocześnie oznacza początek przestoju wymaganego do zainstalowania nowej aplikacji. Starsze dane historyczne można przygotować przed migracją danych na żywo i zsynchronizować za pomocą narzędzi takich jak Oracle Golden Gate. W takim scenariuszu skutecznie budujesz nową bazę danych, która przejmuje rolę starej bazy danych. Redefinicja oparta na edycji jest bardziej odpowiednia, jeśli nie są potrzebne zmiany w tabeli. Jest mnóstwo opcji do rozważenia i myślę, że trudno jest podać dobrą regułę, która zawsze działa. Będzie to również moment na wprowadzenie nowego kodu aplikacji i jednocześnie oznacza początek przestoju wymaganego do zainstalowania nowej aplikacji. Starsze dane historyczne można przygotować przed migracją danych na żywo i zsynchronizować za pomocą narzędzi takich jak Oracle Golden Gate. W takim scenariuszu skutecznie budujesz nową bazę danych, która przejmuje rolę starej bazy danych. Redefinicja oparta na edycji jest bardziej odpowiednia, jeśli nie są potrzebne zmiany w tabeli. Jest mnóstwo opcji do rozważenia i myślę, że trudno jest podać dobrą regułę, która zawsze działa. Będzie to również moment na wprowadzenie nowego kodu aplikacji i jednocześnie oznacza początek przestoju wymaganego do zainstalowania nowej aplikacji. Starsze dane historyczne można przygotować przed migracją danych na żywo i zsynchronizować za pomocą narzędzi takich jak Oracle Golden Gate. W takim scenariuszu skutecznie budujesz nową bazę danych, która przejmuje rolę starej bazy danych. Redefinicja oparta na edycji jest bardziej odpowiednia, jeśli nie są potrzebne zmiany w tabeli. Jest mnóstwo opcji do rozważenia i myślę, że trudno jest podać dobrą regułę, która zawsze działa. Starsze dane historyczne można przygotować przed migracją danych na żywo i zsynchronizować za pomocą narzędzi takich jak Oracle Golden Gate. W takim scenariuszu skutecznie budujesz nową bazę danych, która przejmuje rolę starej bazy danych. Redefinicja oparta na edycji jest bardziej odpowiednia, jeśli nie są potrzebne zmiany w tabeli. Jest mnóstwo opcji do rozważenia i myślę, że trudno jest podać dobrą regułę, która zawsze działa. Starsze dane historyczne można przygotować przed migracją danych na żywo i zsynchronizować za pomocą narzędzi takich jak Oracle Golden Gate. W takim scenariuszu skutecznie budujesz nową bazę danych, która przejmuje rolę starej bazy danych. Redefinicja oparta na edycji jest bardziej odpowiednia, jeśli nie są potrzebne zmiany w tabeli. Jest mnóstwo opcji do rozważenia i myślę, że trudno jest podać dobrą regułę, która zawsze działa.

To interesujący temat, Ronald.

ik_zelf
źródło
5

Dobre odpowiedzi do tej pory. Dodam jeszcze kilka punktów do rozważenia.

Po pierwsze, kiedy możesz przeprowadzać migrację za pomocą prostego SQL DML, możesz w dużej mierze polegać na silniku SQL, aby upewnić się, że wszystkie wiersze zostały pomyślnie przetworzone. Byłem jednak zaangażowany w migracje, gdzie część migracji była nieco bardziej skomplikowana - miały miejsce rzeczywiste transformacje danych, ponieważ dane zostały przeniesione do nowej struktury. W takich przypadkach ważne jest, aby mieć proces, który może obsługiwać następujące elementy:

  • Policz rekordy w porównaniu do rekordów przetworzonych.
  • Wykryj błędy podczas transformacji i postępuj z nimi w sposób, który umożliwia kontynuację transformacji i pozwala na ponowne przetwarzanie „złych” rekordów po zidentyfikowaniu poprawki.
  • Liczba rekordów powinna obejmować „złe” rekordy - tj. Record-in = records-out-good + bad-records
  • Jeśli transformacja zmienia liczbę rekordów (na przykład jeden rekord wejściowy staje się więcej niż jednym rekordem wyjściowym), możesz przewidzieć liczbę rekordów wyjściowych, z którymi się skończysz, a następnie przetestuj wyniki pod kątem tej liczby.

Inną kwestią, którą dodam, jest to, że ważne jest, aby mieć plan na to, co zrobisz, jeśli / kiedy sprawy nie pójdą zgodnie z planem. To jest naprawdę funkcja wdrożenia jako całości, ale wydaje się, że jest na tyle często pomijana, że ​​myślałem, że warto o tym wspomnieć.

D. Lambert
źródło
4

Omówienie tego, jak to zrobić

Zacząć z

  • Masz bazę danych „po” w teście / UAT / cokolwiek „działającej bazie danych”
  • Masz produkcyjną bazę danych „przed”. Więc użyj go, aby stworzyć gdzieś kopię produkcji = "referencyjna baza danych". I inny jako „skrypt testowy DB”
  • Mam również nadzieję, że masz wiele skryptów programistycznych ze swoimi ALTERAMI itp. Jeśli tak, kolejna kopia produkcyjna ze skryptem programistycznym zastosowana, czysto i w porządku jest przydatna = "zmień DB"

Następnie pobierz narzędzia Red Gate Compare lub coś w rodzaju menedżera zmian Embarcadero SQL . Bez tego nie można łatwo migrować. Koszt jest trywialny w stosunku do zaoszczędzonego czasu. Co najważniejsze, wygenerowane skrypty wprowadzają zmiany w jednej transakcji, co oznacza czyste wdrożenie

Teraz,

  • generować skrypty zmian i wycofywania za pomocą narzędzi porównujących „referencję” i „zmianę”
  • zastosuj skrypt zmiany do „testu skryptu” i porównaj z powrotem do „działającej bazy danych”
  • zastosuj skrypt wycofania do „testu skryptu” i porównaj z powrotem do „i porównaj z„ działającą bazą danych ”

Teraz masz bezpieczne + przetestowane skrypty zmian i wycofywania, które można stosować zawsze.

I oczywiście wykonujesz kopię zapasową bazy danych przed każdą zmianą, ponieważ statystycznie gówno zawsze nastąpi w końcu.

Narzędzia Red Gate można również porównać z folderem, który jest pod kontrolą źródła. Następnie przechwytujemy ALTERY itp. W naszej kontroli źródła osobno do rzeczywistych skryptów zmian.

gbn
źródło