使用 liquibase 發展資料庫結構

13
使使 Liquibase 使使使使使使使 Liquibase is 10 years old!!

Upload: steven-wang

Post on 08-Jan-2017

672 views

Category:

Software


0 download

TRANSCRIPT

Page 1: 使用 Liquibase 發展資料庫結構

使用 Liquibase 發展資料庫結構Liquibase is 10 years old!!

Page 2: 使用 Liquibase 發展資料庫結構

Ref: Datical DB

• 高控制性• 無法自動判斷變更的版本• 需要依賴人工介入• 很難處理不同版本的資料庫轉移

• 與程式碼的耦合度高• 可以透過不同的 dialect 處理不同的資料庫• 只能有條件的管理變更• 很難處理資料的變更

SQL JPA

Page 3: 使用 Liquibase 發展資料庫結構

最初的需求 (2006)• 所有的變更都和程式碼一起保存在版本控制系統裡,並且可以被分支與合併• 每一個變更都可以容易的被產生,並且擁有獨一無二的識別• 每個資料庫知道要執行哪些變更來符合現在程式碼的版本

Ref: Sundog Database Refactoring Tool Early Access Program Opens

Page 4: 使用 Liquibase 發展資料庫結構

最初的需求 (2016)• 支援多種資料庫,甚至能在不同的資料庫執行相同的程式• 支援多個開發人員、多個分支下的並行開發• 安全的更新資料庫結構而不必擔心資料遺失• 追蹤資料庫的變化

Ref: Happy Birthday! Here's to 10 Years of Liquibase

Page 5: 使用 Liquibase 發展資料庫結構

支援• Java 1.4 和 1.5

• MySQL, PostgreSQL, Oracle, Sql Server, Sybase, DB2, Derby, HSQL, H2, Informix, Firebird, SQLite

• Command Line, Ant, Maven, Gradle, Spring-boot…

• XML, YAML, JSON, SQL

Page 6: 使用 Liquibase 發展資料庫結構

Ref: Datical DB

Page 7: 使用 Liquibase 發展資料庫結構

ChangeLog

ChangeSet

Change

1

*

1

*

必須能自動執行

版本控制

結構

Page 8: 使用 Liquibase 發展資料庫結構

<databaseChangeLog xmlns=“…”>

<changeSet id="00000000000001" author=“steven">

<createTable tableName="user"> <column name="id" type="bigint" autoIncrement="true"> <constraints primaryKey="true" nullable="false"/> </column> <column name="name" type="varchar(100)"/> </createTable>

<rollback> drop table user </rollback>

</changeSet>

</databaseChangeLog>

Page 9: 使用 Liquibase 發展資料庫結構

兩個重要的 table• DATABASECHANGELOG

• 用來追蹤哪些 ChangeSet 已經執行• Author 、 ID 、 File

• DATABASECHANGELOGLOCK

• 避免衝突

Page 10: 使用 Liquibase 發展資料庫結構

常用的指令• update

• rollback

• diff

• tag

Ref: Liquibase Command Line

Page 11: 使用 Liquibase 發展資料庫結構

Best Practices

• 透過 master.xml 來管理所有的 ChangeSet

• 不更改已執行過的 ChangeSet

• 確保所有的 ChangeSet 都有 Rollback

Ref: Liquibase Best Practices

Page 12: 使用 Liquibase 發展資料庫結構

常見的問題• ChangeSet 的主要屬性: runAlways,

runOnChange, runInTransaction 的使用• rollback 的問題• generateChangeLog 指令

Page 13: 使用 Liquibase 發展資料庫結構

練習資源• Tutorial using Oracle

• http://www.liquibase.org/tutorial-using-oracle

• JCConf TW 2015 Database Continuous Integration

• https://github.com/wang-steven/jcconf-tw-2015