改造总是要付出很多代价的,肯定会跌很多坑,这是必然的... 性能问题也总会呈现先下降后再上升的一个历程(调试、磨合、找到针对性、适应性解决方案)。
改革者犹如惊涛骇浪中的弄潮儿,风险与机遇并存,成就与磨难并行,勇者,大胆前行吧!
A. SIT环境改造测试
1、 应用开发组:梳理出目前APP对Oracle生产中真实使用到的所有表、存储过程、函数、触发器、Schedule、Program、Job,整理出以上对象的清单(生产环境经年积累,随APP不断迭代,很多对象已为僵尸对象,此部分就无需再耗费人力迁移了)。
2、 表结构迁移:按照Mysql语法规则将Oracle中的元数据(建表语句)整理成Sql脚本。
3、 Mysql环境搭建:新布署一套Mysql MGR集群(多主模式) + 改造后的建表脚本布署在SIT环境进行功能测试(模拟生产数据)。
4、 代码改造:应用开发组对原有Oracle存储过程、函数、触发器、Schedule、Program、Job 按照Mysql 语法规则进行改造(对原有的业务规则进行梳理、解耦合、拆分,对mysql不支持的语法结构、不合理、不够优化的代码进行改写、重构),并布署在SIT环境上。
五、对象迁移:在SIT环境布署一套与现有生产Oracle库一样的数据库,并将所用APP真实使用到的表(模拟生产数据)、存储过程、函数、触发器、Schedule、Program、Job迁移过来。
六、数据迁移:在Oracle 和 Mysql上布署Ogg或ETL工具对所有使用到的表数据进行在线迁移(完成异构平台数据迁移,先全量、再增量;OGG需要数据库Source端开启归档模式及增加辅助补充日志、强制记录日志等来保障OGG可抓取到完整的日志信息)。
七、功能测试:严格进行各项功能测试,确保所有功能正常。
备注:SIT为系统集成测试,由公司内部测试组人员进行。评估产品在规格范围内的环境下工作,能否完成产品设计规格所需要的功能及与周边设备、应用软件的兼容性。大致可以分为硬、软件兼容性测试。
B. UAT环境改造测试(越贴近实际应用越好)
1、 准生产基础环境搭建:建立一套完整的真正意义上的UAT环境(User Acceptance Test)将新的准生产应用 + Mysql MGR集群(多主模式) 布署。
2、 表结构迁移:将SIT环境改造测试通过的建表脚本布署上UAT库(数据和生产完全一致,数据量等比减少)。
三、将SIT环境改写调试通过的存储过程、函数、触发器、Schedule、Program、Job 布署到UAT环境mysql库上(若项目组改造采用计算与数据库分离方式此步可省略,调整为布署新的应用程序上生产环境)。
四、对象迁移:在UAT环境布署一套与现有生产Oracle库一样的数据库,并将生产所用到的表(数据量等比减少)、存储过程、函数、触发器、Schedule、Program、Job迁移过来。
五、数据迁移:在Oracle 和 Mysql上布署Ogg或ETL工具对所有使用到的表数据进行在线迁移(完成异构平台数据迁移,先全量、再增量;OGG需要数据库Source端开启归档模式及增加辅助补充日志、强制记录日志等来保障OGG可抓取到完整的日志信息)。
六、功能测试:严格进行各项功能测试,确保所有功能正常。
七、压力测试:严格进行压力测试,确保所有功能在高并发环境下运转正常,能满足正常生产的业务需要。
备注:UAT为终端用户集成测试,无限逼近真实生产环境,要求用户参与进测试流程,并得到用户对软件的认可,鼓励用户自己进行测试设计和进行破坏性测试,充分暴露系统的设计和功能问题。通过UAT环境测试后的系统应拦截住99%的潜在隐患,将新应用上生产的故障率降低、控制到1%以内。
C. 生产环境改造:
1、 参照UAT环境在生产环境新搭建一套Mysql MGR集群(多主模式) 。
2、 将UAT环境理改写调试好的建表脚本布署到生产环境mysql库上。
3、 将UAT环境理改写调试好的存储过程、函数、触发器、Schedule、Program、Job 布署到生产环境mysql库上(若项目组改造采用计算与数据库分离方式此步可省略,则调整为布署新的应用程序上生产环境)。
四、在Oracle 和 Mysql上布署Ogg或ETL工具对所有使用到的表数据进行在线迁移(完成异构平台数据迁移,先全量、再增量)。
五、若选用ETL工具(确保所有表具备增量字段)需要对于最后的少部分增量数据在某个业务空闲时间段发布停机维护时间,将旧应用停止写入旧库,通过ETL手动促发最后一次增量数据捕捉并投递到新库。
六、校对程序核对新、旧两库生产数据所有生产数据是否一致。一致后将新应用程序指向新库。
7、 启动应用程序,恢复生产。
备注:若生产环境没有停机维护窗口,前期只能通过应用双写模式,让Oracle与Mysql库并行运行,确保两边数据一致、功能平稳运行一段时间后再切断指向Oracle的连接。
本手稿仅为一篇概略性指导大纲,给茫茫黑夜中有类似迁移需求的小伙伴们提供友情参考,实施前还需根据自身不同项目环境做进一步细化、补充、修正,以形成适合自己环境的具体实施文档。
祝各位小伙伴都能迁移顺利!