Skip to content

Latest commit

 

History

History
174 lines (149 loc) · 16 KB

oracle_migrate_manual.md

File metadata and controls

174 lines (149 loc) · 16 KB

DBMS ORACLE MIGRATE MANUAL

本文档用于描述 DBMS 分布式迁移服务平台 ORACLE 迁移功能


对象评估

收集现有 ORACLE 数据库中的表、索引、分区表、字段长度等信息,输出类似AWR报告文件的文件,用于评估迁移成本


数据扫描

数据扫描任务配置示例

ORACLE MIGRATE MYSQL 兼容性数据库,数据扫描 NUMBER 数据类型,识别 NUMBER 数据类型适配建议,提供以下功能实现:

  • SCHEMA 名称区分大小写
  • TABLE 名称区分大小写
  • 自定义表级别采样率
  • 自定义配置 SQL Hint
  • 断点续传
  • 上游数据库一致性/非一致性读

NOTE:

约束类别 注意事项 备注
断点续传 开启断点续传,配置文件参数 chunk-size 不能动态变更,但可通过配置 enable-checkpoint = false 自动清理断点以及已迁移的表数据,重新导出导入
程序错误 程序非 panic 错误,进程不会终止,直至任务运行完成,具体错误表以及对应的错误详情参见元数据表[data_scan_task]数据 ||

结构迁移

结构迁移任务配置示例

ORACLE MIGRATE MYSQL 兼容性数据库内置列数据类型映射规则,提供以下功能实现:

  • SCHEMA 名称区分大小写
  • TABLE 名称区分大小写
  • COLUMN 名称区分大小写
  • 表结构定义迁移
  • 表索引定义迁移
  • 表约束定义迁移
  • 自定义配置路由规则映射
    • schema 名称路由
    • 数据库表名路由
    • 数据库表列名称路由
  • 自定义配置迁移规则映射,迁移规则优先级:列->表->SCHEMA->任务->内置
    • 列数据类型自定义
    • 列默认值自定义
    • 表属性自定义(仅限 TiDB 数据库)
    • 列默认值内置 SYSDATE -> NOW() 和 SYS_GUID -> UUID 规则,并提供 [buildin_datatype_rule] 和 [buildin_defaultval_rule] 元数据表,能够编写更多规则
  • 断点续传
  • 数据库序列 SEQUENCE 迁移(需要下游数据库支持序列)
  • 经转换的表结构可直接下游数据库进行创建(需要下游数据库支持序列)

NOTE:

约束类别 注意事项 备注
数据表类型 1. 分区表、临时表、聚簇表、外部表以及自定义类型 UDT 表统一转换成普通表,且自定义 UDT 表结构迁移受限自定义类型,下游数据库若不支持直接创建则以报错形式记录
2. 物化视图、普通视图统一忽略转换,以不兼容形式记录
如有必要,请获取完整的不兼容对象信息清单,然后进行手动转换
数据表约束 MYSQL 兼容性数据库唯一约束基于唯一索引字段,下游只会创建唯一索引
NUMBER 数据类型 1. 如果下游数据库是 TiDB,如无自定义规则统一以 Decimal 数据类型转换(规避 Decimal Join Bigint 数据类型字段性能低)
2. 如果下游数据库是 MYSQL,如无自定义规则按 TINYINT/SMALLINT/INT/BIGINT/DECIMAL 数据类型转换
表索引类型 FUNCTION-BASED NORMAL、BITMAP 索引类型以不兼容形式记录
字符集和排序规则 1.如果下游数据库是 TiDB,则忽略 ORACLE 数据库字符集,统一以 UTF8MB4 和 UTF8MB4_BIN 转换
2. 如果下游数据库是 MYSQL,则会根据 ORACLE 数据库字符集和排序规则映射规则进行转换(例如:ZHS16GBK -> GBK)
数据表默认值 数据库表列函数默认值不转换,保留上游默认值,下游建表时是否报错取决于下游数据库是否支持当前函数默认值
错误处理 如果程序遇到报错,进程不会终止,具体错误表以及对应的错误详情参见元数据表 [struct_migrate_task] 数据

结构对比

结构对比任务配置示例

ORACLE MIGRATE MYSQL 兼容性数据库,以上游数据库 ORACLE 表结构为基准,提供以下功能实现:

  • SCHEMA 名称区分大小写
  • TABLE 名称区分大小写
  • COLUMN 名称区分大小写
  • 自定义配置路由规则映射
    • SCHEMA 名称路由
    • TABLE 名称路由
    • COLUMN 名称路由
  • 自定义配置迁移规则映射,迁移规则优先级:列->表->SCHEMA->任务->内置
    • 列数据类型自定义
    • 列默认自定义
  • 表索引对比,依据索引类型既对比索引是否一致,也对比索引字段是否一致
  • 表约束对比,依据约束类型既对比约束名是否一致,也对比约束字段是否一致

NOTE:

约束类别 注意事项
基准参照 数据库表数据类型自定义部分参照自定义基准进行对比,非自定义部分参照内置转换规则基准进行对比
字符数据类型 ORACLE 字符数据类型 CHAR/BYTES,默认 BYTES,而 MYSQL/TiDB 是字符长度,当前只对比数值大小,忽略字节/字符区别
字符集和排序规则 1. 如果下游数据库是 TiDB,则忽略 ORACLE 数据库字符集,统一以 UTF8MB4 和 UTF8MB4_BIN 转换对比
2. 如果下游数据库是 MYSQL,则会根据 ORACLE 数据库字符集和排序规则映射规则进行转换对比(例如:ZHS16GBK -> GBK)
外键和检查约束 1. 如果下游数据库是 TiDB,则排除外键、检查约束对比
2. 如果下游数据库是 MYSQL,对于低版本只检查外键约束,高版本外键、检查约束都对比
时间数据类型 ORACLE TIMESTAMP 精度 MAX 9,而 MYSQL 兼容性数据库 TIMESTAMP 类型精度 MAX 6,,会检查出来但是修复语句保持原样
错误处理 如果程序遇到报错,进程不会终止,具体错误表以及对应的错误详情参见元数据表 [struct_compare_task] 数据

数据迁移

STMT 数据迁移任务配置示例

CSV 数据迁移任务配置示例

ORACLE MIGRATE MYSQL 兼容性数据库,提供以下功能实现:

  • SCHEMA 名称区分大小写
  • TABLE 名称区分大小写
  • COLUMN 名称区分大小写
  • 自定义配置路由规则映射
    • SCHEMA 名称路由
    • TABLE 名称路由
    • COLUMN 名称路由
  • 自定义数据库表迁移范围
  • 自定义配置 SQL Hint
  • 断点续传
  • 上游数据库一致性/非一致性读
  • 表数据字符集参照上下游数据源参数配置 charset 进行自动转换传输,支持乱码 garbled-char-replace 字符替换功能
  • 支持统计信息以及 CHUNK 形式划分数据迁移范围,并自动识别 ORACLE 数据库版本并采用最优的方式迁移
  • 数据存放空间检查是否满足数据表大小,不满足自动跳过,直至找到满足条件的数据表导出或者任务结束 (ONLY CSV MIGRATE TASK)
  • 下游 TiDB 数据库 CSV 数据迁移支持自动导入(Require: TiDB Version >= v7.5)

SQL 数据迁移任务配置示例

ORACLE MIGRATE MYSQL 兼容性数据库,提供以下功能实现:

  • SCHEMA 名称区分大小写
  • TABLE 名称区分大小写
  • COLUMN 名称区分大小写
  • 自定义配置下游写入对象(SCHEMA、TABLE)
  • 自定义配置路由规则映射
    • 列名称路由
  • 上游数据库一致性/非一致性读
  • 表数据字符集参照上下游数据源参数配置 charset 进行自动转换传输,支持乱码 garbled-char-replace 字符替换功能

NOTE:

约束类别 注意事项 备注
数据表结构 数据表存在主键或者唯一键,否则因异常错误退出或者手工中断退出,断点续传【replace into】无法替换,数据可能会导致重复,除非手工清理下游重新导入
断点续传 断点续传期间,参数配置文件 chunk-size 不能动态变更,但可通过配置 enable-checkpoint = false 自动清理断点以及已迁移的表数据,重新导出导入
错误处理 如果程序遇到报错,进程不会终止,CSV / STMT 模式数据迁移具体错误表以及对应的错误详情参见元数据表 [data_migrate_task] 数据,SQL 模式数据迁移具体错误表以及对应的错误详情参见元数据表 [sql_migrate_task] 数据

数据校验

数据校验任务配置示例

ORACLE MIGRATE MYSQL 兼容性数据库,以上游 ORACLE 数据库为基准,提供以下功能实现:

  • SCHEMA 名称区分大小写
  • TABLE 名称区分大小写
  • COLUMN 名称区分大小写
  • 自定义配置路由规则映射
    • SCHEMA 名称路由
    • TABLE 名称路由
    • COLUMN 名称路由
  • 自定义数据库表数据校验范围、校验字段以及可忽略的校验字段
  • 上游一致性/非一致性读,下游当前读
  • 支持程序 CRC32、数据库 MD5 方式数据校验以及只校验数据表行数
  • 断点续传
  • 非强制要求表结构必须存在有效唯一字段索引,采用数据对比过程结合数据记录行数规避

NOTE:

约束类别 注意事项 备注
数据库版本 ORACLE Require Version >= 10G,MYSQL 兼容性数据库 Null And "" 不额外处理,以原始值对比
数据校验 1. 除 LONG/LONG RAW/BFILE 数据类型字段表,自动采用程序 CRC32 方式校验外,其他的采用数据库 MD5 方式校验,但可通过忽略 LONG/LONG RAW/BFILE 数据类型字段规避方式来使用数据库 MD5 方式校验
2. ONLY 校验数据行数产生的差异不会输出详情修复文件,元数据表只记录数据表不相等,但对应的上下游表行数程序日志会显示记录
NUMBER 数据类型 对于无精度 Number 数据类型统一以 TO_CHAR(38 位整数,24 位小数) VS DECIMAL(65,24) 数据对比,优先保整数部分(TO_CHAR 格式化 MAX 62 位)
字符长度 为尽可能避免 ORA-22835 字段拼接超过 4000,LOB 类型数据提前 MD5 加密运算,其他维持原样运算
校验规则 1. compare-field/compare-range 参数,compare-range 优先级高于 compare-field,仅当两个都配置时,以 compare-range 为准
2. compare-field 参数字段是否是索引字段,需自行确认保证,非索引字段影响校验效率以及数据库资源消耗
断点续传 断点续传期间,参数配置文件 chunk-size 不能动态变更,但可通过配置 enable-checkpoint = false 自动清理断点以及已迁移的表数据,重新导出导入
错误处理 如果程序遇到报错,进程不会终止,具体错误表以及对应的错误详情参见元数据表 [data_compare_task] 数据

实时同步(未来计划)

ORACLE MIGRATE MYSQL 兼容性数据库,计划基于 logminer 提供增量数据实时同步功能

NOTE:

  • 基于 logminer 日志进行增量数据同步,存在 logminer 同等限制,且只同步 INSERT/DELETE/UPDATE DML 以及 DROP TABLE/TRUNCATE TABLE DDL,执行过 TRUNCATE TABLE/ DROP TABLE 可能需要重新增加表附加日志
  • 基于 logminer 日志数据同步,挖掘速率取决于重做日志磁盘 + 归档日志磁盘【若在归档日志中】以及 PGA 内存
  • 全量数据迁移参见 数据迁移