
责编 | 韩楠
约 2355 字 | 5 分钟阅读
你好,今天我将分享一些Oracle数据库数据迁移相关的经验。
对于数据库日常维护,在数据库跨版本升级、异构数据库数据迁移、数据同步等大型项目中,数据迁移是其工作中必不可少的一环。
而且,单纯的数据迁移在数据库日常维护中也非常普遍。
本文基于Oracle数据库的数据迁移,结合个人项目中遇到的一些问题,或者注意事项进行阐述,希望对你有所帮助。
01 ⎪ 数据库跨版本升级
某金融客户的灾备中心建设项目中 ,有三套业务系统的Oracle数据库,涉及到生产端的改造:从惠普小型机下迁到LINUX,从HA或单实例架构调整到oracle rac,并且版本从11.2.0.4升级到19c。
这三套数据库的改造升级,得考虑三点:
• 首先,考虑停机维护窗口(19:00到次日凌晨2:00);
• 其次,考虑数据库的大小(均在400G以下);
• 再次,考虑源生产端主机文件系统空间(数据库压缩备份与非压缩备份占用空间不同,备份与恢复所用时间也不同)。
综合三点考虑因素,结合客户升级实际需求跨版本、跨平台,因此选择oracle的数据泵进行改造升级。客户关心的永远是:形成的改造升级方案,是否能在有限时间内完成、改造升级之后应用业务是否完全兼容、新数据库系统是否能承受业务负载压力。
因此,正式改造升级前的演练必不可少,根据改造升级演练初步方案实施:
1. 记录改造升级过程中的每一步耗时;
2. 各项资源使用情况;
3. 区分哪些事项可以事先做;
4. 数据迁移后的数据校验及善后。
三套数据库改造升级的实际实施中,需要格外注意无效对象的处理,并不能简单地以数据泵按全库或者按方案方式备份,并恢复到目标环境中;需要源数据库数据备份前查看并记录无效对象详细信息,目标数据库数据恢复前与数据恢复后查看,并记录无效对象详细信息。

个人发现,oracle 19c根据安装组件选择的不同,安装完成的新实例中会有一些原始的无效对象,这些无效对象,需要与客户数据库改造升级中 源生产业务库的无效对象区别开。
并且,需要了解源生产业务库中哪些无效对象必须处理、哪些无效对象可以忽略。
02 ⎪ 异构数据库数据迁移
某汽车制造业的OA系统升级改造项目中, 要求将业务系统数据库从oracle 11.2.0.4迁移到mysql 8.0.x,迁移工具使用的国产迁移工具;源端业务库mysql的大小为400G,停机维护窗口为周末两天时间。
客户关心的问题依然是:数据迁移能否如期完成,迁移过程中遇到的问题能否有效把控。

因此,针对该项目数据迁移前后做了两轮测试演练,包括正式数据迁移实施,暴露出比较多的问题,有些是流程问题,有些是迁移工具问题、也有数据库自身约束问题。
首先,项目实施过程中的流程问题 ,数据迁移两次演练,包括正式迁移时的mysql版本均不相同,为项目实施问题排查埋下隐患。
其次,迁移工具问题 ,迁移数据转换过时,迁移工具将oracle的varchar2 2000转换为mysql的varchar 4000,如果单张表有多个字段长度累加长度超过65535,将导致mysql建表失败。
再者,mysql数据库的自身约束问题, 数据迁移测试演练中,如果单表单字段长度超过1024并且该字段上有索引,那么mysql将无法在该字段上创建索引。

另外,在该项目迁移过程中,通过迁移测试演练发现一张日志大表超过180G并且数据迁移很慢,后期的正式迁移前,将该表数据清空大大压缩了数据迁移的耗时。
03 ⎪ 数据同步
某通讯客户业务数据库改造升级项目中 ,涉及一套oracle 11.2.0.4数据库升级到oracle 19c,操作系统版本从rhel6升级到rhel7,数据库数据量几十T,停机维护窗口数据库侧2小时内完成。
基于客户业务系统数据库的实际情况与升级要求,只能选择oracle的ogg数据同步工具开展工作。
由于项目从启动到交付只有20天时间,没有充足的时间进行测试,实际项目实施中目标端单次数据库初始化就将近4天时间,并且项目实施过程中有比较棘手的问题,整个项目的实施也是惊心动魄。

首先,该项目实施过程中面临的第一个问题,ogg源端数据库抽取进程很慢,导致抽取延迟不断增加。
为了排查问题定位引起抽取进程慢的根因,项目实施中采取的策略是将抽取进程从1个进程拆分成4个,从而定位到引起抽取慢的具体表(表中含特殊数据类型的字段)。
其次,解决完源端抽取慢问题后,又面临目标端应用进程同步数据缓慢问题,项目实施中采取的策略依然是进程拆分,定位数据同步报错或者十分缓慢的表(从同步进程中剔除,争取客户同意后,在业务割接窗口采取数据泵方式迁移)。
再次,ogg目标端应用进程同步慢问题。有些通过进程拆分可以有效处理,有些则是通过oracle官方mos查询后调整同步进程的部分参数解决的。由此可知,数据迁移中化整为零的策略,能够帮助要求紧急的项目稳步推进。
针对Oracle数据库数据迁移,项目实际实施之前,总有不可预知的问题。 那么, 怎样尽可能多地发现并有效处理未知问题?

都说“实践是检验真理的唯一标准”,测试演练最能预先探测术迁移项目中可能遇到的问题,比如: 应用业务的兼容性、应用业务的连接问题、数据库服务器文件系统容量问题、目标环境数据库表空间的容量问题、异构数据库之间的约束问题、数据迁移工具效率及优化等等。

尤 其是Oracle数据库迁移项目,项目应预留一定的测试演练时间,在测试演练的基础之上,将项目实施中可能出现的问题实际探测出来,并针对性地做有效的处理方法,从而有效地保证数据迁移项目顺利成功实施。
04 ⎪ 结语
关于Oracle数据迁移,结合个人经验需要考虑:异构、跨平台、跨版本,数据库的数据量、特殊对象、无效对象,结合数据迁移项目的总体时间要求,以及停机维护窗口,选择合理的数据迁移工具,再辅以必要的测试演练,保证迁移项目顺利成功完成。
那么,关于Oracle数据库数据迁移,您有什么想说的吗?欢迎评论区里进一步讨论交流。我们下期分享见。