![Page 1: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/1.jpg)
Zarządzanie zmianami w relacyjnych bazachdanych
Marcin Stachniuk
30 listopada 2015
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 1/63
![Page 2: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/2.jpg)
O mnie
Marcin Stachniuk
Chorąży na chamberconf.pl
Speaker: WrocJUG, dbconf.pl, warsjawa.pl, careercon.pl,chamberconf.pl, 33rd degree 4 charity
Recenzent książki: practicalunittesting.com
mstachniuk.blogspot.com
@MarcinStachniuk
github.com/mstachniuk
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 2/63
![Page 3: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/3.jpg)
Jak zarządzać zmianami w relacyjnych bazach danych?
Jak zarządzać zmianami wrelacyjnych bazach danych?
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 3/63
![Page 4: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/4.jpg)
Ręcznie, bezpośrednio na bazie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 4/63
![Page 5: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/5.jpg)
Czyli...
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 5/63
![Page 6: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/6.jpg)
...albo...
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 6/63
![Page 7: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/7.jpg)
Word, ERwin
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 7/63
![Page 8: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/8.jpg)
Odpalając SQL-e
Możliwe rozwiązania:
Flyway
c5-db-migration
dbdeploy.com
MyBatis Migrations
MIGRATEdb
DbMaintain
AutoPatch
Porównanie systemów: http://flywaydb.org/#featuresMarcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 8/63
![Page 9: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/9.jpg)
Z modelu danych
Hibernate hbm2ddl:
1: spring.jpa.hibernate.ddl-auto=create-drop
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 9/63
![Page 10: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/10.jpg)
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 10/63
![Page 11: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/11.jpg)
Odstawmy ”Badziewie do badziewia”
Kopsnij Drina - Wielki test piw w plastikuMarcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 11/63
![Page 12: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/12.jpg)
Liquibase
http://www.liquibase.org/Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 12/63
![Page 13: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/13.jpg)
Agenda
1 Jak zarządzać zmianami w relacyjnej bazie danych?
2 Jak działa Liquibase?
3 Od czego zaczać?
4 Tworzenie nowych tabel
5 Migracja danych
6 Różnice w bazach danych
7 Co jeszcze?
8 Podsumowanie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 13/63
![Page 14: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/14.jpg)
Agenda
1 Jak zarządzać zmianami w relacyjnej bazie danych?
2 Jak działa Liquibase?
3 Od czego zaczać?
4 Tworzenie nowych tabel
5 Migracja danych
6 Różnice w bazach danych
7 Co jeszcze?
8 Podsumowanie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 14/63
![Page 15: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/15.jpg)
Zapisujemy zmiany w changelog’u w XML’u
db.changelog.xml
1: <changeSet id="Release2-01" author="staszek">2: <createTable tableName="user">3: <column name="id" type="INT" autoIncrement="true">4: <constraints nullable="false" primaryKey="true"/>5: </column>6: <column name="email" type="VARCHAR(255)">7: <constraints unique="true" nullable="false"/>8: </column>9: <column name="password" type="VARCHAR(255)">10: <constraints nullable="false"/>11: </column>12: </createTable>13: </changeSet>
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 15/63
![Page 16: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/16.jpg)
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 16/63
![Page 17: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/17.jpg)
Uruchamiamy liquibase:update
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 17/63
![Page 18: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/18.jpg)
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 18/63
![Page 19: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/19.jpg)
Agenda
1 Jak zarządzać zmianami w relacyjnej bazie danych?
2 Jak działa Liquibase?
3 Od czego zaczać?
4 Tworzenie nowych tabel
5 Migracja danych
6 Różnice w bazach danych
7 Co jeszcze?
8 Podsumowanie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 19/63
![Page 20: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/20.jpg)
Jak dodać Liquibase do nowego Spring’owego projektu?
1. Dołączamy zależność
1: <dependency>2: <groupId>org.liquibase</groupId>3: <artifactId>liquibase-core</artifactId>4: <version>3.4.1</version>5: </dependency>
2. Tworzymy changelog’a w:
1: src/main/resources/db.changelog.xml
3. Konfigurujemy połączenie do bazy
4. Wyłączmy hbm2ddl (jak mamy Hibernate’a)
1: spring.jpa.hibernate.ddl-auto=none
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 20/63
![Page 21: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/21.jpg)
Jak dodać Liquibase do nowego Spring’owego projektu?
5. Definiujemy Bean’a
1: @Bean2: public SpringLiquibase liquibase() {3: SpringLiquibase liquibase = new SpringLiquibase();4: liquibase.setChangeLog("classpath:db.changelog.xml");5: liquibase.setDataSource(dataSource());6: return liquibase;7: }
lub
1: <bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">2: <property name="dataSource" ref="myDataSource" />3: <property name="changeLog" value="classpath:db.changelog.xml" />4: </bean>
6. I działa!
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 21/63
![Page 22: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/22.jpg)
A w przypadku nowego projektu ze Spring Boot’em
Wystarczy dodać zależność do liquibase-corei zdefiniować plik ze zmianami w odpowiednim miejscu:
src/main/resources/db/changelog/db.changelog.xml
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 22/63
![Page 23: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/23.jpg)
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.xml7: </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 23/63
![Page 24: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/24.jpg)
Jak wprowadzić Liquibase do istniejącego projektu?
2. Uruchamiamy:
1: mvn liquibase:changeLogSync
Skutki:
Utworzenie tabel Liquibase’owych
Wypełnienie tabeli DATABASECHANGELOG wpisami napodstawie changelog’a
Operacje zdefiniowane w changset’ach NIE zostaną wykonane
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 24/63
![Page 25: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/25.jpg)
Jak wprowadzić Liquibase do istniejącego projektu?
3. Od teraz wszelkie zmiany we wszystkich bazach (w tym naprodukcji) idą przez Liquibase’a!
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 25/63
![Page 26: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/26.jpg)
Agenda
1 Jak zarządzać zmianami w relacyjnej bazie danych?
2 Jak działa Liquibase?
3 Od czego zaczać?
4 Tworzenie nowych tabel
5 Migracja danych
6 Różnice w bazach danych
7 Co jeszcze?
8 Podsumowanie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 26/63
![Page 27: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/27.jpg)
Tworzenie nowych tabel
Przykładowe wymaganie projektowe
Chcę mieć możliwość definiowania użytkowników i ról.
Każdy użytkownik może posiadać kilka ról w systemie.
Na poziomie roli mogę zdefiniować w przyszłości, jakieczynności może wykonać dany użytkownik.Możliwe role:
useradminchangeConfigurationorderAcceptor.
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 27/63
![Page 28: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/28.jpg)
Tworzenie nowych tabel
1: <changeSet id="Release2-01" author="staszek">2: <createTable tableName="user">3: <column name="id" type="INT" autoIncrement="true">4: <constraints nullable="false" primaryKey="true"/>5: </column>6: <column name="email" type="VARCHAR(255)">7: <constraints unique="true" nullable="false"/>8: </column>9: <column name="password" type="VARCHAR(255)">10: <constraints nullable="false"/>11: </column>12: </createTable>13: </changeSet>
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 28/63
![Page 29: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/29.jpg)
Tworzenie kluczy obcych
1: <changeSet id="Release2-04" author="staszek">2: <createTable tableName="user_rights">3: <column name="id" type="INT" autoIncrement="true">4: <constraints nullable="false" primaryKey="true"/>5: </column>6: <column name="user_id" type="INT">7: <constraints nullable="false" foreignKeyName="user_rights_fk"8: referencedTableName="user" referencedColumnNames="id"/>9: </column>10: <column name="role_name" type="VARCHAR(128)">11: <constraints nullable="false"/>12: </column>13: <column name="description" type="VARCHAR(512)">14: <constraints nullable="false"/>15: </column>16: </createTable>17: </changeSet>
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 29/63
![Page 30: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/30.jpg)
Efekt
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 30/63
![Page 31: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/31.jpg)
Efekt
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 31/63
![Page 32: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/32.jpg)
Agenda
1 Jak zarządzać zmianami w relacyjnej bazie danych?
2 Jak działa Liquibase?
3 Od czego zaczać?
4 Tworzenie nowych tabel
5 Migracja danych
6 Różnice w bazach danych
7 Co jeszcze?
8 Podsumowanie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 32/63
![Page 33: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/33.jpg)
Tworzymy nowe tabele user rights new i user rights x
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 33/63
![Page 34: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/34.jpg)
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_rights5: group by role_name6: </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.id11: from user u join user_rights ur on u.id = ur.user_id12: join user_rights_new urn on ur.role_name = urn.role_name13: </sql>14: </changeSet>
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 34/63
![Page 35: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/35.jpg)
Po migracji danych
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 35/63
![Page 36: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/36.jpg)
Agenda
1 Jak zarządzać zmianami w relacyjnej bazie danych?
2 Jak działa Liquibase?
3 Od czego zaczać?
4 Tworzenie nowych tabel
5 Migracja danych
6 Różnice w bazach danych
7 Co jeszcze?
8 Podsumowanie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 36/63
![Page 37: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/37.jpg)
Modelowanie róźnic w bazach danych
za pomocą tag’a dbms:1: <changeSet id="Release5-01" author="staszek" dbms="h2, mysql, hsqldb">2: <createTable tableName="settings">3: <column name="id" type="INT">4: <constraints primaryKey="true" nullable="false"/>5: </column>6: <column name="is_active" type="bool"/>7: </createTable>8: </changeSet>9:10: <changeSet id="Release5-01" author="staszek" dbms="db2">11: <createTable tableName="settings">12: <column name="id" type="INT">13: <constraints primaryKey="true" nullable="false"/>14: </column>15: <column name="is_active" type="decimal(1)"/>16: </createTable>17: </changeSet>
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 37/63
![Page 38: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/38.jpg)
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" >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 38/63
![Page 39: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/39.jpg)
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.htmlMarcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 39/63
![Page 40: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/40.jpg)
Agenda
1 Jak zarządzać zmianami w relacyjnej bazie danych?
2 Jak działa Liquibase?
3 Od czego zaczać?
4 Tworzenie nowych tabel
5 Migracja danych
6 Różnice w bazach danych
7 Co jeszcze?
8 Podsumowanie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 40/63
![Page 41: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/41.jpg)
Preconditions
Gdy musimy skorzystać z innego użytkownika, zależnie od typubazy 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 41/63
![Page 42: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/42.jpg)
Generowanie rollback’ów
Dla operacji typu:
tworzenie tabel
zmiana nazwy kolumny
dodawanie kolumny
rollback może zostać wygenerowany automatycznie.
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 42/63
![Page 43: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/43.jpg)
Generowanie rollback’ów
Dla innych operacji możemy sami sobie zdefiniować:
1: <changeSet id="Release7-01" author="staszek">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 43/63
![Page 44: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/44.jpg)
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 44/63
![Page 45: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/45.jpg)
Porównywanie baz danych
1: Diff Results:2: Reference Database: liqui@localhost @ jdbc:mysql://localhost:3306/public (Default Schema: public)3: Comparison Database: LIQUIBASEDEMO @ jdbc:h2:~/liquibasedemo (Default Schema: PUBLIC)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): NONE11: Unexpected Catalog(s): NONE12: Changed Catalog(s):13: public14: name changed from ’public’ to ’LIQUIBASEDEMO’15: Missing Column(s):16: user_rights.description17: user_rights_new.description18: user.email19: ...20: Unexpected Column(s): NONE21: ...
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 45/63
![Page 46: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/46.jpg)
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 46/63
![Page 47: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/47.jpg)
Porównywanie baz danych
1: <?xml version="1.0" encoding="UTF-8" standalone="no"?>2: <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">3: <changeSet author="staszek (generated)" id="1442839118428-1">4: <createTable tableName="user">5: <column autoIncrement="true" name="id" type="INT">6: <constraints primaryKey="true" primaryKeyName="PRIMARY"/>7: </column>8: <column name="email" type="VARCHAR(255)">9: <constraints nullable="false"/>10: </column>11: <column name="password" type="VARCHAR(255)">12: <constraints nullable="false"/>13: </column>14: </createTable>15: </changeSet>16: <changeSet author="staszek (generated)" id="1442839118428-2">17: <createTable tableName="user_rights">18: <column autoIncrement="true" name="id" type="INT">19: <constraints primaryKey="true" primaryKeyName="PRIMARY"/>20: </column>21: <column name="user_id" type="INT">22: ...
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 47/63
![Page 48: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/48.jpg)
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 48/63
![Page 49: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/49.jpg)
DBDoc - generowanie dokumentacji w stylu JavaDoc
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 49/63
![Page 50: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/50.jpg)
Blokowanie wykonywania zmian
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 50/63
![Page 51: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/51.jpg)
Blokowanie wykonywania zmian
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 51/63
![Page 52: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/52.jpg)
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:9abc:def0%awdl0) since 21.09.15 16:14
5: at liquibase.lockservice.StandardLockService.waitForLock(StandardLockService.java:175)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 52/63
![Page 53: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/53.jpg)
Agenda
1 Jak zarządzać zmianami w relacyjnej bazie danych?
2 Jak działa Liquibase?
3 Od czego zaczać?
4 Tworzenie nowych tabel
5 Migracja danych
6 Różnice w bazach danych
7 Co jeszcze?
8 Podsumowanie
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 53/63
![Page 54: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/54.jpg)
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 54/63
![Page 55: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/55.jpg)
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 54/63
![Page 56: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/56.jpg)
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 54/63
![Page 57: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/57.jpg)
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 54/63
![Page 58: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/58.jpg)
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 54/63
![Page 59: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/59.jpg)
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 54/63
![Page 60: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/60.jpg)
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 54/63
![Page 61: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/61.jpg)
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ę bazadanych
Współpracuje z: Ant, Maven, Spring, Command Line, Servlet,JEE CDI, Spring Boot
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 55/63
![Page 62: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/62.jpg)
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ę bazadanych
Współpracuje z: Ant, Maven, Spring, Command Line, Servlet,JEE CDI, Spring Boot
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 55/63
![Page 63: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/63.jpg)
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ę bazadanych
Współpracuje z: Ant, Maven, Spring, Command Line, Servlet,JEE CDI, Spring Boot
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 55/63
![Page 64: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/64.jpg)
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ę bazadanych
Współpracuje z: Ant, Maven, Spring, Command Line, Servlet,JEE CDI, Spring Boot
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 55/63
![Page 65: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/65.jpg)
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ę bazadanych
Współpracuje z: Ant, Maven, Spring, Command Line, Servlet,JEE CDI, Spring Boot
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 55/63
![Page 66: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/66.jpg)
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ę bazadanych
Współpracuje z: Ant, Maven, Spring, Command Line, Servlet,JEE CDI, Spring Boot
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 55/63
![Page 67: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/67.jpg)
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ę bazadanych
Współpracuje z: Ant, Maven, Spring, Command Line, Servlet,JEE CDI, Spring Boot
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 55/63
![Page 68: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/68.jpg)
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 56/63
![Page 69: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/69.jpg)
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 56/63
![Page 70: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/70.jpg)
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 56/63
![Page 71: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/71.jpg)
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 56/63
![Page 72: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/72.jpg)
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 56/63
![Page 73: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/73.jpg)
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 56/63
![Page 74: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/74.jpg)
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 56/63
![Page 75: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/75.jpg)
A co gdy trzeba nam czegoś więcej?
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 57/63
![Page 76: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/76.jpg)
A co gdy trzeba nam czegoś więcej?
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 58/63
![Page 77: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/77.jpg)
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 prawamiuż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 59/63
![Page 78: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/78.jpg)
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 prawamiuż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 59/63
![Page 79: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/79.jpg)
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 prawamiuż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 59/63
![Page 80: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/80.jpg)
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 prawamiuż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 59/63
![Page 81: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/81.jpg)
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 prawamiuż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 59/63
![Page 82: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/82.jpg)
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 prawamiuż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 59/63
![Page 83: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/83.jpg)
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 prawamiuż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 59/63
![Page 84: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/84.jpg)
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 prawamiuż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 59/63
![Page 85: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/85.jpg)
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 prawamiuż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 59/63
![Page 86: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/86.jpg)
Liquibase vs Flyway
Minusy Liquibase’a:
Wolniejszy niż flyway (parsowanie XML’a, budowanie SQL’a)
Plusy Flyway’a:
Szybszy
Czysty SQL
Minusy Flyway’a:
Słabe wsparcie dla wielu różnych baz (osobne zmiany dlakażdej bazy)
Brak wsparcia dla wracania do starej wersji
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 60/63
![Page 87: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/87.jpg)
Liquibase vs Flyway
Minusy Liquibase’a:
Wolniejszy niż flyway (parsowanie XML’a, budowanie SQL’a)
Plusy Flyway’a:
Szybszy
Czysty SQL
Minusy Flyway’a:
Słabe wsparcie dla wielu różnych baz (osobne zmiany dlakażdej bazy)
Brak wsparcia dla wracania do starej wersji
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 60/63
![Page 88: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/88.jpg)
Liquibase vs Flyway
Minusy Liquibase’a:
Wolniejszy niż flyway (parsowanie XML’a, budowanie SQL’a)
Plusy Flyway’a:
Szybszy
Czysty SQL
Minusy Flyway’a:
Słabe wsparcie dla wielu różnych baz (osobne zmiany dlakażdej bazy)
Brak wsparcia dla wracania do starej wersji
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 60/63
![Page 89: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/89.jpg)
Liquibase vs Flyway
Minusy Liquibase’a:
Wolniejszy niż flyway (parsowanie XML’a, budowanie SQL’a)
Plusy Flyway’a:
Szybszy
Czysty SQL
Minusy Flyway’a:
Słabe wsparcie dla wielu różnych baz (osobne zmiany dlakażdej bazy)
Brak wsparcia dla wracania do starej wersji
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 60/63
![Page 90: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/90.jpg)
Liquibase vs Flyway
Minusy Liquibase’a:
Wolniejszy niż flyway (parsowanie XML’a, budowanie SQL’a)
Plusy Flyway’a:
Szybszy
Czysty SQL
Minusy Flyway’a:
Słabe wsparcie dla wielu różnych baz (osobne zmiany dlakażdej bazy)
Brak wsparcia dla wracania do starej wersji
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 60/63
![Page 91: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/91.jpg)
Liquibase vs Flyway
Minusy Liquibase’a:
Wolniejszy niż flyway (parsowanie XML’a, budowanie SQL’a)
Plusy Flyway’a:
Szybszy
Czysty SQL
Minusy Flyway’a:
Słabe wsparcie dla wielu różnych baz (osobne zmiany dlakażdej bazy)
Brak wsparcia dla wracania do starej wersji
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 60/63
![Page 92: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/92.jpg)
Liquibase vs Flyway
Minusy Liquibase’a:
Wolniejszy niż flyway (parsowanie XML’a, budowanie SQL’a)
Plusy Flyway’a:
Szybszy
Czysty SQL
Minusy Flyway’a:
Słabe wsparcie dla wielu różnych baz (osobne zmiany dlakażdej bazy)
Brak wsparcia dla wracania do starej wersji
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 60/63
![Page 93: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/93.jpg)
Liquibase vs Flyway
Minusy Liquibase’a:
Wolniejszy niż flyway (parsowanie XML’a, budowanie SQL’a)
Plusy Flyway’a:
Szybszy
Czysty SQL
Minusy Flyway’a:
Słabe wsparcie dla wielu różnych baz (osobne zmiany dlakażdej bazy)
Brak wsparcia dla wracania do starej wersji
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 60/63
![Page 94: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/94.jpg)
Pytania
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 61/63
![Page 95: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/95.jpg)
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 62/63
![Page 96: Zarządzanie zamianami w relacyjnych bazach danych](https://reader037.vdocuments.net/reader037/viewer/2022110218/587dc5131a28ab1b498b6f01/html5/thumbnails/96.jpg)
Zarządzanie zmianami w relacyjnych bazachdanych
Marcin Stachniuk
Dziękuję!30 listopada 2015
Marcin Stachniuk Zarządzanie zmianami w relacyjnych bazach danych 63/63