2012-07-24 23 views
8

NASZ SYSTEMJak zdobyć trasę do ponownego uruchomienia migracji?

staramy się umieścić migracje jako pliki .sql pod kontrolą wersji. Programiści zapisaliby plik VN __ *. Sql, zatwierdzili kontrolę wersji, a zadanie uruchamiane co 5 minut automatycznie migruje do bazy danych Dev and Test. Gdy zmiana okazała się nie powodować problemów, ktoś inny uruchomiłby pracę ręczną, aby uruchomić migrację na produkcję.

mój problem:

miałem migrację demo, który stworzył kilka stolików. Sprawdziłem V4__DemoTables.sql do kontroli wersji na moim komputerze.

W naszym Linux-ie zadanie, które działa co 5 minut, wyodrębniło nowy plik z kontroli wersji, a następnie uruchomił plik flyway.sh. Wykrył plik i wykonał go.

Ale plik .sql miał literówkę. I używamy Neteeza, która ma problemy z lochem automatycznie zawijającym migrację w BEGIN TRAN ... END TRAN. Migracja utworzyła 2 tabele, a następnie została przerwana przed trzecią.

Nie ma problemu, pomyślałem. Zrzuciłem 2 tabele, które utworzył plik .sql. Sprawdzono brak kontroli wersji V4__, naprawiono literówkę i ponownie przesłano poprawkę.

Pięć minut później aktualizacja została wyodrębniona, ale przelot reklamuje, że suma kontrolna nie jest zgodna. NIE będzie więc uruchamiał zaktualizowanego pliku V4__DemoTables.sql.

Jak uzyskać mapę drogową, aby zaakceptować zaktualizowany plik i zaktualizować sumę kontrolną w pliku SCHEMA_VERSION na wypadek literówki?

Czytanie dokumentów wygląda na to, że twórcy sugerują, że powinienem utworzyć nowy plik V4_1_DemoTables.sql z poprawkami. Ale to zderzyłoby się z poleceniami w pliku V4__, więc wydawało się to błędne.

Więc tutaj jest to, co docs sugerować muszę zrobić:

  • Zostaw V4__ jako 'udane' migracji zgodnie z tabelą SCHEMA_VERSION.

    Utwórz V4_1_, aby usunąć tabele, które zostały utworzone przed literówką w wierszu V4__.

    Utwórz V4_2_, która ma literówkę z oryginalnego pliku, aby wykonać prawdziwą pracę.

Czy to prawda?

Odpowiedz

11

Jeśli migracja zakończy się pomyślnie, ale niektóre obiekty db nie są jeszcze całkiem w porządku (literówka w nazwie kolumny, ...) Czy jak mówiłeś i popchnąć do follow-up skrypt że naprawia go (zmień nazwę kolumny, ...).

Jeśli migracja nie, a nie działać na DB z transakcji DDL, DB musi być czyszczona ręcznie .To znaczy:

  • Przywracanie skutki migracji na DB
  • Usuwanie wersję z tabeli SCHEMA_VERSION i znakowanie poprzednią jako krótkoterminowe

Ten drugi krok zostanie zautomatyzowane w przyszłości z introduction of the flyway.repair() command.

+0

Dziękuję za szybką odpowiedź. Nie wiedziałem o oznaczeniu poprzedniego rzędu jako bieżącego. –

Powiązane problemy