0
0
0
0
博客/.../

Oracle 11g R2 → TiDB 8.x 迁移实施步骤

 TiDBer_leaf  发表于  2026-10-09

一、迁移前评估

  1. 梳理资产清单

    • 统计实例数、Schema 数、表数、索引数、视图、序列、触发器、存储过程、JOB、物化视图。
    • 统计单表行数、最大表大小、LOB 表数量、分区表数量、日增量数据量。
    • 识别核心交易表、报表表、历史归档表、低频表。
  2. 识别兼容性风险

    • Oracle 中 '' 通常等价于 NULL,TiDB 严格区分 NULL 与空字符串,业务逻辑需改造。
    • Oracle NUMBER 无精度时需明确映射为 BIGINT 或 DECIMAL。
    • Oracle 函数如 SYSDATE 通常需改为 CURRENT_TIMESTAMP 或应用层处理。
    • TO_NUMBER 等 Oracle 专有函数需改为 CAST/CONVERT 或在应用层处理。
    • 存储过程、触发器、自定义函数、复杂 PL/SQL 包在 TiDB 上通常需要下沉到应用层。
    • 自增主键在 TiDB 中可能产生写入热点,建议评估 AUTO_RANDOM 或业务分布式 ID。
  3. 确定迁移目标

    • 是否允许停机窗口。
    • 是否需要零停机切换。
    • 是否需要反向同步,保留 Oracle 作为回退源。
    • 切换后是否继续保留 Oracle,还是彻底下线。

二、环境与工具规划

  1. 目标集群规划

    • TiDB 8.x 建议按生产规格部署,包含 TiDB、TiKV、PD,必要时启用 TiFlash。
    • 规划字符集,建议优先统一为 utf8mb4。
    • 规划账号权限、Schema 命名、连接地址、连接池配置。
  2. 迁移链路选择

    • 结构迁移:优先通过脚本/工具将 Oracle DDL 转换为 TiDB/MySQL 兼容 DDL。
    • 全量数据迁移:可使用 sqluldr2/Data Pump 导出,再通过 TiDB Lightning 或 LOAD DATA 导入。
    • 增量同步:生产场景常用 Oracle GoldenGate → TiDB,或结合 TiCDC/自研链路 做持续同步。
    • 数据校验:通过行数、抽样、字段级校验、业务关键查询对比完成。

注意:TiDB DM 主要面向 MySQL 协议兼容源端,不能直接作为 Oracle 11g 的标准增量同步工具。 Oracle 场景通常仍需 OGG、Flink CDC、DataX 或自研链路配合。

三、对象与 DDL 改造

  1. 表结构改造

    • NUMBER → BIGINT / DECIMAL,需根据精度和小数位确认。
    • VARCHAR2(n) → VARCHAR(n),注意 BYTE/CHAR 语义差异。
    • DATE/TIMESTAMP 需结合业务确认是否保留时区信息。
    • CLOB/LONG 等大字段需评估 TiDB 单行大小限制。
    • 序列通常改造为自增列、AUTO_RANDOM 或应用层发号器。
  2. 约束与索引改造

    • 外键在 TiDB 中支持有限,核心交易系统建议尽量在应用层维护一致性。
    • 长字符串索引需评估前缀索引,避免超过索引长度限制。
    • 唯一索引、组合索引、函数索引需逐类验证。
  3. SQL 与程序改造

    • 替换 Oracle 专有函数,如 NVL、DECODE、TO_CHAR、TO_NUMBER、SYSDATE、ROWNUM 等。
    • 分页语句从 ROWNUM 改写为 LIMIT。
    • 存储过程、触发器、JOB 尽量迁移到应用层或调度系统。
    • 应用侧 JDBC/连接串、事务隔离、批量提交逻辑需同步调整。

四、全量数据迁移

  1. 源端准备

    • 确认 Oracle 字符集、NLS 参数。
    • 对大表规划分批导出,避免单次导出时间过长。
    • 记录全量导出时的 SCN 或时间点,用于后续增量衔接。
  2. 导出数据

    • 可使用 sqluldr2、Data Pump 或静态快照库导出。
    • 导出文件格式建议采用 CSV/Parquet 或 Lightning 兼容格式。
    • 大表按主键或分区拆批导出,提高并发度。
  3. 导入 TiDB

    • 小表可通过 LOAD DATA 导入。
    • 大表推荐使用 TiDB Lightning,并开启并发导入。
    • 导入前关闭非必要索引,导入后重建索引。
    • 导入过程中注意控制事务大小,避免 transaction too large。

五、增量同步搭建

  1. 选择增量方案

    • 若要求低停机切换,建议采用 OGG 增量同步到 TiDB。
    • 若已有数据集成平台,也可评估 Flink CDC、DataX、自研 CDC 链路。
  2. 源端配置

    • Oracle 11g 需开启归档日志。
    • 开启 Force Logging。
    • 配置最小补全日志,按表、Schema 或库级开启。
    • 创建同步账号并授予必要权限。
  3. 目标端配置

    • TiDB 侧建议开启主键冲突检查相关参数,避免复制进程遇到主键冲突时异常。
    • 同步进程建议按表分批配置,避免单任务过大。
    • 对大事务场景需控制批量大小,必要时调整 TiDB 事务相关参数。
  4. 持续同步监控

    • 监控同步延迟、错误率、冲突表、断点恢复情况。
    • 对 DDL 变更建立审批机制,避免同步链路中断。
    • 增量阶段定期做数据抽样校验,不要等到切换前才第一次核对。

六、数据校验

  1. 基础校验

    • 对比 Oracle 与 TiDB 的表行数。
    • 对比主键最大值、最小值。
    • 对比 NULL 值数量、空字符串数量。
    • 对比关键字段的长度、精度、字符集。
  2. 业务校验

    • 抽取近 N 天增量数据逐行比对。
    • 对金额、状态、时间类字段做定点核对。
    • 验证最大 LOB 记录、特殊字符记录、边界值记录。
  3. 应用校验

    • 在测试环境回放真实查询。
    • 对核心报表、交易查询、批量作业进行对比。
    • 验证并发写入、批量导入、定时任务是否正常。

七、性能压测与调优

  1. 压测重点

    • 核心交易接口 QPS、RT。
    • 批量作业耗时。
    • 复杂查询执行计划。
    • 热点表写入表现。
  2. 常见调优方向

    • 对单调递增主键表评估 AUTO_RANDOM。
    • 补充缺失索引,避免全表扫描。
    • 对慢 SQL 固化执行计划或改写 SQL。
    • 调整 GC 生命周期,避免长查询或同步任务被回收影响。
    • 定期更新统计信息,防止执行计划劣化。

八、切换演练

  1. 演练目标

    • 验证全量 + 增量链路是否可重复执行。
    • 验证数据校验脚本是否可靠。
    • 验证应用切换步骤是否清晰。
    • 验证回退流程是否可在限定时间内完成。
  2. 演练内容

    • 模拟一次完整割接。
    • 模拟增量延迟升高。
    • 模拟切换失败回退。
    • 模拟主键冲突、大事务报错、DDL 变更冲突。

九、正式割接步骤

  1. 割接前 T-1 天

    • 冻结非必要 DDL 变更。
    • 确认增量同步延迟稳定。
    • 完成最后一次全量数据核对。
    • 准备回退脚本、回退检查清单。
  2. 割接窗口内

    • 停止应用对 Oracle 的写入,或改为只读。
    • 等待增量同步追平。
    • 进行最终数据一致性校验。
    • 切换应用数据源到 TiDB。
    • 开启应用验证用例。
    • 观察核心指标:错误率、延迟、慢查询、连接数、Region 热点。
  3. 割接后观察

    • 保留 Oracle 只读访问能力,用于紧急核对。
    • 若采用反向同步,继续运行一段时间。
    • 观察 24 小时、72 小时、首个业务高峰周期。
    • 确认无异常后再正式下线 Oracle 依赖。

十、回退预案

  1. 未切写回退

    • 若应用尚未切换写流量,直接中断切换流程。
    • 恢复 Oracle 读写。
    • 记录问题原因,重新评估改造点。
  2. 已切写回退

    • 立即停止 TiDB 写入入口。
    • 评估是否通过反向同步将新数据回写 Oracle。
    • 若无反向同步,则按业务容忍度选择人工补数或延长 Oracle 双写期。
    • 回退后重新梳理主键冲突、序列号、JOB 重复执行等问题。

十一、DBA 交付物清单

  • 《Oracle 对象清单与兼容性评估表》
  • 《DDL 改造对照表》
  • 《SQL 改造清单》
  • 《全量迁移脚本与导入记录》
  • 《增量同步拓扑与点位记录》
  • 《数据校验报告》
  • 《压测报告与调优记录》
  • 《割接操作手册》
  • 《回退预案与演练记录》
  • 《上线后观察清单》

关键风险提示

  • 空字符串与 NULL 差异 是最容易遗漏的业务风险点,必须在改造阶段处理。
  • 自增主键热点 会影响写入性能,不能直接照搬 Oracle 序列模式。
  • 大事务 容易导致导入或同步失败,需分批控制。
  • 存储过程、触发器、JOB 不能指望 TiDB 完全等价替代,应提前下沉到应用层。
  • 增量同步点位管理 必须严格记录,否则割接失败后难以恢复。
  • 数据校验不能只看行数,还需覆盖字段语义、边界值和业务查询。

建议先在测试环境完整跑通一轮:结构改造 → 全量导入 → 增量同步 → 数据校验 → 压测 → 割接演练 → 回退演练,确认所有脚本可重复执行后再安排正式割接。

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论