Wersjonowanie baz danych podczas developmentu. Liquibase. Piotr Pelczar. me@athlan.pl



Podobne dokumenty
Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4

Wdrożenie modułu płatności eservice. dla systemu Magento

Projektowanie systemów baz danych

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Dokumentacja kompilacji źródeł aplikacji 1.0

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Bazy Danych i Usługi Sieciowe

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x

Bazy danych i usługi sieciowe

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Podstawowe wykorzystanie Hibernate

Rozwiązania bazodanowe EnterpriseDB

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Załącznik 2 utworzenie projektu

Podstawowe informacje o bazach danych. Technologie Informacyjne

Język SQL, zajęcia nr 1

Programowanie w Ruby

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Wprowadzenie do Doctrine ORM

Kopie bezpieczeństwa NAPRAWA BAZ DANYCH

Zaawansowane Techniki Bazodanowe

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Programowanie w Ruby

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

NARZĘDZIA WIZUALIZACJI

Hurtownie danych - przegląd technologii

ETL darmowe narzędzia

JDBC w LoXiMie. Interfejs Java Database Connectivity dla systemu LoXiM. Adam Michalik 2008

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Paweł Cieśla. Dokumentacja projektu

AKADEMIA GÓRNICZO-HUTNICZA Wydział Elektrotechniki, Automatyki, Elektroniki i Informatyki

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Ekspert MS SQL Server Oferta nr 00/08

Wykład 5: PHP: praca z bazą danych MySQL

Ćwiczenie dotyczące platformy Java EE zostało przygotowane z myślą o środowisku NetBeans w wersji 7.3 (do pobrania z

Bazy danych - wykład wstępny

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Instalacja MySQL.

Administracja i programowanie pod Microsoft SQL Server 2000

Git rozproszony system kontroli wersji

Platformy Technologiczne

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Open Source w służbie developerom

Bazy danych. Polecenia SQL

Środowisko NetBeans. Paweł Boguszewski

Instrukcja konfiguracji programu KS-ASW do pracy w trybie wielopodmiotowym

Załącznik 1 instrukcje instalacji

System. Instalacja bazy danych MySQL. Autor : Piotr Zielonka tel Piotrków Tryb., sierpień 2018r.

Koncepcja oprogramowania SELS

Serwery LDAP w środowisku produktów w Oracle

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

NARZĘDZIA WIZUALIZACJI

Budowa aplikacji webowej w oparciu o Maven2 oraz przykłady testów jednostkowych. Wykonał Marcin Gadamer

Bazy danych - Materiały do laboratoriów VIII

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

Baza danych sql. 1. Wprowadzenie. 2. Repozytaria generyczne

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Instrukcja instalacji oprogramowania dla środowiska Linux

ESB. Instrukcja techniczna. Wydatek współfinansowany przez Unię Europejską ze środków Europejskiego Funduszu Rozwoju Regionalnego

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

akademia androida Składowanie danych część VI

Podstawy Pentaho Data Integration

Wykład 2. SQL 1 Structured Query Lenguage

Instrukcja obsługi narzędzia API

Co zostanie wypisane na ekranie? (1)

ERDAS ADE Suite edytor baz danych Oracle Spatial

Instrukcja instalacji oprogramowania dla środowiska Linux

Business Intelligence Beans + Oracle JDeveloper

Dokumentacja SQL API 1

Programowanie obiektowe

System kontroli wersji - wprowadzenie. Rzeszów,2 XII 2010

1. Wprowadzenie. 2. Instalacja i uruchomienie. 3. Projekt i POM

Co to jest Baza Danych

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

Przykładowa baza danych BIBLIOTEKA

Laboratorium nr 1. Temat: Wprowadzenie do MySQL-a

Podejście obiektowe do relacyjnych baz danych Hibernate.

Programowanie w Ruby

Program szkolenia: Continuous Integration i Git

Autor: Joanna Karwowska

Bazy danych 2. Wykład 1

Wielojęzykowość w aplikacjach J2EE. Tomasz.Skutnik@e-point.pl

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

SYSTEM MONITORINGU PARAMETRÓW WĘZŁÓW PRZECHOWYWANIA DANYCH DLA PROJEKTU KRAJOWY MAGAZYN DANYCH PODRĘCZNIK DEWELOPERA

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Biocentrum Ochota infrastruktura informatyczna dla rozwoju strategicznych kierunków biologii i medycyny POIG /09

Specyfikacja implementacyjna aplikacji mobilnej

Tworzenie wersji demonstracyjnych enova365 na potrzeby prezentacji u Klienta

Systemy Kontroli Wersji

Transkrypt:

Wersjonowanie baz danych podczas developmentu Liquibase Piotr Pelczar me@athlan.pl

Piotr Athlan Pelczar Freelancer: vgroup.pl, athlan.pl goldenline.pl/piotr-pelczar me@athlan.pl

Agenda 1. Problem wersjonowania struktur baz danych 2. Przedstawienie narzędzia Liquibase 3. Instalacja 4. Pierwszy zrzut bazy, tworzenie tagów 5. Database diff, tag 6. Rollback 7. Preconditions 8. Dobre praktyki 9. Integracja z Maven i Eclipse

Problem Baza danych musi być integralna podczas developmentu. Jak utrzymać jej integralność? Jak pozbyć się problemu supportowania developerów? Problem branchowania i mergeowania zmian wprowadzanych podczas równoległego rozwoju aplikacji.

Czym jest Liquibase? Niezależna od bazy danych biblioteka. OpenSource. Dostępna z linii poleceń. Do śledzenia i zarządzania zmianami w bazie danych. Zmiany są zapisywane w plikach XML.

Wspierane bazy danych MySQL PostgreSQL Oracle MS-SQL Sybase Enterprise Sybase Anywhere DB2 Apache Derby HSQL H2 Informix InterSystems Caché Firebird SAPDB SQLite http://www.liquibase.org/databases Warto się zapoznać z issues.

Format zmian Jako plik XML Obsługuje ponad 40 rodzajów zmian W tym raw SQL, co jest otwartą furktą Można uruchamiać komendy shell http://www.liquibase.org/manual/refactoring_commands

Format zmian

Format zmian Zmiany są również przechowywane lokalnie w bazie danych w tabeli databasechangelog

Współbieżność pracy Współbieżność jest zagwarantowana poprzez wpisy w tabeli databasechangeloglock

Uruchamianie Liquibase Możliwość uruchomienia Liquibase z poziomu: Ant Maven Spring Framework (jako bean w kontekście) Grails Servlet Listener Command Line Integracja z Hibernate

Instalacja 1. http://www.liquibase.org/download 2. Rozpakowujemy 3. Pobieramy odpowiedni driver JDBC do bazy danych, np. postgresql-9.1-902.jdbc4.jar

Instalacja 4. W bieżącym katalogu tworzymy pusty liquibase.properties z wpisem: classpath=d:\\programs\\liquibase\\ postgresql-9.1-902.jdbc4.jar Nadpisuje on wartości z linii poleceń, można zmienić lokalizację za pomocą flagi --defaultsfile http://www.liquibase.org/manual/command_line#using_a_liq uibaseproperties_file

Wymagania 1. Java 1.5 lub nowsza 2. Poprawnie skonfigurowany classpath oraz JAVA_HOME 3. Tak, aby Java była dostępna z polecenia: java -version 4. Liquibase jest uruchamiane jako archiwum JAR: java -jar liquibase.jar

Po rozpakowaniu

Pierwszy zrzut bazy danych liquibase --url=jdbc:postgresql://localhost:5432/ handlowcy --username postgres --password root --changelogfile="schema.xml" generatechangelog http://www.liquibase.org/manual/generating_changelogs

Pierwszy zrzut bazy danych Ograniczenia, w sposób automatyczny nie są zrzucane: Procedury składowane Funkcje Triggey Jest możliwość wykonywania swoich zapytań SQL, ale nie będą przenośne. http://www.liquibase.org/manual/generating_changelogs

Załadowanie schematu bazy liquibase --url=jdbc:postgresql://localhost:5432/ handlowcy_dev --username postgres --password root --changelogfile="schema.xml" update

Wygenerowanie zapytań SQL liquibase --url=jdbc:postgresql://localhost:5432/ handlowcy_dev --username postgres --password root --changelogfile="schema.xml" updatesql > changes.sql

Nadeszły zmiany, diff Sprawdzenie zmian, które nastąpiły: liquibase --url=jdbc:postgresql:// --username postgres --password root --referenceurl=jdbc:postgresql:// --referenceusername postgres --referencepassword root diff

Nadeszły zmiany, diff

Generujemy zmiany, diffchangelog liquibase --url=jdbc:postgresql:// --username postgres --password root --referenceurl=jdbc:postgresql:// --referenceusername postgres --referencepassword root --changelogfile=changelog-date-ath.xml diffchangelog

Diff danych liquibase --url=jdbc:postgresql:// --username postgres --password root --referenceurl=jdbc:postgresql:// --referenceusername postgres --referencepassword root --changelogfile=changelog-date-ath.xml --difftypes=data diffchangelog

Diff uwagi Diff obsługuje: Missing/unexpected tables, views, columns Missing/unexpected primary keys, unique constraints Missing/unexpected foreign Keys Missing/unexpected sequences, indexes Column definition differences (data type, autoincrement, etc.) View definition differences Data differences (limited), not checked by default

Nadeszły zmiany, diff Diff nie obsługuje: Non-foreign key constraints (check, etc) Stored Procedures Data type length* * Testowano: Zmiany długości varchar w PostgreSQL są wykrywane.

Nadeszły zmiany, diff Ważnym jest, żeby dobrze interpretować reference. Z naszej perspektywy baza produkcyjna jest główną, a rererence jest developerska. Jeżeli odwrócimy, naturalną konsekwencją jest wygenerowanie DROP ów zamiast CREATE ów. Umieszczanie daty i nazwy dewelopera w nazwach plików changelogów to dobry nawyk: 2012-11-24-athlan.xml. Przy zbiorczych change ach pliki te jednoznacznie są identyfikowane nie tylko w Liquibase, ale na repozytorium git czy SVN, można je łatwiej mergeować.

Nadeszły zmiany, diff Raz wykonany changeset już nigdy nie zostanie powtórzony (identyfikowany po author oraz id). Nie ma poprawiania XML na repo.

Tagowanie bazy danych 1. W pliku XML <tagdatabase tag="nazwa"/> 2. Z poziomu linii poleceń liquibase --url=jdbc:postgresql:// --username postgres --password root tag NAZWA

Rollback Tryb Komenda Tryb SQL Do taga Data rollback <tag> rollbacktodate <date> Ilość changeset ów rollbackcount <number> rollbacksql <tag> rollbacktodatesql <date> rollbackcountsql <number>

Rollback liquibase --url=jdbc:postgresql:// --username postgres --password root rollback tag rollbacksql tag > rollback.sql

Rollback Większość operacji ma komplementarne sobie operacje odwrotne. Jeżeli nie mają, lub chcemy podjąć inne akcje, do changeset a dodajemy tag <rollback> Są zapisywane w bazie danych.

Rollback

Rollback Przykładowy procedure

Preconditions Warunki, które muszą być spełnione, aby nastąpił cały zestaw changeset ów lub pojedynczy z nich. Przydają się, gdy: Osoba przygotowująca changelog ma jakieś założenia. Zapewnia ich przestrzealność. Umożliwia sprawdzenie danch, bądź parametrów. Decyduje, które chengesety są uruchamiane, a które nie.

Preconditions

Preconditions

Preconditions Możliwe preconditions: columnexists tableexists viewexists indexexists sequenceexists primarykeyexistsdbms runningas changesetexecuted sqlcheck changelogpropertydefined customprecondition (classname implementuje interfejs liquibase.precondition.custo mprecondition)

Dobre praktyki 1. Trzymaj changelog i spięte <include> zawarte w master.xml i wykonuj master a

Integracja z Maven: pom.xml Tworzymy główny pom.xml Przykład dotyczy modułu common-model

Integracja z Maven: pom.xml

Integracja z Maven: pom.xml

Integracja z Maven: pom.xml Kompilacja Maven z changesetami: mvn install:liquibase

Pytania? 1. Database diff, tag 2. Rollback 3. Preconditions 4. Dobre praktyki 5. Integracja z Maven i Eclipse 6. Inne Piotr Pelczar me@athlan.pl

Wersjonowanie baz danych podczas developmentu Liquibase Piotr Pelczar me@athlan.pl