前言
开发过程中的版本号控制非经常见,但在数据库的世界来说。版本号控制就是二等甚至三等公民了。当多人同一时候开发一个数据库管理和应用系统时,採用合理的方法监控数据库中表、存储过程和视图等对象的变动是非常重要的。每次更改数据库。都须要做具体的记录,稍不留神就出问题。我任职过的几家公司在开发流程中的版本号控制做的非常到位,但数据库方面却是一片空白。在开发过程中,经常会涉及到表上添加列、改动列、改动存储过程和视图,发生变化后,之前的数据库对象定义就丢失了,给开发带来非常多的麻烦。以下说说我解决没有数据库版本号控制机制所引起的麻烦的思路。
备份数据库
解决这个麻烦我们最開始的思路就是备份数据库,每隔几天备份一次数据库,当须要找历史数据库对象时将备份库还原到測试机上再把相应的存储过程或者表定义找出来。
这样的方式使用过程中就发现非常多问题。首先每次须要查看历史记录的时候去还原备份非常麻烦,其次随着开发的进行,非常难记得清是谁在什么时间改了什么数据库对象,必须把一段时间内的备份都还原了再进行查找。这个过程不仅让人非常恼火,也非常浪费时间精力,假设备份间隔过长,期间变更的对象定义就无法找回了。
导出数据库对象
后来的解决思路就是每次改动数据库对象的时候将数据库对象的定义以.sql的方式存入SVN,这样的方式非常麻烦。
非常多时候开发者偷懒忘记签入SVN了,则会引起非常大问题。新添加团队的人也非常难看清版本号改动的来龙去脉。
此外。这样的方式非常不直观。假设希望看到一个数据库对象的历史版本号记录,则还要去SVN中查找。显示也非常不直观
另一个问题是团队中的开发DBA非常不习惯使用SVN。
将版本号记录存入数据库
这样的方式是我在网上看到过的。是在数据库中通过触发器对于数据库的变更操作进行记录。作为开发出身的人来说。对这样的方式就不是非常喜欢。
况且去历史表中找版本号改动记录本来就是一件费时费力的事。
使用第三方工具
如今一些第三方公司已经开发了针对数据库的版本号控制工具。我们之前以前尝试过RedGate的SQLSource Control(http://www.red-gate.com/products/sql-development/sql-source-control/),SQLSource Control的原理是基于SVN,使用起来不是非常符合团队的使用习惯,易用性不够,在团队推广的培训成本也比較高。
近期团队在使用的另一个工具是一个非常易用的中文版数据库版本号控制软件。叫做SourceSafe for SQL Server(http://www.grqsh.com/products.htm?tab=sourcesafe-for-sql-server), Source Safe for SQL Server的原理是将变更记录存入版本号库,定期能够将数据库定义的脚本导入SVN,数据库版本号的历史记录能够像在SVN中那样查看,团队推广的培训成本也比較低。帮助我们攻克了非常多团队中的问题。
后记
数据库版本号化看似是个可有可无的过程,但做好了,能够降低开发和实施甚至是生产环境中的非常多麻烦,我们的系统就是个活生生的样例。本文所阐述的方法是来自之前团队的经验。开发团队的发展都会经历从幼稚到成熟。借鉴成熟工具的经验和方法,促进了解并解决这一问题可以减少,以提高生产效率损失。
版权声明:本文博客原创文章,博客,未经同意,不得转载。