本文中的 OceanBase 指 OceanBase Oracle 模式租户。NineData 当前支持 Oracle 源端版本为 23ai、21c、19c、18c、12c 或 11g;目标端 OceanBase Oracle 模式,当前版本已适配 OceanBase V4.0。实际支持的数据库版本、对象类型和数据类型,以 NineData 持续更新的官方文档及任务预检查结果为准。
Oracle 到 OceanBase 的迁移通常用于:
OceanBase 提供 Oracle 模式,可以兼容部分 Oracle 使用习惯和 SQL 语法。但兼容模式不等于两个数据库完全等价。迁移时还是需要重点评估表结构、数据类型、索引、分区、序列、视图、触发器、存储过程、Package、Job 以及应用 SQL。
如果只做一次性导出导入,源库在迁移期间产生的新数据、更新和删除无法自动进入目标库。因此,生产迁移一般采用:
NineData 数据复制支持通过复制任务组织 Oracle 到 OceanBase Oracle 模式的迁移流程,主要包括:
NineData 支持全对象类型的 DML 和 DDL 增量数据复制。这代表NineData 具备捕获和处理增量 DML、DDL 变更的产品能力。
需要区分的是:
迁移团队仍需要负责对象兼容性评估、应用 SQL 改造和最终割接决策。
创建目标数据源时,应确认使用的是 OceanBase Oracle 模式租户,而不是 MySQL 模式租户。
需要记录:
Oracle 到 OceanBase MySQL 模式和 Oracle 模式的迁移方法不同,不能混用对象映射和数据类型规则。
增量复制需要读取 Oracle 事务日志。实施前应完成源端检查,包括:
日志保留时间需要覆盖:
如果任务需要读取的归档日志已经被清理,增量任务可能无法从原位置继续。
NineData 要求,同步对象中的每张表应具有主键或唯一约束。
主键或唯一约束用于:
因此,迁移前必须生成无主键、无唯一约束表清单。
对于无主键表,应采取以下方式之一:
确认:
实际权限按照迁移的实际需求授予,不建议直接授予不必要的全局高权限。
Oracle 到 OceanBase 的对象转换不能只看表和字段,还要建立完整的对象清单。NineData 预检查会根据当前复制链路、所选对象和任务配置检查部分连接、权限、对象及兼容性问题。预检查未通过的项目必须处理;标记为“警告”的项目需要结合实际业务进行人工确认。
表、字段和索引
重点关注:字段类型、字段长度、数值精度、默认值、NULL 属性、字符长度语义、索引字段顺序、分区键和分区策略。NineData 预检查会识别数据类型不兼容的字段,但字段语义是否等价仍需人工确认。
物化视图
Oracle 和 OceanBase 链路条件下,NineData 复制任务暂时不支持物化视图的复制、创建或持续维护。物化视图需要单独处理:OceanBase Oracle 模式虽然支持物化视图,但刷新方式和查询语句存在兼容限制。源端物化视图应在目标端人工重建或改造。
序列
迁移时需要记录序列当前值、步长和缓存配置。正式切换前应确认 OceanBase 中的序列值不会小于业务已经使用的最大值,否则可能产生主键冲突。
触发器
OceanBase Oracle 模式支持触发器。但在 NineData 增量同步场景下,目标端触发器的触发逻辑会在 NineData 写入数据时被执行。如果触发器产生了额外的数据变更,可能与同步逻辑叠加,造成预期外的结果。迁移前应确认目标端触发器在同步写入场景下是否需要保留或禁用。
存储过程、函数和 Package
OceanBase 兼容大部分 Oracle PL 功能,但不支持条件编译。PL/SQL 对象的兼容性以目标端编译结果为准,编译报错项即需改造的对象清单。
将盘点结果分为四类:
点击图片可查看完整电子表格
关于结构对比的说明:NineData 结构对比功能暂不支持 Oracle 到 OceanBase Oracle 这条链路,该链路仅支持数据对比和增量对比。因此,对象转换的核验仍需通过预检查结果和人工检查完成。
数据类型转换 NineData 结构复制会自动完成映射。实施中需要额外验证的是 OceanBase 明确不支持或行为有差异的类型。
OceanBase 明确不支持的类型
需要验证行为差异的类型
实际兼容性以 NineData 预检查结果为准。
在 NineData 控制台中创建:
完成后分别执行连接测试。
完整迁移通常选择:
如果目标端结构已经由人工创建,可以根据实际情况不启用结构复制,但必须确认目标端结构与 NineData 写入要求一致。
如果目标端已有对象或数据,需要提前决定:
生产环境不建议让应用同时写 Oracle 和 OceanBase。双端写入会增加主键冲突、数据覆盖和回退难度。
建议按业务域、Schema 或重要程度分批迁移,先从测试库、小规模表和非核心业务开始。
需要明确:
重点处理:
预检查通过后,再启动正式复制。
全量复制期间,NineData 将 Oracle 中已有数据写入 OceanBase,同时继续处理源端产生的增量变化。
建议先用较低并发测试,再逐步提高复制速度。迁移速度不能以牺牲源库业务稳定性为代价。
NineData 支持全对象类型的 DML/DDL 增量数据复制。
DML 主要包括:
NineData 会持续捕获源端变更并写入 OceanBase。主键或唯一约束是稳定定位记录的前提。
DDL 可能包括:
但 DDL 的“可捕获、可复制”不等于“所有 Oracle DDL 都能在 OceanBase 端完全等价执行”。以下变更仍需在测试环境验证:
生产迁移期间仍建议冻结非必要 DDL。必须执行时,应先确认当前 NineData 链路、Oracle 版本和 OceanBase 版本的兼容性,再检查任务状态和目标端结构。
数据复制任务运行正常,并不等于源端和目标端已经完全一致。建议分层校验。
比较:
检查:
对订单、账户、库存、支付和余额等关键表,建议执行全量数据对比。
NineData 数据对比支持配置:
对于增量同步期间产生的新增、更新和删除记录,还应检查:
差异修复 SQL 执行前,需要检查外键、唯一约束、执行顺序和业务影响。
迁移前应使用真实或接近真实的业务流量测试:
建议建立兼容性问题清单:
点击图片可查看完整电子表格
全量复制完成、增量延迟为0秒,并不代表可以直接切换。源端只要继续写入,就可能立即产生新事务。
确认:
“低停机”是指迁移和追平期间业务可以持续运行,最终只需要较短的写暂停和连接切换时间,并不代表所有场景都绝对零停机。
如果业务切换到 OceanBase 后发现兼容性或性能问题,直接把连接切回 Oracle,可能导致切换期间产生的数据丢失。
回退设计应明确:
NineData 支持 OceanBase 到 Oracle 的反向增量同步,可将业务切换到 OceanBase 后产生的新增数据实时回流至 Oracle,用于业务异常时快速回切。回退链路应在割接前配置并验证。
检查:
如果归档日志已经清理,任务可能无法从原位置继续。应根据缺失时间段和目标端状态,评估重新全量复制、重新同步相关表或使用备份补齐。
确认目标端是否被其他业务写入,检查目标表已有数据及主键策略。不要在未确认数据来源时直接覆盖。
建议依次执行:
建议至少准备以下材料:
Oracle 到 OceanBase Oracle 模式迁移的关键,不是单纯完成一次数据导入,而是建立完整的复制和验证闭环。
NineData 提供了 Oracle 到 OceanBase Oracle 模式的数据复制链路,并支持结构复制、全量复制以及 DML/DDL 增量数据复制。
实施过程中最需要提前解决的是:
只有将 NineData 的复制能力与对象治理、应用改造、数据校验和切换演练结合起来,才能完成一套真正可落地的 Oracle 到 OceanBase 迁移方案。
可以迁移到 OceanBase Oracle 模式,但需要完成版本、对象、数据类型、应用 SQL 和性能兼容性评估。
支持。NineData 支持全量复制和增量复制,并支持全对象类型的 DML/DDL 增量数据复制。具体能力以当前版本文档和预检查结果为准。
不建议这样理解。NineData将主键或唯一约束列为同步前提。无主键表应先治理、排除或采用其他经过验证的迁移方式。
全量和增量追平期间可以继续提供业务服务。最终切换阶段建议短暂暂停写入,等待增量追平并完成最终校验。
NineData 具备 DDL 增量复制能力,但具体 DDL 在 OceanBase Oracle 模式中的执行结果仍取决于对象类型、数据库版本和兼容性。生产环境应先测试,迁移窗口内冻结非必要 DDL。
不建议立即切换。应先暂停写入、等待未提交事务完成、执行最终对比,再切换应用连接并完成业务验证。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049670/viewspace-3185161/ ,如需转载,请注明出处,否则将追究法律责任。