作者:邵健 杭州银行数据库专家 王辉 PingCAP
杭州银行在 TMS beta 阶段就进行了深度的测试体验,在过程中提供了大量的宝贵建议,帮助 TMS 进行了快速的优化和迭代。近期杭州银行借助 TMS 进行了多次 Oracle 生产数据库的迁移实践,以下内容由杭州银行数据库专家邵健撰写。
导读
平凯数据库(TiDB 企业版) 全链路数据迁移平台 TMS 为企业提供了从 Oracle 到 TiDB 的全流程数据迁移解决方案,包括对象结构迁移、数据全量迁移、数据校验等,大幅降低了迁移风险和成本。
本文介绍了 TMS 的核心功能,及其在 杭州银行的实践应用。通过与杭州银行的共创和打磨,TMS 在功能和操作体验方面得到了迅速的优化,最终成功帮助杭州银行实现了多套业务系统的平稳迁移,验证了其在实际生产环境中的高效可靠性。
分布式、云原生为代表的新技术的出现,为数据库技术实现弯道超车做好了铺垫。 伴随着数据使用场景的多元化,对于海量数据增长迅速、高并发读写、实时分析需求高的业务系统,传统经典商业数据库已经无法支撑,从敏捷开发迭代、技术自主掌控、业务连续性等角度进行评估,金融机构倾向选择国产分布式数据库实现架构的跃迁,从而在基础架构层面开辟自主创新的道路。
中国市场越来越多的企业级用户正在计划或者已经在把 Oracle 上的业务迁移到 TiDB,这个时候迁移方案、迁移步骤、迁移成本以及迁移过程中的风险成关注焦点。平凯星辰基于架构师和专业服务团队在企业级客户中迁移 Oralce 到 TiDB 的项目积累及实践沉淀,自主研发了全链路数据迁移平台(TiDB Migration Service,简称 TMS),从数据库的对象,到 SQL 的兼容分析,到迁移前后 SQL 执行性能的对比,再到存量数据的迁移,提供一套全流程的迁移工具和解决方案,帮助企业用户最大化降低迁移风险和成本。
TMS(TiDB Migration Service) 是平凯数据库( TiDB 企业版)提供的全链路数据迁移平台,适用于从 Oracle 数据库迁移到 TiDB 的场景。TMS 主要包括应用对象兼容性评估、对象结构迁移、数据全量迁移、数据校验、应用 SQL 兼容性评估等核心模块,帮助企业用户低风险、低成本、高效率地完成从 Oracle 到 TiDB 的迁移。
TMS Web 控制台 :TMS 以 Web 控制台方式与用户交互,平台展示、功能服务管理、规则管理、任务参数、任务模板等都可以在 Web 端配置和启停,可查看日志/进度、查看运行结果、修复异常等。
TMS 功能架构 :TMS 的功能架构如下图所示,除了可视化控制台,还包括任务管理和迁移通道两层功能模块,用于解决数据库迁移中的任务管理需求和技术实现。
TMS 核心能力
多通道多任务管理 :TMS 设计目标是提供多种类型异构数据库的同时迁移,每个迁移项目内部支持并发多个任务,每个任务均支持按需配置,尽可能减少用户的二次开发工作,具备灵活的扩展能力,用户可根据实际情况勾选配置,创建迁移项目。
对象迁移服务 :将源端数据库 (Oracle/MySQL) 中表类型、字段类型、缺省值、索引、主键等对象通过使用 TMS 配置源数据库与目标数据库的对象及语法映射规则、字段类型映射关系、字段缺省值映射关系、跨不同 schema 映射等自动转为 TiDB 的 DDL 语法,输出 DDL 脚本或者通过 TMS 批量自动在目标端 (TiDB) 端建立对应的表和对象等。
数据迁移服务 :将源端数据库 (Oracle/MySQL) 中的数据迁移到 TiDB 中,迁移过程全程具备进度跟踪能力、断点继续、跨字符集、按需迁移部分数据、跨不同 schema 映射等能力。由于增量迁移技术门槛较高,当前版本支持静态全量迁移,从 (Oracle/MySQL) 到 TiDB 的增量迁移计划与第三方厂商合作完成。数据迁移根据数据量的大小和实际用户提供的服务器数量支持普通版和集群版两个版本,集群版基于分布式框架,以集群方式运行,可以调度和管理集群中所有服务器并发完成数据迁移的工作。
普通版本适用于百 G 级别数据量和硬件配置不高场景的数据迁移,集群版适用于 T 级别的数据量和硬件配置较高场景的数据迁移。
数据校验服务:高效地对比源端数据库 (Oracle/MySQL) 和 TiDB 目标端,两端每行的数据是否一致,在实际使用场景中,该任务模块的对比结论直接影响项目进度关键节点的决策,不仅要求性能高,而且结果要准确。因此,TMS 功能设计上同时支持以行方式数据对比和按业务逻辑方式对比两种方式,用户可以根据实际情况选择。
对象兼容性服务 :对于 Oracle/MySQL 迁移到 TiDB 的项目,在项目前期,通过 TMS 对源数据库进行对象兼容性评估,识别出支持与不支持的对象类型及个数、Oracle/MySQL 与 TiDB 的产品功能差异等,输出形式为 HTML 网页格式,以此为基础来辅助应用开发评估 Oracle/MySQL 数据库迁移到 TiDB 的对象兼容性、改造工作量、系统复杂程度、TiDB 适配难度等,为项目可行性评估、项目立项、项目成本评估等决策提供参考依据。
SQL 兼容性服务 :对于 Oracle/MySQL 迁移到 TiDB 的项目,通过 TMS 获取应用程序侧在 Oracle 生产环境实际执行过的应用 SQL 语句(包括 SQL 文本、BIND 变量值、执行计划、平均耗时等),并将这些 SQL 文本在 TiDB 测试环境回放,评估数据库对象迁移的完整性、业务 SQL 语法兼容性、执行计划性能等。
○ 识别出在 TiDB 执行不兼容的 SQL 语句列表,并区分环境问题或是语法兼容性问题。
○ 识别在 TiDB 执行成功的 SQL 语句,并分析执行效率相关的指标。
TMS 诞生于 Oracle/MySQL 等经典数据库向 TiDB 迁移的场景实践,从 TiDB 技术服务团队自用的迁移工具,到经过头部银行等几十个 TiDB 企业级用户的场景打磨,在功能演进过程中得到了众多用户在生产环境的深入反馈,TMS 是 TiDB 技术团队和用户共创的成果,成为企业用户从经典数据库向 TiDB 升级的必备工具。作为平凯数据库( TiDB 企业版)的重要模块,TMS 将持续进行功能优化,帮助企业用户更快、更稳地实现数据架构的跃迁。
在当前国产化数据库替换背景下,杭州银行很多系统开始尝试使用国产数据库是大势所趋,用好国产数据库的前提是可以高效且准确地把上游异构数据库平滑地迁移到下游国产数据库。随着杭州银行对 TiDB 数据库应用的逐步加深,如何将异构数据库的数据和对象高效、准确地迁移至 TiDB 集群,已经成为行内重点关注的课题。异构环境的数据库迁移缺少成熟的工具体系,迁移复杂度较高。
TMS 产生第一个 beta 版本后,杭州银行成为 TMS 最早的试用用户,启动了相关测试验证工作。在使用初期遇到一些问题,如字符集转换、运维操作便捷性等方面, 反馈给 TMS 研发团队后,这些功能都实现了快速的迭代。在测试过程中,TMS 研发团队也始终跟杭州银行技术团队保持着密切的沟通互动,多次到现场进行调研分析,问题反馈评审最密集的时候 TMS 一周迭代两到三个版本,而且每个版本在功能和操作体验方面都得到了改善。
杭州银行对 TMS 数据迁移的主要功能模块都进行了深度的测试。对象兼容性评估可以从整体评估源端对象到 TiDB 的兼容性,从而得出改造的工作量、复杂度、兼容度、以及可行性风险。SQL 兼容性评估可以回放从源库捕获的 SQL 进行性能和兼容性评估。对象迁移根据源与目标对象之间的对象类型映射关系进行对象、表结构、索引等的迁移,迁移过程中可以按需自定义不同字段类型的映射关系。全量数据迁移提供静态全量数据迁移,后续还支持增量数据迁移,CSV 格式的导入、自定义源端和目标端字符集、源端与目标端重命名迁移等新功能,整个迁移过程具备可观测性,支持人为介入和断点续传。数据比对功能可以对源端和目标端进行数据比对,对于不一致数据会提供手动和自动修复的能力。
2023 年 7 月初,TMS 相对比较完善,试用过程中已经没有明显的功能性问题,杭州银行开始使用 TMS 承担一般业务系统的 Oracle 到 TiDB 的迁移割接。目前,杭州银行已经借助 TMS 在 8 套业务系统中完成了从 Oracle 到 TiDB 的迁移,近期外围系统的一次迁移涉及 300 多张表,约 50GB 数据量,且目标的 TiDB 库是在线业务库。鉴于目标的 TiDB 库在线承载了生产业务,DBA 设置了较低的并发确保迁移不影响目标库的在线业务,约 1 小时完成迁移工作,整个迁移过程 TiDB 集群原有的生产业务运行平稳,没有产生性能抖动。
我们在实践中总结了几个 TMS 的使用技巧,希望可以帮助更多的同行用好 TMS。在通过创建的时候,TMS 支持 schema 名称映射。在数据迁移的时候,选择迁移对象支持 CSV 导入,迁移对象支持引用不同任务的迁移对象,可以快速配置相似任务。需要注意源端和目标端的字符集配置,避免乱码。在迁移过程中的数据比对,支持加 where 条件过滤上游数据,可以有选择性的进行数据迁移处理。
使用 TMS 将 Oracle 迁移到 TiDB 替代了原先手工加多种工具组合的迁移方式,整个迁移过程实现了白屏化,大幅度降低了使用门槛,提升了迁移效率,保障了迁移的可靠性。感谢 TMS 研发团队,他们能够深入客户现场调研用户需求和关注使用体验,对产品进行快速迭代,短短的几个月时间,从 0 到 1 完成了 TMS 的研发和打磨,大幅度提升了数据迁移效率和可靠性。在此,我们也对 TMS 后续的迭代提几个建议:第一,希望提供持续增量复制迁移能力;第二,从风险角度考虑,提供系统回退迁移的能力;第三,不断完善支持更多的异构数据库,例如 DB2 等。