本文为您介绍 OceanBase 迁移服务(OceanBase Migration Service,OMS)组件的基本原理。
OMS 组件包括 DBCat、Store、Full-Import、Incr-Sync 和 Supervisor 组件,Supervisor 组件负责对其它组件进行监控。

结构迁移核心组件
OMS 结构迁移的核心组件(DBCat)作为 OceanBase 原生的 Schema 转换引擎,可以根据源端、目标端具体的数据源类型和字符编码类型,进行精确的数据类型映射或转换。OMS 的结构迁移组件支持转换、迁移数据库中的表、约束、索引和视图等多种对象。
同时,DBCat 可以严格对齐和兼容 OceanBase 的租户类型。例如,OceanBase 的某个版本暂时不支持源端数据库中的部分数据源类型,DBCat 会选择最兼容的数据类型进行转换映射。
由于异构数据库迁移可能涉及以下问题,您可以通过 DBCat 自动对 Schema 进行转换。
数据库引擎变化
不同数据库的数据对象定义差别较大
目标数据库中不支持部分源数据库的数据对象
相同字段类型精度不匹配
对于复杂的异构数据库迁移,您可以通过 DBCat 产生基础脚本,数据库管理员(Database Administrator,DBA)再进行人工加工,最终在目标数据库生成 Schema。
增量拉取组件 Store
不同类型数据库的 Store 增量拉取组件的实现方式不同,例如 OceanBase Store 模块的实现方式是依赖于 OceanBase 数据库的 Liboblog 工具。
Liboblog 是 OceanBase 数据库的增量数据同步工具,通过 RPC 方式拉取 OceanBase 数据库各个分区的 Redo 日志后,结合各个表和列的 Schema 信息,转换 Redo 日志为中间定义的数据格式,最后以事务的方式输出修改的数据。
全量导入组件 Full-Import
Full-Import 组件负责将静态数据和部分增量数据从项目配置的源端迁移至目标端,您迁移的每张表都会经过数据切片、数据读取、数据加工和数据应用等步骤。
Full-Import 组件会根据表结构,选择合适的切片方式,将单表的数据并发迁移至目标端。对于全量的大部分数据源都实现了流式读取,减少对于源端的读取压力。
全量数据在目标端的应用使用了批量插入的方式,对于 OceanBase 数据库的分区表实现了根据分区写入聚合的逻辑,以提升写入效率。您选取的表会进行并发迁移,表内会通过切片位点 ACK 机制确保重启数据的完整性。
增量同步组件 Incr-Sync
Incr-Sync 组件负责将 Store 组件产生的增量数据应用至目标端。OMS 将增量同步的 Record 主要抽象为 DML、DDL 和 HB,DML 包括 INSERT、UPDATE 和 DELETE。OMS 通过将这些数据高效正确地应用至目标端,来确保数据的最终一致性。
对于唯一约束表:OMS 通过主键操作的幂等性确保最终一致性。
对于无主键表:OMS 通过事务表机制防止事务重放确保一致性。
目前 MySQL 数据库至 OceanBase 数据库 MySQL 租户的无主键表迁移,不保证数据的最终一致性。




