Prezentacja wygłoszona na Wrocławskim JUGu 30 września 2015. Prezentacja opisuje w jaki sposób można zarządzać zmianami w relacyjnych bazach danych i jak ten problem rozwiązuje Liquibase.
Prezentacja powstała na potrzeby prezentacji JUG Bielsko-Biała.
Na początku zaczynamy od postawienia sobie pytania dlaczego liquibase jest nam potrzebny i z jakimi problemami spotykamy się na co dzień podczas zarządzania schematem relacyjnej bazy danych.
W kolejnej części prezentacji odpowiadamy sobie na zadane pytania zgłębiając wiedzę o liquibase
Do prezentacji dołączony jest demo: https://github.com/mlubanski/questionnarie-server
Nowadays, CPU microarchitecture is concealed from developers by compilers, VMs, etc.
Do Java developers need to know microarchitecture details of modern processors?
Or, does it like to learn quantum mechanics for cooking?
Are Java developers safe from leaking low-level microarchitecture details into high level application performance behaviour?
We will try to answer these questions by analyzing several Java examples.
Prezentacja powstała na potrzeby prezentacji JUG Bielsko-Biała.
Na początku zaczynamy od postawienia sobie pytania dlaczego liquibase jest nam potrzebny i z jakimi problemami spotykamy się na co dzień podczas zarządzania schematem relacyjnej bazy danych.
W kolejnej części prezentacji odpowiadamy sobie na zadane pytania zgłębiając wiedzę o liquibase
Do prezentacji dołączony jest demo: https://github.com/mlubanski/questionnarie-server
Nowadays, CPU microarchitecture is concealed from developers by compilers, VMs, etc.
Do Java developers need to know microarchitecture details of modern processors?
Or, does it like to learn quantum mechanics for cooking?
Are Java developers safe from leaking low-level microarchitecture details into high level application performance behaviour?
We will try to answer these questions by analyzing several Java examples.
Slides from the keynote held at the Ruby Social Club Milano by one of our developers and presenting an outlook of four Ruby on Rails plugin spinned off the web site and released as Open Source on GitHub.
Please visit http://panmind.org/ and http://github.com/Panmind for more information about the site and the released code.
Sharing is caring! :-)
A session describing how and why is possible to do professional security penetration testing solely using free software code and tools. We will be showcasing some of this tools and having a conversation to see how we can make this tools succeed in the field, come up with new ideas and maybe a project we can work on during the year for the intention to promote free software in the redteam security field.
A brief history of hacker ethics on computer and software hacking, why both communities have the same roots and were are they now.
Książka "Oracle9i. Administrowanie bazami danych od podstaw" krok po kroku wyjaśnia sposoby efektywnego administrowania bazą danych Oracle. Poznasz dzięki niej najważniejsze nowe funkcje baz danych Oracle9, zaznajomisz się z zadaniami czekającymi administratora baz danych, a także poznasz wiele cennych wskazówek, ułatwiających codzienną pracę z Oraclem.
Jeśli jeszcze nie miałeś styczności z zaawansowanymi systemami bazodanowymi, znalazłeś właśnie doskonałe źródło informacji, dzięki któremu zdobędziesz wiele poszukiwanych na rynku pracy umiejętności.
Książka jest idealnym źródłem wiedzy dla początkujących administratorów na temat:
* Instalacji i konfiguracji wydajnej bazy danych Oracle
* Kontroli działania bazy danych za pomocą perspektyw DBA_ i V$
* Wykorzystania różnych poziomów ochrony danych
* Monitorowania i dostrajania bazy danych
* Stosowania narzędzi i programów Oracle
* Utrzymywania niezawodności i stałego dostępu do bazy danych
* Sposobów zapewnienia maksymalnej wydajności serwera bazodanowego
* Wykonywania kopii zapasowych i odtwarzania bazy danych
Poznaj podstawy obsługi wydajnej, stabilnej i bezpiecznej bazy danych
* Jak zainstalować i skonfigurować PostgreSQL?
* W jaki sposób tworzyć i modyfikować tabele?
* Jak manipulować danymi za pomocą języka SQL?
Oprogramowanie dostępne na licencji open source staje się coraz popularniejsze. Nikogo już chyba nie dziwi fakt, że nawet wśród największych i najbardziej rozbudowanych systemów znajdziemy produkty bezpłatne. Jednym z nich jest system zarządzania bazami danych PostgreSQL - powszechnie uważany za najbardziej uniwersalny i stabilny spośród baz danych rozprowadzanych na zasadach wolnego dostępu. PostgreSQL ma dwie wersje - dla systemów Windows i Linux - a jego możliwości wykorzystywane są zarówno przez twórców portali sieciowych, jak i potężnych systemów korporacyjnych przetwarzających ogromne ilości danych.
Książka „PostgreSQL 8.3. Ćwiczenia” to krótkie i skuteczne wprowadzenie w zasady używania tego systemu baz danych. Czytając ją i wykonując zawarte w niej ćwiczenia, dowiesz się, jak zainstalować PostgreSQL w Windows i Linuksie, oraz szybko poznasz podstawy administrowania serwerem bazy danych i kontami jej użytkowników. Nauczysz się tworzyć tabele, dobierać odpowiednie typy danych i budować indeksy. Opanujesz język SQL służący do manipulowania danymi w tabelach. Przeczytasz także o transakcjach i więzach integralności.
* Instalacja serwera PostgreSQL w systemach Windows i Linux
* Uruchamianie i zatrzymywanie serwera
* Obsługa kont użytkowników
* Zarządzanie bazami danych
* Podstawowe koncepcje relacyjnych baz danych
* Typy danych w PostgreSQL
* Tworzenie, modyfikowanie i usuwanie tabel
* Pobieranie danych i przetwarzanie wyników zapytania
* Złożone zapytania SQL
* Obsługa transakcji
Przekonaj się, dlaczego PostgreSQL zyskał tak ogromne uznanie.
This is my presentation about Red Gate SQL Doc that I have presented on one of the meatings of Lodzka Grupa Profesjonalistow IT & .NET. Presentation in Polish.
Slides from the keynote held at the Ruby Social Club Milano by one of our developers and presenting an outlook of four Ruby on Rails plugin spinned off the web site and released as Open Source on GitHub.
Please visit http://panmind.org/ and http://github.com/Panmind for more information about the site and the released code.
Sharing is caring! :-)
A session describing how and why is possible to do professional security penetration testing solely using free software code and tools. We will be showcasing some of this tools and having a conversation to see how we can make this tools succeed in the field, come up with new ideas and maybe a project we can work on during the year for the intention to promote free software in the redteam security field.
A brief history of hacker ethics on computer and software hacking, why both communities have the same roots and were are they now.
Książka "Oracle9i. Administrowanie bazami danych od podstaw" krok po kroku wyjaśnia sposoby efektywnego administrowania bazą danych Oracle. Poznasz dzięki niej najważniejsze nowe funkcje baz danych Oracle9, zaznajomisz się z zadaniami czekającymi administratora baz danych, a także poznasz wiele cennych wskazówek, ułatwiających codzienną pracę z Oraclem.
Jeśli jeszcze nie miałeś styczności z zaawansowanymi systemami bazodanowymi, znalazłeś właśnie doskonałe źródło informacji, dzięki któremu zdobędziesz wiele poszukiwanych na rynku pracy umiejętności.
Książka jest idealnym źródłem wiedzy dla początkujących administratorów na temat:
* Instalacji i konfiguracji wydajnej bazy danych Oracle
* Kontroli działania bazy danych za pomocą perspektyw DBA_ i V$
* Wykorzystania różnych poziomów ochrony danych
* Monitorowania i dostrajania bazy danych
* Stosowania narzędzi i programów Oracle
* Utrzymywania niezawodności i stałego dostępu do bazy danych
* Sposobów zapewnienia maksymalnej wydajności serwera bazodanowego
* Wykonywania kopii zapasowych i odtwarzania bazy danych
Poznaj podstawy obsługi wydajnej, stabilnej i bezpiecznej bazy danych
* Jak zainstalować i skonfigurować PostgreSQL?
* W jaki sposób tworzyć i modyfikować tabele?
* Jak manipulować danymi za pomocą języka SQL?
Oprogramowanie dostępne na licencji open source staje się coraz popularniejsze. Nikogo już chyba nie dziwi fakt, że nawet wśród największych i najbardziej rozbudowanych systemów znajdziemy produkty bezpłatne. Jednym z nich jest system zarządzania bazami danych PostgreSQL - powszechnie uważany za najbardziej uniwersalny i stabilny spośród baz danych rozprowadzanych na zasadach wolnego dostępu. PostgreSQL ma dwie wersje - dla systemów Windows i Linux - a jego możliwości wykorzystywane są zarówno przez twórców portali sieciowych, jak i potężnych systemów korporacyjnych przetwarzających ogromne ilości danych.
Książka „PostgreSQL 8.3. Ćwiczenia” to krótkie i skuteczne wprowadzenie w zasady używania tego systemu baz danych. Czytając ją i wykonując zawarte w niej ćwiczenia, dowiesz się, jak zainstalować PostgreSQL w Windows i Linuksie, oraz szybko poznasz podstawy administrowania serwerem bazy danych i kontami jej użytkowników. Nauczysz się tworzyć tabele, dobierać odpowiednie typy danych i budować indeksy. Opanujesz język SQL służący do manipulowania danymi w tabelach. Przeczytasz także o transakcjach i więzach integralności.
* Instalacja serwera PostgreSQL w systemach Windows i Linux
* Uruchamianie i zatrzymywanie serwera
* Obsługa kont użytkowników
* Zarządzanie bazami danych
* Podstawowe koncepcje relacyjnych baz danych
* Typy danych w PostgreSQL
* Tworzenie, modyfikowanie i usuwanie tabel
* Pobieranie danych i przetwarzanie wyników zapytania
* Złożone zapytania SQL
* Obsługa transakcji
Przekonaj się, dlaczego PostgreSQL zyskał tak ogromne uznanie.
This is my presentation about Red Gate SQL Doc that I have presented on one of the meatings of Lodzka Grupa Profesjonalistow IT & .NET. Presentation in Polish.
Dane i informacje to dziś najcenniejszy towar. Systemy zarządzania bazami danych to potężne narzędzia, pozwalające nie tylko na przechowywanie danych, ale także na ich przetwarzanie, modyfikowanie i wydobywanie w oparciu o przeróżne kryteria. Podstawą wszystkich operacji na danych zgromadzonych w bazach jest język SQL -- narzędzie służące do manipulowania zbiorami informacji. SQL, przyjęty i zatwierdzony przez międzynarodowe organizacje i komitety standaryzacyjne, jest wykorzystywany w niemal wszystkich systemach zarządzania bazami danych. Każdy z producentów dodaje do niego "własne" elementy, ale rdzeń języka pozostaje taki sam niezależnie od platformy.
Książka "SQL. Od podstaw" to podręcznik języka SQL i omówienie zagadnień związanych z projektowaniem baz danych przeznaczone dla osób wkraczających dopiero w świat baz danych. Przedstawia podstawowe wyrażenia języka SQL, służące do wprowadzania danych do bazy, wyciągania ich oraz manipulowania nimi. Czytając tą tę książkę, dowiesz się, czym są złączenia i podzapytania, postaci normalne baz danych oraz transakcje i perspektywy. Poznasz sposoby projektowania tabel, zabezpieczania zgromadzonych w nich informacji oraz metody podnoszenia wydajności i szybkości działania baz danych.
* Struktura relacyjnych baz danych
* Wpisywanie danych do bazy
* Wydobywanie i porządkowanie danych
* Normalizacja i postaci normalne
* Projektowanie baz danych
* Operacje matematyczne, grupujące i agregujące
* Stosowanie złączeń i podzapytań
* Tworzenie i wykorzystywanie perspektyw
* Mechanizmy transakcyjne
* Podnoszenie wydajności bazy danych i optymalizowanie zapytań
Dzięki tej książce poznasz wszystko -- znajdziesz omówienie tego, co może okazać się potrzebne podczas projektowania i korzystania z baz danych.
Książka przeznaczona jest dla początkujących użytkowników programu MS Access (najpopularniejszej aplikacji służącej do tworzenia baz danych) i doskonale przygotowuje do pracy nad trudniejszymi projektami, które Czytelnik zapewne wykona w przyszłości. Zamieszczone ćwiczenia ułożono w takiej kolejności, by w trakcie ich wykonywania poznawać kolejne narzędzia programu. Układ zaproponowany przez autora gwarantuje, że studiowanie kolejnych partii materiału odbywać się będzie bez zbędnych przeskoków myślowych i nieustającej wędrówki po kolejnych rozdziałach.
Ćwiczenia z Accessa 2003 PL mogą stanowić zarówno materiał do samodzielnego poznawania aplikacji, jak i pomoc dydaktyczną dla uczestników kursów komputerowych, uczniów oraz studentów.
Poznasz:
* Tworzenie i konfigurowanie baz danych
* Projektowanie tabel
* Konstruowanie relacji między tabelami
* Wyszukiwanie danych za pomocą kwerend
* Wprowadzanie danych przy użyciu formularzy
* Tworzenie raportów z wyszukanych danych
* Dostęp do baz z poziomu sieci WWW
* Pisanie własnych makrodefinicji
Bazy danych należą do najpopularniejszych programów. Student, profesor, sekretarka, właściciel firmy, lekarz -- każdy potrzebuje bazy danych. Zbuduj relacyjną bazę danych do zarządzania kolekcją płyt, adresami znajomych, gabinetem lekarskim lub przedsiębiorstwem korzystając ze znakomitego programu Microsoft Access 2002.
Wielką zaletą programu Access 2002, składnika pakietu Microsoft Office XP, jest to, że jest on narzędziem do tworzenia zarówno prostych, jak i złożonych baz danych. Nie bez znaczenia jest również fakt, że bazę danych utworzoną za pomocą tego programu, można w dowolnej chwili rozbudować lub zmodyfikować (oczywiście, jeżeli ma się do tego uprawnienia), a nawet przystosować do pracy z Microsoft SQL Server.
Książka "Access 2002.Tworzenie baz danych"-- przeznaczona zarówno dla początkujących, jak i doświadczonych użytkowników programu Access -- wyjaśnia, jak zbudować relacyjną bazę danych z wykorzystaniem narzędzi do wizualnego tworzenia obiektów baz danych.
W książce omówiono m.in.:
* Tabele, formularze, raporty, makra, strony dostępu do danych
* Formanty
* Kwerendy wybierające, krzyżowe, tworzące tabele, aktualizujące, dołączające oraz usuwające
* Tabele i wykresy przestawne
* ADOX oraz ADO - uniwersalny interfejs dostępu do danych
* Asystent pakietu Office
* Tworzenie pasków menu, pasków narzędzi i menu kontekstowego
* Zabezpieczanie bazy danych
* Access 2002 a Internet
* Procedury w Visual Basicu służące do automatyzacji działania bazy danych
Dołączony do książki CD-ROM zawiera:
* 18 baz danych oraz ich kod źródłowy w języku Visual Basic
GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademyMarcinStachniuk
Wszyscy znamy i tworzymy API RESTowe. Jednak to podejście ma swoje wady i ograniczenia. Dlatego Facebook stworzył GraphQL jako alternatywę. W mojej prezentacji przedstawię problemy RESTa oraz jak je rozwiązuje GraphQL. Pokażę składnię, jak projektować takie API oraz zalety i wady.
Moje slajdy z prezentacji na GraphQL Wroclaw #3 https://www.meetup.com/GraphQL-Wroclaw/events/261828347/
Większość prezentacji dotyczących GraphQL opowiada o JavaSkryptowych narzędziach, natomiast mało kto mówi o tym jak korzystać z GraphQL w Javie. Prezentacja będzie o tym, jak sprawić aby nasz backendowy, Javowy serwer korzystał z GraphQL. Będzie o możliwych podejściach w implementacji, dobrych praktykach i 4-letnim doświadczeniu z GraphQL na produkcji.
[DevCrowd] GraphQL - gdy API RESTowe to za małoMarcinStachniuk
Slajdy z konferencji DevCrowd
Wszyscy znamy architekturę REST do definiowania API naszych aplikacji. Jednak REST ma swoje wady i ograniczenia. To dlatego Facebook stworzył GraphQL jako alternatywę. W mojej prezentacji przedstawię ograniczenia RESTa i jak je rozwiązuje GraphQL. Pokażę składnię, zalety jak i wady. Będzie też o tym jak zaimplementować GraphQL w Javie oraz co jeszcze warto o nim wiedzieć.
Slajdy z konferencji Confitura 2019.
Wszyscy znamy podejście REST do definiowania API naszych aplikacji. Jednak REST ma swoje wady i ograniczenia. To dla tego Facebook stworzył GraphQL jako alternatywę. W mojej prezentacji przedstawię ograniczenia RESTa i jak je rozwiązuje GraphQL. Pokażę składnię, zalety jak i wady. Będzie też jak zaimplementować GraphQL w Javie oraz co jeszcze warto o nim wiedzieć.
BruJUG Brussels GraphQL when RESR API is to less - lessons learnedMarcinStachniuk
We all know the REST architectural style to define a good API for your applications. However, REST has its disadvantages and constraints. That’s why Facebook developed GraphQL as an alternative.
In my talk, I will present you some REST constraints and how GraphQL solves them. I will talk about how we implemented GraphQL in our application and why.
Get to know our successes… and failures from the first row.
Do you know how Continuous Delivery of Java Open Source libraries looks? How big is your release overhead? Do you update release notes and include contributors manually? How do you handle versioning? Do you use semantic versioning?
During this workshop, you will learn how to set up Continuous Delivery for your library. You’ll never have to manually release new versions again. We will use the following tools: GitHub, TravisCI, Bintray, Maven Central. We will glue everything using Shipkit.org - a project born from Mockito (and still used there). You’ll additionally learn SerVer.
This workshop is mostly for Java open source and Gradle plugins developers. We will use a library prepared especially for this training, so no worries if you don’t have your own open source project (yet).
Prerequisites: GitHub account, Java & Gradle basics.
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
We all know the REST architectural style to define a good API for your applications. However, REST has its disadvantages and constraints. That’s why Facebook developed GraphQL as an alternative.
In my talk, I will present you some REST constraints and how GraphQL solves them. I will talk about how we implemented GraphQL in our application and why.
Get to know our successes… and failures from the first row.
Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...
Liquibase - Zarządzanie zmianami w relacyjnych bazach danych
1. Zarządzanie zmianami w relacyjnych bazach
danych
Marcin Stachniuk
30 września 2015
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 1/64
2. O mnie
Marcin Stachniuk
Chorąży na chamberconf.pl
Speaker: WrocJUG, dbconf.pl, warsjawa.pl, careercon.pl,
chamberconf.pl
Recenzent książki: practicalunittesting.com
mstachniuk@gmail.com
mstachniuk.blogspot.com
@MarcinStachniuk
github.com/mstachniuk
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 2/64
3. Jak zarządzać zmianami w relacyjnych bazach danych?
Jak zarządzać zmianami w
relacyjnych bazach danych?
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 3/64
4. Ręcznie, bezpośrednio na bazie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 4/64
10. Z modelu danych
Hibernate hbm2ddl:
1: spring.jpa.hibernate.ddl-auto=create-drop
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 10/64
11. Z poziomu kodu Javy
migrate4j
1: public class Migration_1 implements Migration {
2:
3: public void up() {
4: createTable(
5: table("simple_table",
6: column("id", INTEGER, primarykey(), notnull()),
7: column("desc", VARCHAR, length(50), defaultValue("NA"))));
8: }
9:
10: public void down() {
11: dropTable("simple_table");
12: }
13: }
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 11/64
12. Odstawmy ”Badziewie do badziewia”
Kopsnij Drina - Wielki test piw w plastiku
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 12/64
14. Agenda
1 Jak zarządzać zmianami w relacyjnej bazie danych?
2 Jak działa Liquibase?
3 Od czego zaczać?
4 Tworzenie nowych obiektów bazodanowych
5 Migracja danych
6 Różnice w bazach danych
7 Co jeszcze?
8 Podsumowanie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 14/64
15. Agenda
1 Jak zarządzać zmianami w relacyjnej bazie danych?
2 Jak działa Liquibase?
3 Od czego zaczać?
4 Tworzenie nowych obiektów bazodanowych
5 Migracja danych
6 Różnice w bazach danych
7 Co jeszcze?
8 Podsumowanie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 15/64
17. Zapisujemy zmiany w changelog’u w XML’u
Lub w innym wspieranym formacie:
YAML
JSON
SQL
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 17/64
19. Wspierane bazy danych
MySQL
PostgreSQL
Oracle
Sql Server
Sybase
DB2
Derby
HSQLDB
H2
Informix
Firebird
SQLite
InterSystems Cache
SAP MaxDB
IBM DB2 for iSeries
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 19/64
20. Agenda
1 Jak zarządzać zmianami w relacyjnej bazie danych?
2 Jak działa Liquibase?
3 Od czego zaczać?
4 Tworzenie nowych obiektów bazodanowych
5 Migracja danych
6 Różnice w bazach danych
7 Co jeszcze?
8 Podsumowanie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 20/64
21. Jak wprowadzić Liquibase do nowego projektu?
1. Podpinamy zależność
1: <dependency>
2: <groupId>org.liquibase</groupId>
3: <artifactId>liquibase-core</artifactId>
4: <version>3.4.1</version>
5: </dependency>
2. Wprowadzamy zmiany w:
src/main/resources/db/changelog/db.changelog.xml
3. Konfigurujemy bazę
4. Wyłączmy hbm2ddl
1: spring.jpa.hibernate.ddl-auto=none
5. I działa!
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 21/64
22. Jak wprowadzić Liquibase do istniejącego projektu?
1. Generujemy changelog’a dla istniejącego stanu bazy
1: <plugin>
2: <groupId>org.liquibase</groupId>
3: <artifactId>liquibase-maven-plugin</artifactId>
4: <version>3.4.1</version>
5: <configuration>
6: <changeLogFile>src/main/resources/db/changelog/db.changelog.xml
7: </changeLogFile>
8: <driver>com.mysql.jdbc.Driver</driver>
9: <url>jdbc:mysql://localhost:3306/public</url>
10: <username>liqui</username>
11: <password>liqui</password>
12: <dropFirst>false</dropFirst>
13: </configuration>
14: </plugin>
1: mvn liquibase:generateChangeLog
I zapisujemy w:
src/main/resources/db/changelog/db.changelog.xml
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 22/64
23. Jak wprowadzić Liquibase do istniejącego projektu?
2. Dodajemy pomocniczą bazę „na boku” (może być inna)
1: spring.datasource.url=jdbc:h2:~/liquibasedemo;AUTO_SERVER=TRUE
2: spring.datasource.username=liquibasedemo
3: spring.datasource.password=liquibasedemo
4: spring.datasource.driverClassName=org.h2.Driver
5:
6: liquibase.change-log=classpath:db/changelog/db.changelog.xml
7: liquibase.dropFirst=false
i Liquibase’a do projektu:
1: <dependency>
2: <groupId>org.liquibase</groupId>
3: <artifactId>liquibase-core</artifactId>
4: <version>3.4.0</version>
5: </dependency>
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 23/64
24. Jak wprowadzić Liquibase do istniejącego projektu?
3. Uruchamiamy aplikację z konfiguracją pomocniczej bazy
1: INFO 24.08.15 01:17: liquibase: Successfully acquired change log lock
2: INFO 24.08.15 01:17: liquibase: Creating database history table with name: PUBL
3: INFO 24.08.15 01:17: liquibase: Reading from PUBLIC.DATABASECHANGELOG
4: INFO 24.08.15 01:17: liquibase: classpath:db/changelog/db.changelog.xml: classp
5: INFO 24.08.15 01:17: liquibase: classpath:db/changelog/db.changelog.xml: classp
6: ...
7: INFO 24.08.15 01:17: liquibase: classpath:db/changelog/db.changelog.xml: classp
8: INFO 24.08.15 01:17: liquibase: Successfully released change log lock
Cały schemat zostaje utworzony w pomocniczej bazie, w tym
zawartość tabeli DATABASECHANGELOG, robimy zrzut (dump)
tej tabeli
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 24/64
25. Jak wprowadzić Liquibase do istniejącego projektu?
4. Uruchamiamy aplikację z bazą produkcyjną, lub:
1: mvn liquibase:update
Kończy się błędem, ale tworzy tabele specyficzne dla Liquibase’a w
bazie produkcyjnej
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 25/64
26. Jak wprowadzić Liquibase do instniejącego projektu?
5. Przenosimy dane do tabeli DATABASECHANGELOG z bazy
pomocniczej na produkcję
1: INSERT INTO DATABASECHANGELOG (ID,AUTHOR,FILENAME,DATEEXECUTED,ORDEREXECUTED,
2: EXECTYPE,MD5SUM,DESCRIPTION,COMMENTS,TAG,LIQUIBASE,CONTEXTS,LABELS)
3: VALUES (’1418571045624-1’,’staszek (generated)’,
4: ’classpath:db/changelog/db.changelog.xml’,{ts ’2015-08-24 01:17:43’},1,
5: ’EXECUTED’,’7:d3bab03ce07bf314c15ccdcfe271ac7d’,’createTable’,’’,null,
6: ’3.4.0’,null,null);
7: INSERT INTO DATABASECHANGELOG (ID,AUTHOR,FILENAME,DATEEXECUTED,ORDEREXECUTED,
8: EXECTYPE,MD5SUM,DESCRIPTION,COMMENTS,TAG,LIQUIBASE,CONTEXTS,LABELS)
9: VALUES (’1418571045624-2’,’staszek (generated)’,
10: ’classpath:db/changelog/db.changelog.xml’,{ts ’2015-08-24 01:17:43’},2,
11: ’EXECUTED’,’7:91c184917b4a9dfb9a502f7b2f237530’,’createTable’,’’,null,
12: ’3.4.0’,null,null);
13: ...
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 26/64
27. Jak wprowadzić Liquibase do istniejącego projektu?
6. Zmieniamy konfigurację liquibase-maven-plugin’a, aby korzystał
z bazy pomocniczej (aby przypadkiem nie puścić produkcji z
dymem)
1: <plugin>
2: <groupId>org.liquibase</groupId>
3: <artifactId>liquibase-maven-plugin</artifactId>
4: <version>3.4.1</version>
5: <configuration>
6: <changeLogFile>src/main/resources/db/changelog/db.changelog.xml
7: </changeLogFile>
8: <driver>org.h2.Driver</driver>
9: <url>jdbc:h2:~/liquibasedemo;AUTO_SERVER=TRUE</url>
10: <username>liquibasedemo</username>
11: <password>liquibasedemo</password>
12: <dropFirst>false</dropFirst>
13: </configuration>
14: </plugin>
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 27/64
28. Jak wprowadzić Liquibase do istniejącego projektu?
7. Od teraz wszelkie zmiany we wszystkich bazach (w tym na
produkcji) idą przez Liquibase’a!
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 28/64
29. Agenda
1 Jak zarządzać zmianami w relacyjnej bazie danych?
2 Jak działa Liquibase?
3 Od czego zaczać?
4 Tworzenie nowych obiektów bazodanowych
5 Migracja danych
6 Różnice w bazach danych
7 Co jeszcze?
8 Podsumowanie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 29/64
30. Tworzenie nowych tabel
Przykładowe wymaganie projektowe:
Chcę mieć możliwość definiowania użytkownik i ról.
Każdy użytkownik może posiadać kilka ról w systemie.
Na poziomie roli mogę zdefiniować w przyszłości, jakie
czynności może wykonać dany użytkownik.
Możliwe role:
user
admin
changeConfiguration
orderAcceptor.
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 30/64
35. Agenda
1 Jak zarządzać zmianami w relacyjnej bazie danych?
2 Jak działa Liquibase?
3 Od czego zaczać?
4 Tworzenie nowych obiektów bazodanowych
5 Migracja danych
6 Różnice w bazach danych
7 Co jeszcze?
8 Podsumowanie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 35/64
36. Migracja danych
1: <changeSet id="Release3-07" author="staszek">
2: <sql>
3: insert into user_rights_new select min(id) as id, role_name,
4: description from user_rights
5: group by role_name
6: </sql>
7: </changeSet>
8: <changeSet id="Release3-08" author="staszek">
9: <sql>
10: insert into user_rights_x(user_id, right_id) select u.id, urn.id
11: from user u join user_rights ur on u.id = ur.user_id
12: join user_rights_new urn on ur.role_name = urn.role_name
13: </sql>
14: </changeSet>
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 36/64
39. Agenda
1 Jak zarządzać zmianami w relacyjnej bazie danych?
2 Jak działa Liquibase?
3 Od czego zaczać?
4 Tworzenie nowych obiektów bazodanowych
5 Migracja danych
6 Różnice w bazach danych
7 Co jeszcze?
8 Podsumowanie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 39/64
41. Modelowanie róźnic w bazach danych
za pomocą parameters (properties):
1: <property name="blob.type" value="blob" dbms="oracle,h2"/>
2: <property name="blob.type" value="longtext" dbms="mysql"/>
3:
4: <changeSet id="Release6-01" author="staszek" dbms="db2, h2">
5: <createTable tableName="big_binary_data">
6: <column name="id" type="INT">
7: <constraints primaryKey="true" nullable="false"/>
8: </column>
9: <column name="binary_data" type="${blob.type}"/>
10: </createTable>
11: </changeSet>
Property można przekazać z zewnątrz. Można również uzależnić
od kontekstu.
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 41/64
42. Context’y
application.properties
1: liquibase.contexts = web-test
1: <changeSet id="Release7-01" author="staszek" context="int-test, web-test">
2: <insert tableName="settings">
3: <column name="id" valueNumeric="1"/>
4: <column name="is_active" valueBoolean="true"/>
5: </insert>
6: </changeSet>
Uwaga!
Jeśli nie zdefiniujemy żadnego kontekstu to WSZYSTKIE zostaną
wykonane!
http://www.liquibase.org/documentation/contexts.html
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 42/64
43. Agenda
1 Jak zarządzać zmianami w relacyjnej bazie danych?
2 Jak działa Liquibase?
3 Od czego zaczać?
4 Tworzenie nowych obiektów bazodanowych
5 Migracja danych
6 Różnice w bazach danych
7 Co jeszcze?
8 Podsumowanie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 43/64
44. Preconditions
Gdy musimy skorzystać z innego użytkownika, zależnie od typu
bazy danych
1: <preConditions>
2: <or>
3: <and>
4: <dbms type="oracle" />
5: <runningAs username="SYSTEM" />
6: </and>
7: <and>
8: <dbms type="mssql" />
9: <runningAs username="sa" />
10: </and>
11: </or>
12: </preConditions>
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 44/64
45. Generowanie rollback’ów
Dla operacji typu:
create table
rename column
add column
rollback może zostać wygenerowany automatycznie.
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 45/64
46. Generowanie rollback’ów
Dla innych operacji możemy sami sobie zdefiniować:
1: <changeSet id="Release7-01" author="staszek" context="int-test, web-test">
2: <insert tableName="settings">
3: <column name="id" valueNumeric="1"/>
4: <column name="is_active" valueBoolean="true"/>
5: </insert>
6: <rollback>
7: <delete tableName="settings">
8: <where>id = 1</where>
9: </delete>
10: </rollback>
11: </changeSet>
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 46/64
47. Porównywanie baz danych
Diff mode
1: sh liquibase
2: --classpath="h2-1.3.174.jar:mysql-connector-java-5.1.36.jar"
3: --driver=org.h2.Driver
4: --url="jdbc:h2:~/liquibasedemo;AUTO_SERVER=TRUE"
5: --username=liquibasedemo
6: --password=liquibasedemo
7: diff
8: --referenceUrl=jdbc:mysql://localhost:3306/public
9: --referenceUsername=liqui
10: --referencePassword=liqui
działa w linii komend i ant’cie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 47/64
48. Porównywanie baz danych
1: Diff Results:
2: Reference Database: liqui@localhost @ jdbc:mysql://localhost:3306/public (Defau
3: Comparison Database: LIQUIBASEDEMO @ jdbc:h2:~/liquibasedemo (Default Schema: P
4: Product Name:
5: Reference: ’MySQL’
6: Target: ’H2’
7: Product Version:
8: Reference: ’5.6.24’
9: Target: ’1.3.174 (2013-10-19)’
10: Missing Catalog(s): NONE
11: Unexpected Catalog(s): NONE
12: Changed Catalog(s):
13: public
14: name changed from ’public’ to ’LIQUIBASEDEMO’
15: Missing Column(s):
16: user_rights.description
17: user_rights_new.description
18: user.email
19: ...
20: Unexpected Column(s): NONE
21: ...
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 48/64
49. Porównywanie baz danych
DiffChangeLog mode
1: sh liquibase
2: --classpath="h2-1.3.174.jar:mysql-connector-java-5.1.36.jar"
3: --driver=org.h2.Driver
4: --url="jdbc:h2:~/liquibasedemo;AUTO_SERVER=TRUE"
5: --username=liquibasedemo
6: --password=liquibasedemo
7: diffChangeLog
8: --referenceUrl=jdbc:mysql://localhost:3306/public
9: --referenceUsername=liqui
10: --referencePassword=liqui
działa w linii komend i ant’cie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 49/64
51. DBDoc - generowanie dokumentacji w stylu JavaDoc
Działa tylko z poziomu command line
1: sh liquibase
2: --classpath="h2-1.3.174.jar"
3: --driver="org.h2.Driver"
4: --url="jdbc:h2:~/liquibasedemo;AUTO_SERVER=TRUE"
5: --username=liquibasedemo
6: --password=liquibasedemo
7: --changeLogFile=db.changelog.xml
8: dbDoc ./dbdoc
Trochę niedopracowane narzędzie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 51/64
52. DBDoc - generowanie dokumentacji w stylu JavaDoc
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 52/64
55. Blokowanie wykonywania zmian, jak sobie z tym radzić
1: INFO 21.09.15 16:23: liquibase: Waiting for changelog lock....
2: INFO 21.09.15 16:24: liquibase: Waiting for changelog lock....
3: ...
4: Caused by: liquibase.exception.LockException: Could not acquire change log lock
Currently locked by fe80:0:0:0:1234:5678:9abc:def0%awdl0 (fe80:0:0:0:1234:5678:
5: at liquibase.lockservice.StandardLockService.waitForLock(StandardLockSer
6: at liquibase.Liquibase.update(Liquibase.java:192)
1: select * from DATABASECHANGELOGLOCK
1: mvn liquibase:releaseLocks
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 55/64
56. Dobre praktyki korzystania z Liquibase
Organizacja Changelog’ów w wiele plików (plik / release)
Zarządzanie wszystkim co się da przez Liquibase
Jedna zmiana na jeden ChangeSet
Konwencja nazewnicza dla ID w ChangeSet’ach
Komentarze w ChangeSet’ach
Myśl od rolback’u
Unikaj rollback’u (bądź fast-forward)
http://www.liquibase.org/bestpractices.html
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 56/64
57. Dobre praktyki korzystania z Liquibase
Organizacja Changelog’ów w wiele plików (plik / release)
Zarządzanie wszystkim co się da przez Liquibase
Jedna zmiana na jeden ChangeSet
Konwencja nazewnicza dla ID w ChangeSet’ach
Komentarze w ChangeSet’ach
Myśl od rolback’u
Unikaj rollback’u (bądź fast-forward)
http://www.liquibase.org/bestpractices.html
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 56/64
58. Dobre praktyki korzystania z Liquibase
Organizacja Changelog’ów w wiele plików (plik / release)
Zarządzanie wszystkim co się da przez Liquibase
Jedna zmiana na jeden ChangeSet
Konwencja nazewnicza dla ID w ChangeSet’ach
Komentarze w ChangeSet’ach
Myśl od rolback’u
Unikaj rollback’u (bądź fast-forward)
http://www.liquibase.org/bestpractices.html
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 56/64
59. Dobre praktyki korzystania z Liquibase
Organizacja Changelog’ów w wiele plików (plik / release)
Zarządzanie wszystkim co się da przez Liquibase
Jedna zmiana na jeden ChangeSet
Konwencja nazewnicza dla ID w ChangeSet’ach
Komentarze w ChangeSet’ach
Myśl od rolback’u
Unikaj rollback’u (bądź fast-forward)
http://www.liquibase.org/bestpractices.html
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 56/64
60. Dobre praktyki korzystania z Liquibase
Organizacja Changelog’ów w wiele plików (plik / release)
Zarządzanie wszystkim co się da przez Liquibase
Jedna zmiana na jeden ChangeSet
Konwencja nazewnicza dla ID w ChangeSet’ach
Komentarze w ChangeSet’ach
Myśl od rolback’u
Unikaj rollback’u (bądź fast-forward)
http://www.liquibase.org/bestpractices.html
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 56/64
61. Dobre praktyki korzystania z Liquibase
Organizacja Changelog’ów w wiele plików (plik / release)
Zarządzanie wszystkim co się da przez Liquibase
Jedna zmiana na jeden ChangeSet
Konwencja nazewnicza dla ID w ChangeSet’ach
Komentarze w ChangeSet’ach
Myśl od rolback’u
Unikaj rollback’u (bądź fast-forward)
http://www.liquibase.org/bestpractices.html
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 56/64
62. Dobre praktyki korzystania z Liquibase
Organizacja Changelog’ów w wiele plików (plik / release)
Zarządzanie wszystkim co się da przez Liquibase
Jedna zmiana na jeden ChangeSet
Konwencja nazewnicza dla ID w ChangeSet’ach
Komentarze w ChangeSet’ach
Myśl od rolback’u
Unikaj rollback’u (bądź fast-forward)
http://www.liquibase.org/bestpractices.html
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 56/64
63. Agenda
1 Jak zarządzać zmianami w relacyjnej bazie danych?
2 Jak działa Liquibase?
3 Od czego zaczać?
4 Tworzenie nowych obiektów bazodanowych
5 Migracja danych
6 Różnice w bazach danych
7 Co jeszcze?
8 Podsumowanie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 57/64
64. Liquibase - podstawowe właściwości
Raz definiujemy wygląd naszej bazy
Uruchamiamy na wielu wspieranych bazach danych
Mamy dokumentację zmian
Możemy generować różnice (diff’y)
Generuje SQL do review dla DBA
Wykonuje migrację od punktu w jakim znajduje się baza
danych
Współpracuje z: Ant, Maven, Spring, Command Line, Servlet,
JEE CDI, Spring Boot
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 58/64
65. Liquibase - podstawowe właściwości
Raz definiujemy wygląd naszej bazy
Uruchamiamy na wielu wspieranych bazach danych
Mamy dokumentację zmian
Możemy generować różnice (diff’y)
Generuje SQL do review dla DBA
Wykonuje migrację od punktu w jakim znajduje się baza
danych
Współpracuje z: Ant, Maven, Spring, Command Line, Servlet,
JEE CDI, Spring Boot
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 58/64
66. Liquibase - podstawowe właściwości
Raz definiujemy wygląd naszej bazy
Uruchamiamy na wielu wspieranych bazach danych
Mamy dokumentację zmian
Możemy generować różnice (diff’y)
Generuje SQL do review dla DBA
Wykonuje migrację od punktu w jakim znajduje się baza
danych
Współpracuje z: Ant, Maven, Spring, Command Line, Servlet,
JEE CDI, Spring Boot
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 58/64
67. Liquibase - podstawowe właściwości
Raz definiujemy wygląd naszej bazy
Uruchamiamy na wielu wspieranych bazach danych
Mamy dokumentację zmian
Możemy generować różnice (diff’y)
Generuje SQL do review dla DBA
Wykonuje migrację od punktu w jakim znajduje się baza
danych
Współpracuje z: Ant, Maven, Spring, Command Line, Servlet,
JEE CDI, Spring Boot
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 58/64
68. Liquibase - podstawowe właściwości
Raz definiujemy wygląd naszej bazy
Uruchamiamy na wielu wspieranych bazach danych
Mamy dokumentację zmian
Możemy generować różnice (diff’y)
Generuje SQL do review dla DBA
Wykonuje migrację od punktu w jakim znajduje się baza
danych
Współpracuje z: Ant, Maven, Spring, Command Line, Servlet,
JEE CDI, Spring Boot
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 58/64
69. Liquibase - podstawowe właściwości
Raz definiujemy wygląd naszej bazy
Uruchamiamy na wielu wspieranych bazach danych
Mamy dokumentację zmian
Możemy generować różnice (diff’y)
Generuje SQL do review dla DBA
Wykonuje migrację od punktu w jakim znajduje się baza
danych
Współpracuje z: Ant, Maven, Spring, Command Line, Servlet,
JEE CDI, Spring Boot
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 58/64
70. Liquibase - podstawowe właściwości
Raz definiujemy wygląd naszej bazy
Uruchamiamy na wielu wspieranych bazach danych
Mamy dokumentację zmian
Możemy generować różnice (diff’y)
Generuje SQL do review dla DBA
Wykonuje migrację od punktu w jakim znajduje się baza
danych
Współpracuje z: Ant, Maven, Spring, Command Line, Servlet,
JEE CDI, Spring Boot
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 58/64
71. Liquibase - co zyskujemy
Eliminacja błędów Copy Paste
Bezbolesne aktualizacje, nawet ze starych wersji
Pełna automatyzacja procesu
Schemat bazy jest wersjonowany razem z kodem
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 59/64
72. Liquibase - co zyskujemy
Eliminacja błędów Copy Paste
Bezbolesne aktualizacje, nawet ze starych wersji
Pełna automatyzacja procesu
Schemat bazy jest wersjonowany razem z kodem
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 59/64
73. Liquibase - co zyskujemy
Eliminacja błędów Copy Paste
Bezbolesne aktualizacje, nawet ze starych wersji
Pełna automatyzacja procesu
Schemat bazy jest wersjonowany razem z kodem
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 59/64
74. Liquibase - co zyskujemy
Eliminacja błędów Copy Paste
Bezbolesne aktualizacje, nawet ze starych wersji
Pełna automatyzacja procesu
Schemat bazy jest wersjonowany razem z kodem
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 59/64
75. Inne dobre praktyki korzystania z relacyjnych baz danych
Każdy developer może mieć instancję bazy na swojej maszynie
Automatyczne testy integracyjne na bazie docelowej
(specyficzne błędy dla danej bazy)
Automatyczne testy na wszystkich wspieranych bazach
Mechanizm czyszczenia bazy na potrzeby testów (backup,
dbUnit, inne)
Tworzenie danych do automatycznych testów
Zautomatyzowane przenoszenie danych z produkcji (na
żądanie)
Test produkcyjnego deploymentu
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 60/64
76. Inne dobre praktyki korzystania z relacyjnych baz danych
Każdy developer może mieć instancję bazy na swojej maszynie
Automatyczne testy integracyjne na bazie docelowej
(specyficzne błędy dla danej bazy)
Automatyczne testy na wszystkich wspieranych bazach
Mechanizm czyszczenia bazy na potrzeby testów (backup,
dbUnit, inne)
Tworzenie danych do automatycznych testów
Zautomatyzowane przenoszenie danych z produkcji (na
żądanie)
Test produkcyjnego deploymentu
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 60/64
77. Inne dobre praktyki korzystania z relacyjnych baz danych
Każdy developer może mieć instancję bazy na swojej maszynie
Automatyczne testy integracyjne na bazie docelowej
(specyficzne błędy dla danej bazy)
Automatyczne testy na wszystkich wspieranych bazach
Mechanizm czyszczenia bazy na potrzeby testów (backup,
dbUnit, inne)
Tworzenie danych do automatycznych testów
Zautomatyzowane przenoszenie danych z produkcji (na
żądanie)
Test produkcyjnego deploymentu
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 60/64
78. Inne dobre praktyki korzystania z relacyjnych baz danych
Każdy developer może mieć instancję bazy na swojej maszynie
Automatyczne testy integracyjne na bazie docelowej
(specyficzne błędy dla danej bazy)
Automatyczne testy na wszystkich wspieranych bazach
Mechanizm czyszczenia bazy na potrzeby testów (backup,
dbUnit, inne)
Tworzenie danych do automatycznych testów
Zautomatyzowane przenoszenie danych z produkcji (na
żądanie)
Test produkcyjnego deploymentu
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 60/64
79. Inne dobre praktyki korzystania z relacyjnych baz danych
Każdy developer może mieć instancję bazy na swojej maszynie
Automatyczne testy integracyjne na bazie docelowej
(specyficzne błędy dla danej bazy)
Automatyczne testy na wszystkich wspieranych bazach
Mechanizm czyszczenia bazy na potrzeby testów (backup,
dbUnit, inne)
Tworzenie danych do automatycznych testów
Zautomatyzowane przenoszenie danych z produkcji (na
żądanie)
Test produkcyjnego deploymentu
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 60/64
80. Inne dobre praktyki korzystania z relacyjnych baz danych
Każdy developer może mieć instancję bazy na swojej maszynie
Automatyczne testy integracyjne na bazie docelowej
(specyficzne błędy dla danej bazy)
Automatyczne testy na wszystkich wspieranych bazach
Mechanizm czyszczenia bazy na potrzeby testów (backup,
dbUnit, inne)
Tworzenie danych do automatycznych testów
Zautomatyzowane przenoszenie danych z produkcji (na
żądanie)
Test produkcyjnego deploymentu
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 60/64
81. A co gdy trzeba nam czegoś więcej?
Datical DB www.datical.com/product/
Wsparcie dla funkcji, procedur składowanych, pakietów,
synonimów, triggerów, walidacji więzów integralności,
walidacji zależnych obiektów, zarządzanie prawami
użytkowników, przestrzenie tabel, partycje, duże voluminy
Integracja z CVS, SVN i Git
Build tools (Jenkins, Bamboo, Puppet,...)
Preview Schema Changes
Corporate Standards Enforcement
Organizational Collaboration
Audit and Compliance Support
Easy of Use (GUI-dashboard)
www.datical.com/liquibase/
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 61/64
82. A co gdy trzeba nam czegoś więcej?
Datical DB www.datical.com/product/
Wsparcie dla funkcji, procedur składowanych, pakietów,
synonimów, triggerów, walidacji więzów integralności,
walidacji zależnych obiektów, zarządzanie prawami
użytkowników, przestrzenie tabel, partycje, duże voluminy
Integracja z CVS, SVN i Git
Build tools (Jenkins, Bamboo, Puppet,...)
Preview Schema Changes
Corporate Standards Enforcement
Organizational Collaboration
Audit and Compliance Support
Easy of Use (GUI-dashboard)
www.datical.com/liquibase/
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 61/64
83. A co gdy trzeba nam czegoś więcej?
Datical DB www.datical.com/product/
Wsparcie dla funkcji, procedur składowanych, pakietów,
synonimów, triggerów, walidacji więzów integralności,
walidacji zależnych obiektów, zarządzanie prawami
użytkowników, przestrzenie tabel, partycje, duże voluminy
Integracja z CVS, SVN i Git
Build tools (Jenkins, Bamboo, Puppet,...)
Preview Schema Changes
Corporate Standards Enforcement
Organizational Collaboration
Audit and Compliance Support
Easy of Use (GUI-dashboard)
www.datical.com/liquibase/
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 61/64
84. A co gdy trzeba nam czegoś więcej?
Datical DB www.datical.com/product/
Wsparcie dla funkcji, procedur składowanych, pakietów,
synonimów, triggerów, walidacji więzów integralności,
walidacji zależnych obiektów, zarządzanie prawami
użytkowników, przestrzenie tabel, partycje, duże voluminy
Integracja z CVS, SVN i Git
Build tools (Jenkins, Bamboo, Puppet,...)
Preview Schema Changes
Corporate Standards Enforcement
Organizational Collaboration
Audit and Compliance Support
Easy of Use (GUI-dashboard)
www.datical.com/liquibase/
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 61/64
85. A co gdy trzeba nam czegoś więcej?
Datical DB www.datical.com/product/
Wsparcie dla funkcji, procedur składowanych, pakietów,
synonimów, triggerów, walidacji więzów integralności,
walidacji zależnych obiektów, zarządzanie prawami
użytkowników, przestrzenie tabel, partycje, duże voluminy
Integracja z CVS, SVN i Git
Build tools (Jenkins, Bamboo, Puppet,...)
Preview Schema Changes
Corporate Standards Enforcement
Organizational Collaboration
Audit and Compliance Support
Easy of Use (GUI-dashboard)
www.datical.com/liquibase/
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 61/64
86. A co gdy trzeba nam czegoś więcej?
Datical DB www.datical.com/product/
Wsparcie dla funkcji, procedur składowanych, pakietów,
synonimów, triggerów, walidacji więzów integralności,
walidacji zależnych obiektów, zarządzanie prawami
użytkowników, przestrzenie tabel, partycje, duże voluminy
Integracja z CVS, SVN i Git
Build tools (Jenkins, Bamboo, Puppet,...)
Preview Schema Changes
Corporate Standards Enforcement
Organizational Collaboration
Audit and Compliance Support
Easy of Use (GUI-dashboard)
www.datical.com/liquibase/
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 61/64
87. A co gdy trzeba nam czegoś więcej?
Datical DB www.datical.com/product/
Wsparcie dla funkcji, procedur składowanych, pakietów,
synonimów, triggerów, walidacji więzów integralności,
walidacji zależnych obiektów, zarządzanie prawami
użytkowników, przestrzenie tabel, partycje, duże voluminy
Integracja z CVS, SVN i Git
Build tools (Jenkins, Bamboo, Puppet,...)
Preview Schema Changes
Corporate Standards Enforcement
Organizational Collaboration
Audit and Compliance Support
Easy of Use (GUI-dashboard)
www.datical.com/liquibase/
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 61/64
88. A co gdy trzeba nam czegoś więcej?
Datical DB www.datical.com/product/
Wsparcie dla funkcji, procedur składowanych, pakietów,
synonimów, triggerów, walidacji więzów integralności,
walidacji zależnych obiektów, zarządzanie prawami
użytkowników, przestrzenie tabel, partycje, duże voluminy
Integracja z CVS, SVN i Git
Build tools (Jenkins, Bamboo, Puppet,...)
Preview Schema Changes
Corporate Standards Enforcement
Organizational Collaboration
Audit and Compliance Support
Easy of Use (GUI-dashboard)
www.datical.com/liquibase/
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 61/64
89. A co gdy trzeba nam czegoś więcej?
Datical DB www.datical.com/product/
Wsparcie dla funkcji, procedur składowanych, pakietów,
synonimów, triggerów, walidacji więzów integralności,
walidacji zależnych obiektów, zarządzanie prawami
użytkowników, przestrzenie tabel, partycje, duże voluminy
Integracja z CVS, SVN i Git
Build tools (Jenkins, Bamboo, Puppet,...)
Preview Schema Changes
Corporate Standards Enforcement
Organizational Collaboration
Audit and Compliance Support
Easy of Use (GUI-dashboard)
www.datical.com/liquibase/
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 61/64
90. A co gdy trzeba nam czegoś więcej?
Datical DB www.datical.com/product/
Wsparcie dla funkcji, procedur składowanych, pakietów,
synonimów, triggerów, walidacji więzów integralności,
walidacji zależnych obiektów, zarządzanie prawami
użytkowników, przestrzenie tabel, partycje, duże voluminy
Integracja z CVS, SVN i Git
Build tools (Jenkins, Bamboo, Puppet,...)
Preview Schema Changes
Corporate Standards Enforcement
Organizational Collaboration
Audit and Compliance Support
Easy of Use (GUI-dashboard)
www.datical.com/liquibase/
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 61/64
92. Więcej informacji
Marcin Stachniuk Blog: mstachniuk.blogspot.com
Liquibase: http://www.liquibase.org/
Feature Comparison (Flyway): http://flywaydb.org/#features
Liquibase best practices:
http://www.liquibase.org/bestpractices.html
Examples: https://github.com/mstachniuk/movies-database
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 63/64
93. Zarządzanie zmianami w relacyjnych bazach
danych
Marcin Stachniuk
Dziękuję!
30 września 2015
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 64/64