生产数据库升级是一个比较痛苦的工作。要升级到新的结构,还要保证原有的数据不受影响。
1)准备一个和生产数据库同一版本的模板数据库。如果可以直接拿到生产数据库的备份最好。如果不行,就自己产生一些模拟数据,最重要的是保证各种特征的数据都有,尽量保证所有的表都有数据。备份一份准备好的模板数据库,留待以后的测试。
2)安装新的软件,生成新的数据库。
3)利用工具比较两个数据库的schema,生成升级的脚本。这样工作手工做可能是非常恐怖的事。
4)分析和验证工具生成的升级脚本。主要工作是看看在字段发生改变的表里,数据的转换是否正确,增加字段的表里,添加的默认值是否合适。然后,逐段运行脚本,检查脚本运行是否能够通过,同时,转换是否正确。一定不要什么都不管,从头到尾运行。注意,经常存盘和备份,保证不丢失修改。
5)用一个干净的模板数据库,重新运行完整的脚本。用schem比较工具查看是否所有的修改都做好了。
6)如果没问题,使用数据库的数据比较工具,比较数据。主要两个工作,所有的配置数据和系统预置数据是否一致。已有的生产数据有没有被破坏。选择需要升级的部分数据,生成升级脚本。
7)利用升级脚本逐段测试,验证。
8)一次运行整个脚本,进行测试,验证。
9)重新用一个新的模板库,进行两个脚本的验证。
10)如果没有问题了,进行全面的功能测试。发现问题的时候,修改脚本重新测试。
一定要注意的问题:
1)数据库中的所有constraint一定要有名称。没有名称,数据安装的时候会自动生成一个带随机数ID的名字,只会造成每个机器的升级脚本都不一致。没有办法做标准的升级脚本。
2)如果使用SQL server,Redgate SQL toolbelt是一个很好用的比较工具。
3)把脚本分成schema升级和数据升级,会节约和多时间,提高脚本的可维护性。
4)一定要保证真正读懂了数据升级脚本。