异构数据库迁移埋下的 9 个大坑,你怎么还不会躲开?( 三 )

四、特殊字符处理
对于数据库异构同步而言 , 特殊的字符 , 诸如单引号、双引号、换行、斜杠、反斜杠等等也是一个困扰项 , 这一点在数据全量同步阶段尤其明显 。
对于文本方式的全量数据同步来说 , 我们可以考虑下述几种方式:

  • 使用CSV格式;
  • 使用多字节分隔符;
  • 进行数据清洗;
  • 仅同步“正常”数据 , “特殊”数据另行处理 。
这些内容要说透 , 需要另外写一篇文章了 。
五、异常记录处理
这里的异常记录 , 指的是那种本身就违反数据库规范 , 不应该插入到数据库中的记录 。
以Oracle DB为例 , 笔者遇到的记录有异常日期格式以及异常数值两类 。
  • 异常日期格式 , 典型例子有"0000-00-00 00:00:00"和"2022-02-30 00:00:00" 。 笔者在好几个客户环境都遇过这种数据 , 以至于笔者觉得这很“常见” , 需要加到测试项目里面 。 笔者这段时间做的Oracle到ADB同步项目确实遇到这种数据了 , 后者还造成dts的增量同步中断 , 风险很高 。 所幸笔者的dts源端库是基于OGG的目标库部署的 , Oracle自己的OGG工具也不能同步这种数据 , 这间接地挡了这部分异常的增量数据 。 在此基础上 , 笔者只需要修复已有的异常数据即可 , 修复方法也很简单 , 先+1再-1能修复大部分数据 , 至于不能修复的只能和业务协商重置一个值了 。
  • 异常数值类型 , 典型例子为NaN(即Not a Number) , 笔者仅在一个客户环境中遇到 , 当时的场景为O2O同步, 比较可怕的是连基本“来者不拒”的数据泵都无法同步这种数据 。 考虑到这个环境没遇过这种数据 , 笔者这次偷懒了 , 没做相应的测试 。
六、全量同步测试
通常情况下 , 各种数据同步软件都会自带全量数据同步的功能 , 至于这个功能的效率、资源消耗、空间占用等项目需要进行评估 。 如果其不能满足需求 , 则可能需要考虑替代的手段 。
在选取测试表的时候 , 笔者考虑综合下面几个因素选择几个测试表:
  • 需要包括大表 , 大表往往是个瓶颈项;
  • 需要囊括本次同步涉及表的字段类型;
  • 如果环境中存在中文等多字节数据 , 则建议包含这种表;
  • 建议找静态的表或者准静态进行测试 , 以方便核对数据一致性 。
七、增量同步测试
作为数据同步项目 , 同步效率是一个重要因素 , 笔者建议在搭建完整的同步链路之前 , 拿数据变更频繁的关键表进行测试 , 通过单表单进程的方式 , 剔除潜在的配置不当风险 。
对于这方面 , 笔者建议如下:
  • 尽量使用真实的数据;
【异构数据库迁移埋下的 9 个大坑,你怎么还不会躲开?】笔者这次测试通过Ogg同步增量数据 , 比较切合生产实际变更情况 , 这种方式可以参考 。
  • 增量同步发起后 , 在目标数据库后台观察对应的SQL语句 。 以笔者本次项目为例 , 这个阶段发现了两个问题:
  • 由于大小写敏感问题 , dts目标侧未成功识别出主键 , 导致所有字段被加到where条件 , 影响效率 , 此问题后来通过修改同步配置解决 。
  • 笔者观察到dts侧虽然设置了高并发度 , 但实际运行中 , 仅个别进程工作 , 其余处于空闲状态 , 无法充分利用资源 。 此问题后来通过修改配置参数解决 。
八、数据一致性测试
数据一致性又是一个可以另外写一篇文章的话题 , 对此 , 笔者建议如下:
  • 对比静态或者准静态的数据 。 很显然 , 笔者这次使用的ogg中间库方案很切合这个主题 , 如果没这个 , 笔者只能通过停止同步进程后反查其停在哪个点 , 再用这个时间点做检验了 。 这个想法理论上可行 , 然而以笔者对dts的浅薄理解 , 这条路并不通 , 原因在于dts所停的时间点并不完全准确 。

    特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。