Gradle, Flyway & Oracle APEX czyli kilka słów o migracji. Część 1

27 listopada 2019, Lech Cieślik

Podczas pracy nad projektami dla naszych klientów często mierzymy się z problemem migracji schematów bazy danych. Wbrew pozorom nie jest to proste zadanie. Za każdym razem musimy odpowiedzieć sobie na te same pytania:

  • W którym skrypcie znajdują się zmiany zaimplementowane przez kolegę z zespołu?
  • Czy zmiany zostały już wdrożone czy może dopiero czekają na wdrożenie?
  • Czy szybka zmiana na środowisku testowym została przeniesiona na środowisko developerskie?

To tylko niektóre z dużej puli pytań które nasuwają się podczas migracji bazy danych. A w uzyskaniu odpowiedzi mogą nam pomóc narzędzia takie jak Gradle i Flyway.

Gradle + Flyway = migracja bazy danych

W tym artykule chciałbym zaprezentować jak w kilku prostych krokach przeprowadzić migrację bazy danych. W poniższym przykładzie wykorzystamy:

  • Bazę danych Oracle 12c
  • jdbc – interfejs do ustanowienia połączenia z bazą danych. Link do pobrania: https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html
  • Apache Maven – Narzędzie do budowania projektów (za jego pomocą utworzymy repozytorium i zainstalujemy jdbc). Link do pobrania: https://maven.apache.org/download.cgi
  • Gradle – narzędzie do budowania projektów. Narzędzie jest dostępne na podstawie Apache License 2.0. Pozwala na tworzenie skryptów za pomocą języka domenowego (DSL). Link do pobrania: https://gradle.org/install/
  • Flyway Community Edition – narzędzie do migracji bazy danych. Podobnie jak Gradle jest dostępny na podstawie Apache License 2.0. W poniższym przykładzie skorzystamy z funkcjonalności Flyway za pomocą pluginu org.flywaydb.flyway bezpośrednio z projektu Gradle. (Instalacja Flyway nie będzie wymagana).
  • 3 przykładowe skrypty bazy danych:
    • V1.1__TAB_EMPLOYEES – skrypt odpowiedzialny za utworzenie tabeli EMPLYEES
    • V1.2__SEQ_EMPLOYEE_ID – skrypt odpowiedzialny za utworzenie sekwencji SEQ_EMPLOYEE_ID
    • R__PKG_EMPLOYEE – skrypt odpowiedzialny za utworzenia pakietu PKG_EMPLOYEE

Więcej informacji na tematych Gradle i Flyway można znaleźć na stronie producenta:

Migracja bazy danych krok po kroku

Pobieramy Apache Maven oraz jdbc. Tworzymy rezpozytorium za pomocą komendy:

Pobieramy Gradle i ustawiamy wartości zmiennych systemowych GRADLE_HOME i Path tak żeby wskazywały na katalog z plikami źródłowymi Gradle.

Tworzymy projekt Gradle za pomocą komendy:

Wybieramy nastepujące parametry projektu:

  • Typ = basic
  • DSL = groovy
  • Project name = TEST

Po zbudowaniu projektu można zauważyć, że powistał nowy plik build.gradle. Poprzez jego edycję do naszego projektu dodamy plugin ‚org.flywaydb.flyway’, zdefiniujemy połączenie do bazy danych oraz podstawowe parametry migracji.

Mój plik build.gradle wygląda w następujący sposób:

Do katalogu naszego projektu dodajemy folder database gdzie umieszczamy wszystkie skrypty bazy danych (patrz parametr locations w build.gradle). Bardzo ważne jest nazewnictwo poszczególnych skryptów. Odpowiedni format nazwy pozwala na rozróżnienie rodzaju plików oraz na kolejność ich wgrywania:

  • V1.1__TAB_EMPLOYEES
    • V – Migracja typu: versioned,
    • 1.1 – numer wersji
    • __ – separator
    • TAB_EMPLOYEES – nazwa
  • R__PKG_EMPLOYEE
    • R – Migracja typu: repeatable
    • __ – separator
    • PKG_EMPLOYEE – nazwa

Rozpoczynamy migrację bazy danych z wykorzystaniem funkcjonalności Flyway. Na początku sprawdźmy aktualny stan procesu migracji za pomocą komendy:

Rezultat poniżej:

Aktualnie na migrację oczekują 3 skrypty. Ważna jest kolejność uruchamiania skryptów za co odpowiada numer wersji. Plik repetable to plik z kodem pakietu. Zmiany w tym pliku sprawdzane są za pomocą checksumy przechowywanej w tabeli flyway_scheme_history która zostanie utworzona na naszym schemacie podczas pierwszej migracji.

Uruchamiamy migrację za pomoca komendy:

Nastepnie sprawdzamy wyniki procesu za pomocą znanej już komendy gradlew flywayInfo.

Migracja zakończyła się sukcesem.

Podsumowanie

Migracja bazy danych nie należy do rzeczy najłatwieszych. Musimy byc pewni, że odpowiednie skrypty zostały zainstalowane a spójność schematów bazodanowych została zachowana na wszystkich środowiskach. W niniejszym artykule przedstawiliśmy krótki przewodnik jak zautomatyzować proces migracji za pomocą narzedzi Gradle i Flyway. Pokazaliśmy jak za pomocą kilku prostych komend wykonać i zweryfikować poprawność procesu migracji. W kolejnym artykule przedstawimy inne możliwości Gradle które pozwolą nam na migrację aplikacji Oracle APEX za pomocą tylko jednej komendy. Bazując na własnym doświadczeniu mogę powiedzieć, że praca z tymi narzędziami początkowo może wydawać się trudna jednak z biegiem czasu każdy docenia ich użycie.

Tagi: , , , ,

Zapraszamy do kontaktu!

Pretius jest firmą tworząca oprogramowanie wspierające biznes.
Tworzymy aplikacje webowe wykorzystując: Java, Oracle DB, Oracle Apex, AngularJS.
Skontaktuj się z nami, aby porozmawiać o tym jak możemy pomóc w realizacji Twojego projektu!