狠狠撸

狠狠撸Share a Scribd company logo
数据库开发的版本控制和持续集成


      Michael Zeng
      --------------------------------------------------
      成都研发中心
      EMail : zengjingtao@91huayi.com
You never develop code without version
control, why do you develop your
database without it?

代码开发流程中必不可少的版本控制机
制,在数据库开发中你用了吗?
我们的位置?

1.   在数据库上手工开发
2.   建模工具,直接更新到数据库
3.   建模工具,生成完整脚本进行版本控制
4.   建模工具,版本控制,持续集成
传统的模式 (part 1)

数据库脚本版本化
传统的模式 (part 2)

新建库




升级库
传统的模式 (part 3)

?优点
 ? 脚本统一管理
 ? 追溯版本修改历史
 ? 半部署自动化


              ?不足
               × 升级过程繁琐
               × 人工干预带来的风险
               × 无法持续集成
数据库开发三条原则

1. Never use a shared database server for development work.
不要在共享数据库服务器上进行开发工作,避免开发人员相互覆盖彼此
所做的修改。


2. Always Have a Single, Authoritative Source For Your Schema
仅保留一份权威的Schema生成源,保证每一个人都可以用它轻松地重新
创建一个新的数据库。


3. Always Version Your Database
对数据库进行版本管理。将变化由开发传递到测试,最后到生产环境。


                                                  Scott Allen
什么是持续集成


   持续集成(Continuous Integration)是一种软件
开发实践,即团队开发成员经常集成它们的工作。
每次集成都通过自动化的构建(包括编译,发布,
自动化测试)来验证,从而尽快地发现集成错误。


                         Martin Fowler
DBCI中的几个概念

Baseline
  ?   一个或者一组脚本
  ?   所有可以从零开始生成数据库的SQL
                                Baseline

Change Set
  ?   修改必须通过脚本文件以”增量更新”实现   Change     Log
                             Set
  ?   增量是相对的
  ?   增量有唯一的标识符

Applied Change Log
  ?   记录Change Set应用的情况
  ?   避免重复运行同一个修改
DBCI中的版本控制

分别处理Baseline和Change Set
顿叠颁滨中的发布更新

      Applied Change
            Log


                 Update


                 Roll Back
理论 VS 实现

?商业产物
 ? Red Gate
?开源项目
 ? Liquibase
 ? Apache Maven
?自力更生
 ? Shell
Liquibase是什么

Liquibase is an open source (Apache 2.0 Licensed), database-
independent library for tracking, managing and applying database
changes. It is built on a simple premise: All database changes are
stored in a human readable yet trackable form and checked into
source control.
? Database Change Management工具
? 开源,轻量级
? 垮平台,数据库类型无关
? 基于XML配置
? 仅仅是一个框架工具
脚本目录结构

Baseline                   Replaceable
                             Object
  ?   一个或者一组脚本             Non Replaceable
  ?   从零开始生成                    Object

Change Set
  ?   以”增量更新”实现            Optional
  ?   增量是相对的
  ?   增量有唯一的标识符

Applied Change Log
  ?   记录Change Set应用的情况
  ?   避免重复运行同一个修改
Install VS Update

Fresh Install            Daily Update
?从零开始创建一个应用,             ?把指定应用更新到当前版
并且更新到当前版本。               本
?仅可运行一次。                 ?可以重复运行
Fresh_Install.XML
Baseline.XML



           author + id = identifier

                     External SQL File




               Set current version
ChangeSet.XML



    Check current version

              Embedded SQL
              External SQL File
              XML Element
Program.XML




                  run everytime




替换SQL参数或者特殊字符
运行Liquibase

?通过Command Line,Apache Ant,
 Apache Maven等多种方式
?Ant调用例子
Tips

? XML文件编码建议使用UTF-8
? 参数替换
   ? XML文件中可以使用动态参数(路径,文件名,等)
   ? SQL脚本中可以使用动态参数(表空间名称,用户名称,等)
? Embedded SQL
   ? 合理使用splitstatement参数
? External SQL File
   ? 使用encoding参数,指明SQL脚本使用的字符编码
   ? 末尾包含/等特殊符号,运行前使用<modifySql>进行替换
数据库持续集成
Ad

Recommended

Load runner测试技术
Load runner测试技术
yiditushe
?
性能测试实践1
性能测试实践1
yiditushe
?
Top100summit 陈辉-游戏测试平台 策划资源文件自动化测试体系
Top100summit 陈辉-游戏测试平台 策划资源文件自动化测试体系
drewz lin
?
Workflow Overview
Workflow Overview
Kevin Cao
?
客服系统的软体架设计分享
客服系统的软体架设计分享
Johnson Gau
?
Entity framework + Linq 介紹
Entity framework + Linq 介紹
Alan Tsai
?
Osvn client 簡介
Osvn client 簡介
catonchuang
?
Entity Framework實戰
Entity Framework實戰
國昭 張
?
Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)
Will Huang
?
Xpp
Xpp
drewz lin
?
使用 Release management 2013 進行自動化部署
使用 Release management 2013 進行自動化部署
Gelis Wu
?
TFS source control 功能說明
TFS source control 功能說明
Gelis Wu
?
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
Gelis Wu
?
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
Will Huang
?
互联网持续交付整形记
互联网持续交付整形记
Ryan YU
?
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
Will Huang
?
ASP.NET 5 的創新與變革
ASP.NET 5 的創新與變革
Will Huang
?
Asp.net core v1.0
Asp.net core v1.0
chang kuo-chao
?
容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中
Andrew Wu
?
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
Justin Lin
?
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
Jeff Chu
?
Monitoring Tools 大亂鬥 - Consul
Monitoring Tools 大亂鬥 - Consul
Andrew Wu
?
Nuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的package
Alan Tsai
?
與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構
與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構
Andrew Wu
?
研发云:借助云计算实现持续交付(产测冯智超)
研发云:借助云计算实现持续交付(产测冯智超)
gigix1980
?
ASP.NET MVC 5 新功能探索
ASP.NET MVC 5 新功能探索
Will Huang
?
API Token 入門
API Token 入門
Andrew Wu
?
1~60
1~60
s13993010
?
Somaliland – in search for international recognition / Somaliland – auf der S...
GIGA Informationszentrum
?
Four s fortnightly pharma health track 23th january - 5th febuary 2012
Four s fortnightly pharma health track 23th january - 5th febuary 2012
Four-S
?

More Related Content

What's hot (20)

Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)
Will Huang
?
Xpp
Xpp
drewz lin
?
使用 Release management 2013 進行自動化部署
使用 Release management 2013 進行自動化部署
Gelis Wu
?
TFS source control 功能說明
TFS source control 功能說明
Gelis Wu
?
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
Gelis Wu
?
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
Will Huang
?
互联网持续交付整形记
互联网持续交付整形记
Ryan YU
?
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
Will Huang
?
ASP.NET 5 的創新與變革
ASP.NET 5 的創新與變革
Will Huang
?
Asp.net core v1.0
Asp.net core v1.0
chang kuo-chao
?
容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中
Andrew Wu
?
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
Justin Lin
?
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
Jeff Chu
?
Monitoring Tools 大亂鬥 - Consul
Monitoring Tools 大亂鬥 - Consul
Andrew Wu
?
Nuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的package
Alan Tsai
?
與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構
與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構
Andrew Wu
?
研发云:借助云计算实现持续交付(产测冯智超)
研发云:借助云计算实现持续交付(产测冯智超)
gigix1980
?
ASP.NET MVC 5 新功能探索
ASP.NET MVC 5 新功能探索
Will Huang
?
API Token 入門
API Token 入門
Andrew Wu
?
1~60
1~60
s13993010
?
Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)
Will Huang
?
使用 Release management 2013 進行自動化部署
使用 Release management 2013 進行自動化部署
Gelis Wu
?
TFS source control 功能說明
TFS source control 功能說明
Gelis Wu
?
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
Gelis Wu
?
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
Will Huang
?
互联网持续交付整形记
互联网持续交付整形记
Ryan YU
?
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
Will Huang
?
ASP.NET 5 的創新與變革
ASP.NET 5 的創新與變革
Will Huang
?
容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中
Andrew Wu
?
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
Justin Lin
?
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
Jeff Chu
?
Monitoring Tools 大亂鬥 - Consul
Monitoring Tools 大亂鬥 - Consul
Andrew Wu
?
Nuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的package
Alan Tsai
?
與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構
與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構
Andrew Wu
?
研发云:借助云计算实现持续交付(产测冯智超)
研发云:借助云计算实现持续交付(产测冯智超)
gigix1980
?
ASP.NET MVC 5 新功能探索
ASP.NET MVC 5 新功能探索
Will Huang
?
API Token 入門
API Token 入門
Andrew Wu
?

Viewers also liked (20)

Somaliland – in search for international recognition / Somaliland – auf der S...
GIGA Informationszentrum
?
Four s fortnightly pharma health track 23th january - 5th febuary 2012
Four s fortnightly pharma health track 23th january - 5th febuary 2012
Four-S
?
项目申报流程简版
项目申报流程简版
vimsuner
?
Release.sonhos.24.03.2010
Solange Das Gra?as Seno
?
M9 2 bim_aluno_2014
jeniifers
?
Caso de ?xito: Programa de medicamentos esenciales PROMESE/CAL
AMCHAMDR - Cámara Americana de Comercio
?
Presentation Teknisa
Presentation Teknisa
guestf98a87
?
Mercury Body Burden Correlated with Autism Disorder
Mercury Body Burden Correlated with Autism Disorder
v2zq
?
EDYS: Project Superstars
EDYS: Project Superstars
Gabriel BREZOIU
?
Challenges of Setting Up Commodity or Derivatives Exchanges in Emerging Markets
Challenges of Setting Up Commodity or Derivatives Exchanges in Emerging Markets
Jeremmy Okonjo
?
?? ??? ??????
?? ??? ??????
Amin Bahily
?
SQL injection
SQL injection
Phong T?
?
ECO 150 - Aula 08 - Resultados do Projeto
Thiago Ribeiro
?
2014年健策精密公司社会责任报告
2014年健策精密公司社会责任报告
CSRone
?
Ta to - TW - Kol 01
Ta to - TW - Kol 01
Stripovi Klub
?
CAT?LOGO - MARY KAY
Marceliany Farias
?
Relaunch The Product
Relaunch The Product
Samuel Eduard Pranata
?
Curso de arranjo ian guest vol 1
MILTON ALVES
?
Potable Spirits Certified Under EAS 109
Potable Spirits Certified Under EAS 109
The Star Newspaper
?
Continuous Deployment e DevOps na Nuvem
Amazon Web Services LATAM
?
Somaliland – in search for international recognition / Somaliland – auf der S...
GIGA Informationszentrum
?
Four s fortnightly pharma health track 23th january - 5th febuary 2012
Four s fortnightly pharma health track 23th january - 5th febuary 2012
Four-S
?
项目申报流程简版
项目申报流程简版
vimsuner
?
Release.sonhos.24.03.2010
Solange Das Gra?as Seno
?
M9 2 bim_aluno_2014
jeniifers
?
Caso de ?xito: Programa de medicamentos esenciales PROMESE/CAL
AMCHAMDR - Cámara Americana de Comercio
?
Presentation Teknisa
Presentation Teknisa
guestf98a87
?
Mercury Body Burden Correlated with Autism Disorder
Mercury Body Burden Correlated with Autism Disorder
v2zq
?
Challenges of Setting Up Commodity or Derivatives Exchanges in Emerging Markets
Challenges of Setting Up Commodity or Derivatives Exchanges in Emerging Markets
Jeremmy Okonjo
?
SQL injection
SQL injection
Phong T?
?
ECO 150 - Aula 08 - Resultados do Projeto
Thiago Ribeiro
?
2014年健策精密公司社会责任报告
2014年健策精密公司社会责任报告
CSRone
?
CAT?LOGO - MARY KAY
Marceliany Farias
?
Curso de arranjo ian guest vol 1
MILTON ALVES
?
Potable Spirits Certified Under EAS 109
Potable Spirits Certified Under EAS 109
The Star Newspaper
?
Continuous Deployment e DevOps na Nuvem
Amazon Web Services LATAM
?
Ad

Similar to 数据库持续集成 (11)

PostgreSQL Introduction V0.1
PostgreSQL Introduction V0.1
March Liu
?
惭谤&补尘辫;耻别丑数据库方面
惭谤&补尘辫;耻别丑数据库方面
Tianwei Liu
?
Python 数据库技术第三讲
Python 数据库技术第三讲
March Liu
?
Open party(2010 05-15)-蒋鑫-开源软件定制开发中的软件工程
Open party(2010 05-15)-蒋鑫-开源软件定制开发中的软件工程
cleverpig
?
Pl sql developer7.0用户指南
Pl sql developer7.0用户指南
irons_zhou
?
The Evolution of Data Systems
The Evolution of Data Systems
宇 傅
?
Baidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log Analysis
Xiaoming Chen
?
厂颁惭第一讲
厂颁惭第一讲
Xiaomin Xiaomin
?
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
My own sweet home!
?
1到100000000 - 分布式大型网站的架构设计
1到100000000 - 分布式大型网站的架构设计
RolfZhang
?
敏捷模式下的百度研发基础环境建设 1
敏捷模式下的百度研发基础环境建设 1
drewz lin
?
PostgreSQL Introduction V0.1
PostgreSQL Introduction V0.1
March Liu
?
惭谤&补尘辫;耻别丑数据库方面
惭谤&补尘辫;耻别丑数据库方面
Tianwei Liu
?
Python 数据库技术第三讲
Python 数据库技术第三讲
March Liu
?
Open party(2010 05-15)-蒋鑫-开源软件定制开发中的软件工程
Open party(2010 05-15)-蒋鑫-开源软件定制开发中的软件工程
cleverpig
?
Pl sql developer7.0用户指南
Pl sql developer7.0用户指南
irons_zhou
?
The Evolution of Data Systems
The Evolution of Data Systems
宇 傅
?
Baidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log Analysis
Xiaoming Chen
?
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
My own sweet home!
?
1到100000000 - 分布式大型网站的架构设计
1到100000000 - 分布式大型网站的架构设计
RolfZhang
?
敏捷模式下的百度研发基础环境建设 1
敏捷模式下的百度研发基础环境建设 1
drewz lin
?
Ad

数据库持续集成

  • 1. 数据库开发的版本控制和持续集成 Michael Zeng -------------------------------------------------- 成都研发中心 EMail : zengjingtao@91huayi.com
  • 2. You never develop code without version control, why do you develop your database without it? 代码开发流程中必不可少的版本控制机 制,在数据库开发中你用了吗?
  • 3. 我们的位置? 1. 在数据库上手工开发 2. 建模工具,直接更新到数据库 3. 建模工具,生成完整脚本进行版本控制 4. 建模工具,版本控制,持续集成
  • 6. 传统的模式 (part 3) ?优点 ? 脚本统一管理 ? 追溯版本修改历史 ? 半部署自动化 ?不足 × 升级过程繁琐 × 人工干预带来的风险 × 无法持续集成
  • 7. 数据库开发三条原则 1. Never use a shared database server for development work. 不要在共享数据库服务器上进行开发工作,避免开发人员相互覆盖彼此 所做的修改。 2. Always Have a Single, Authoritative Source For Your Schema 仅保留一份权威的Schema生成源,保证每一个人都可以用它轻松地重新 创建一个新的数据库。 3. Always Version Your Database 对数据库进行版本管理。将变化由开发传递到测试,最后到生产环境。 Scott Allen
  • 8. 什么是持续集成 持续集成(Continuous Integration)是一种软件 开发实践,即团队开发成员经常集成它们的工作。 每次集成都通过自动化的构建(包括编译,发布, 自动化测试)来验证,从而尽快地发现集成错误。 Martin Fowler
  • 9. DBCI中的几个概念 Baseline ? 一个或者一组脚本 ? 所有可以从零开始生成数据库的SQL Baseline Change Set ? 修改必须通过脚本文件以”增量更新”实现 Change Log Set ? 增量是相对的 ? 增量有唯一的标识符 Applied Change Log ? 记录Change Set应用的情况 ? 避免重复运行同一个修改
  • 11. 顿叠颁滨中的发布更新 Applied Change Log Update Roll Back
  • 12. 理论 VS 实现 ?商业产物 ? Red Gate ?开源项目 ? Liquibase ? Apache Maven ?自力更生 ? Shell
  • 13. Liquibase是什么 Liquibase is an open source (Apache 2.0 Licensed), database- independent library for tracking, managing and applying database changes. It is built on a simple premise: All database changes are stored in a human readable yet trackable form and checked into source control. ? Database Change Management工具 ? 开源,轻量级 ? 垮平台,数据库类型无关 ? 基于XML配置 ? 仅仅是一个框架工具
  • 14. 脚本目录结构 Baseline Replaceable Object ? 一个或者一组脚本 Non Replaceable ? 从零开始生成 Object Change Set ? 以”增量更新”实现 Optional ? 增量是相对的 ? 增量有唯一的标识符 Applied Change Log ? 记录Change Set应用的情况 ? 避免重复运行同一个修改
  • 15. Install VS Update Fresh Install Daily Update ?从零开始创建一个应用, ?把指定应用更新到当前版 并且更新到当前版本。 本 ?仅可运行一次。 ?可以重复运行
  • 17. Baseline.XML author + id = identifier External SQL File Set current version
  • 18. ChangeSet.XML Check current version Embedded SQL External SQL File XML Element
  • 19. Program.XML run everytime 替换SQL参数或者特殊字符
  • 20. 运行Liquibase ?通过Command Line,Apache Ant, Apache Maven等多种方式 ?Ant调用例子
  • 21. Tips ? XML文件编码建议使用UTF-8 ? 参数替换 ? XML文件中可以使用动态参数(路径,文件名,等) ? SQL脚本中可以使用动态参数(表空间名称,用户名称,等) ? Embedded SQL ? 合理使用splitstatement参数 ? External SQL File ? 使用encoding参数,指明SQL脚本使用的字符编码 ? 末尾包含/等特殊符号,运行前使用<modifySql>进行替换