Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring...

18
Datenbank-Refactoring mit LiquiBase Benjamin Schmid Agile Software-Entwicklung mit RDBMS Refactoring & Change Management

Transcript of Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring...

Page 1: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit LiquiBase

Benjamin Schmid

Agile Software-Entwicklung mit RDBMS Refactoring & Change Management

Page 2: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2

Softwareentwicklung in der Praxis

Hervorragende Lösungen beim Programmcode für:

• Versionierung SVN, CVS

• Build- und Ant,Maven

Test-Automatisierung CI-Server

• Abstraktion und Modellierung UML

• Refactoring Eclipse, IDEA

Und für die Datenbank?

Page 3: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid #3

Datenbank-Entwicklung in der PraxisWelchen Stand hat die Datenbank?

‚Unknown column‘: Sind deine Änderungen schon drin?

Wie nenne ich noch mal schnell die Spalte um?

BIGINT in MySQL Und für Oracle?

Uuups! Können wir schnell zurück zur vorigen Version?

Nerv! Geht das alles nicht auch automatisch?

Page 4: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid #4

Open-Source (LGPL)-Lösung zur Ausführung, Management und Dokumentationvon Datenbankänderungen

Kern-Features:• Herstellerunabhängig

• Automatisierung

• Rollback-Strategie

• Änderungsdokumentation

• Code-Branchfähig

• Teamfähig & ‚DBA-fähig‘

• IDE Support

Page 5: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid #5

What‘s so special about LiquiBase?

• Kein Soll/Ist ‚Diff-Tool‘ sondern Beschreibung der Änderungen- Erhalt der Semantik

(name name2: rename oder drop+new ?)

• Änderungen werden einzeln betrachtet- Keine linearer Versionierung ( Branches)

- Change Log wird sequentiell abgearbeitet; die ausstehenden Änderungen ausgeführt

• … und in einer Tabelle protokolliert

Page 6: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid #6

Unterstützte Datenbanken -

• Oracle

• MS SQL

• MySQL

• PostgreSQL

• DB2

• Sybase

• HLSQL

• Apache Derby

• H2

• Caché

• MaxDB

• SQLlite

Page 7: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid #7

Wie funktionierts? (1)In einer XML-Datei/via IDE werden alle Änderungen in als Change Sets beschrieben & gepflegt:

ID = id + author + filenameChange Set durch MD5 Hash gesichert

Page 8: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid, eXXcellent solutions #8

Verfügbare Refactorings13 Structural Refactorings

Add/Rename/Drop: Colum/Table/ViewMerge Columns, Stored Procedure

10 Data Quality RefactoringsAdd/Drop: Constraint/Lookup-Table/Sequence/Default Value

4 Referential Integrity RefactoringsAdd/Drop: Foreign & Primary Keys

5 Non-Refactoring TransformationsInsert/Load/Update/Delete Data

4 Custom RefactoringsCustom SQL/Refactoring Class/Shell Command

2 Index Refactorings

Page 9: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid #9

Wie funktionierts? (2)Ausführung der Change Sets über LiquiBase Runner:

Ant, Maven, Kommandozeile, Servlet Listener, via API, Spring, Grails.

Beispiel in Ant:

Page 10: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid #10

Wie funktionierts? (3)Folgende Operationen sind möglich:

• Automatische Migration auf akt. Stand

• Nur Prüfung auf offene Änderungen

• DDL-Skript Generierung(inkl. zugehörigem Rollback-Skript)

• Change Sets aus Datenbank-Diff erzeugen(Special Feature: Diff gegen Hibernate-Mapping!)

• Rollback, Datenbankstand taggen, Änderungsdokumentation, Drop-all, …

Page 11: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid #11

Änderung von Code & Datenbank über die ZeitCode-

änderung

Version-Verwaltung

LiquiBaseChange Set

v 1.0

AktuelleDatenbank

(+ Change Log)

1.1

Code-änderung

LiquiBaseChange Set

Code-änderung

LiquiBaseChange Set

v 2.0

Code-änderung

LiquiBaseChange Set

Code-änderung

LiquiBaseChange Set

EffektivesLiquiBase

Change Log

Page 12: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid #12

IDE Support

Hervorragende verwendbar mit IDE-BordmittelnUmfangreiches IntelliSense dank XML Schema

• IntelliJ IDEA PluginAktuellste Fassung (v1.8.0) und größter Umfang

• Eclipse PluginAlpha-Status und aktuell veraltet (v0.6)

• Standalone IDEVeraltet und eher Technolgie-Demo (v 0.6)

Page 13: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid #13

IDE Demo

PowerPoint iss‘ doof…

Page 14: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid #14

Tagging & RollbackRollback-Wege:

automatischcreate table drop tabledrop table n/a

explizite Definition:

LiquiBase Refactorings

SQL Anweisungen

Re-do Change Set Y

Rollbackpunkte:• Datum / Uhrzeit

• Number of Changes

• Markierte Version(Tag)

Page 15: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid #15

Weitere Features

• MD5 gesicherte Change Sets(Erkennen nachträglicher Änderungen)

• runalways bzw. runonchange

• Generierung einer Änderungsdokumentation

• Hibernate Support(diff gegen Mapping Dateien: *.hbm.xml)

• Clusterfähig (Locking) und Contexts

• Preconditions und Assertions zur Zielplattform

Page 16: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid #16

Änderungsdokumentation

Page 17: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid #17

FazitMit Liquibase können Sie spielend

• Automatisiert beim Start ihre Datenbanken migrieren

• Die Datenbank adäquat wie Ihren Code behandeln

• DBA-konform Migrations- & Rollback Skripte erzeugen

Und durch den Automatismus ideal für

• Software-Entwicklung im Team

• Continuous Integration und Testing

• einen agilen und robusten Entwicklungsprozess

• regelmäßige Auslieferungen

Page 18: Datenbank-Refactoring mit Liquibase - eXXcellent solutions · 2015-02-10 · Datenbank-Refactoring mit Liquibase, Benjamin Schmid #2 Softwareentwicklung in der Praxis Hervorragende

Datenbank-Refactoring mit Liquibase, Benjamin Schmid #18

Referenzen

Alternativen (OSS)dbdeploy http://dbdeploy.com

MIGRATEdb http://migratedb.sourceforge.net/

Kontakt: B.Schmid(at)exxcellent.deoder an unserem Stand

LiquiBasehttp://www.liquibase.org/

Materialien zum Thema Refactoring & Code Qualität

Der 10 Punke Plan zum unwartbaren Code, Automatisiertees GUI-Testing, Refactorings, …

http://www.exxcellent.de/download.html