最近由于公司走了一个负责数据库方面的人,一些有关数据库的任务没人做了,leader就找到了我。这次的任务是负责新版本的数据库升级脚本,难点是我对数据表结构不是很熟悉,而且新版本的功能也不是有我来负责的,还有就是数据表结构变化比较大,要保证用户原本数据不能丢失。200多张表里面还是有数据的,如果人工做的话不死人才怪。于是查找工具,先从自己熟悉的powerdesigner开始,先用反向工程分别生成新老两个数据库的模型,然后点击 菜单中database->modify database,再按照步骤做,没啥难度。完工后生成了一个很长很长的sql, 由于是机器生成,看起来超麻烦,所以一狠心,直接拿了备份升级下试试看。执行好后,报出一堆错,看看表是改了,但数据都丢失了,也不确定是不是所以的表都升级了。唉,这对于表变化比较大或原有数据比较多的情况根本行不通。
注意图中的 Use alter statements when possible选项,说的太模棱两可。我试了下,大多数只要表变化一复杂,他就开始偷懒不用alter来搞表,直接create然后把原表的数据导入。先不说效率,万一丢失了数据可不好。
如果你的表和数据都变化比较少,那PD也算个好方法,毕竟方便,高效。如果不是,下面介绍个好工具SQL Delta,这个用来对比数据库的确好用。
进入系统,设置好要升级后的数据库和升级前的数据库,然后点compare databases来比较表结构
大家可以发现字段变化看的很清楚,有多的有少的,也有改变类型的。一般建议升级时多余的字段不要删除,只增加和修改。
大家可以在右边看到工具建议的升级脚本,由于是一个表一个表查看,这样虽然工作量大了,但比较放心,而且脚本可读性较好。
这里也要注意对于表变化比较大的情况,这工具还是采用以下方法(先建立临时表,导入原表数据,然后删除原表,临时表更名成原表的名字)
接下来比较表内的数据,按菜单栏中的data 然后点击wizard
选中所要比较数据的表,一般是些配置用表,用户的数据不要丢失就行。
大家可以观察A,B来知道数据的变化,想在升级脚本中体现的话,就选中不想生效的就去掉勾。最后点击Sync进入后save一把,脚本就生成出来了。这个数据库升级的DDL和DML都有了,主要生成好还是要多测试下,毕竟升级有风险,升级前请做好充足的备份。