网站大量收购闲置独家精品文档,联系QQ:2885784924

CI中数据库版本控制Dbdeploy原理介绍及使用分享.docx

CI中数据库版本控制Dbdeploy原理介绍及使用分享.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CI中数据库版本控制Dbdeploy原理介绍及使用分享

CI中数据库版本控制——DbDeploy原理介绍及使用分享目前系统多人开发模式下,由于新需求的加入,数据库表结构变更比较频繁,而一个人对数据库的操作如果未及时同步将会影响到其他人的开发及测试人员的测试,更严重的是导致线上应用程序发生异常甚至出现漏洞,因此急需一个比较好的工具和最佳实践来做数据库版本控制。为项目组内每个成员建立数据库沙盒环境,利用DbDeploy可以很好的解决这样的问题,将sql脚本作为源码一起做版本控制,利用命令自动运行sql脚本,减少敏捷开发中持续集成的成本。如图:1. 简介dbDeploy是thoughtworks公司开发的开源数据库版本控制工具,控制数据库变更,并且在项目开发过程中,不断验证数据库脚本的正确性,在项目部署之初,可以方便的部署数据库。它的主要原理是通过逐步建立建表语句(表现为多个文件,如001_create_table.sql,002_insert_data.sql,003_insert_data.sql),通过数据库表里的记录记录当前已经包含的建表语句,在再次更新数据库脚本时递增的更新,从而保证持续集成的正确性。dbdeploy支持ant、maven和命令行接口;支持mysql,hsql,SQL_Server,oracle等数据库。官网:/Google网址:/p/dbdeploy/其他类似的数据库版本控制工具:MIGRATEdb, Ruby ActiveRecoredMigration, DB Ghost, sundog等。2. 基本原理及规则2.1 基本原理查看changelog中已经存在的脚本编号,并生成需要执行的所有脚本编号;批量执行尚未执行的脚本,更新changelog表;在整个执行过程中,如果有指定outputfile,则将已经执行的sql脚本输出到outputfile中,否则默认改变数据库,不输出已经执行的sql脚本;2.2 规则及约定在数据库中建名为’changelog’的表,用于控制数据库变更;2.0版本表结构如下:DROP TABLE IF EXISTS `changelog `;CREATE TABLE changelog ( change_numberbigint(20) NOT NULL, delta_setvarchar(10) NULL, start_dt timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, complete_dt timestamp NULL default NULL, applied_byvarchar(100) NOT NULL, descriptionvarchar(500) NOT NULL,PRIMARY KEY (`change_number`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;3.0之后changelog表结构变更为CREATE TABLE changelog (change_number INTEGER NOT NULL,complete_dt TIMESTAMP NOT NULL,applied_by VARCHAR(100) NOT NULL,description VARCHAR(500) NOT NULL,PRIMARY KEY (`change_number`));用于指明数据库变更的sql脚本--约定规则①数据库变更的脚本应尽量保证原子性;也就是一个脚本中应尽量仅包含一条不可拆分的DDL(CREATE,ALTER etc)命令(避免出错时处理比较复杂,需要回滚之前很多步骤);当然对于DML语言(UPDATE,INSERT etc)可多包含多条,因为它们都是以事务的方式运行。②必须保证每次对数据库的修改都保存为sql脚本;③sql脚本的命名规范,必须是以数字开头以指明此sql脚本在所有脚本中的执行顺序;如001_create_table.sql,002_insert_data.sql,003_insert_data.sql;注意:sql脚本的命名要尽量能表达此脚本执行内容的含义,例如:004_add_index_on_custId_column_of_table_cust_index.sql.④可以在sql脚本中加入回滚部分,出错时自动执行回滚语句;如001_create_table.sqlCREATE TABLE FOO (FOO_ID INTEGER NOT NULL,FOO_VALUE VARCHAR(30));ALTER TABLE FOO ADD CONSTRAINT PK_FOO PRIMARY KEY (FOO_ID);--//@UNDODROP TABLE FOO;⑤

文档评论(0)

shenlan118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档