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

使用 Liquibase 發展資料庫結構

Jan 08, 2017

Download

Software

Steven Wang
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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