开发者
Oracle迁移oGRAC数据库指南

Oracle迁移oGRAC数据库指南

数据迁移oGRAC

发表于 2026/05/28

0

Oracle迁移oGRAC数据库指南

随着企业数字化转型的深入,数据库迁移需求日益增长。oGRAC作为openGauss社区推出的业界首个开源多主数据库,以其高性能、高可靠性和强大的扩展性,成为越来越多企业的选择。本文将详细介绍如何使用openGauss-FullReplicate工具实现从Oracle到oGRAC的平滑迁移。

一、迁移工具介绍

openGauss-FullReplicate是一款用Java编写的数据迁移工具,专为解决数据库迁移问题而设计。该工具提供了全量数据和对象的迁移能力,支持从Oracle数据库迁移至oGRAC数据库。

核心功能

  • 多表并行迁移:采用多线程并行处理,提高迁移效率
  • 全面的对象迁移:支持表、约束、索引、外键、视图、函数、触发器、存储过程和序列的迁移
  • 智能类型转换:自动处理Oracle与oGRAC之间的数据类型差异
  • 迁移进度记录:实时记录迁移状态,生成详细的迁移报告

适用场景

  • 企业应用系统升级:将基于Oracle的应用系统升级到基于oGRAC的架构
  • 数据库平台替换:出于成本、性能等考虑,将数据库平台从Oracle替换为oGRAC
  • 数据整合:将多个Oracle数据库中的数据整合到一个oGRAC数据库中

二、工具原理

2.1 整体架构

openGauss-FullReplicate工具采用分层架构设计,主要包含以下几个核心层次:

  • 入口层:负责解析命令行参数并初始化迁移引擎
  • 工厂层:根据数据库类型创建对应的数据库实例和迁移策略
  • 数据库层:负责与源数据库和目标数据库的交互
  • 策略层:实现不同类型对象的迁移策略
  • DataX层:利用DataX进行高效的数据迁移
  • 协调层:负责管理队列和跟踪迁移进度
  • 转换器层:负责将源数据库的SQL语法转换为目标数据库兼容的语法
  • 配置层:加载和管理配置信息

2.2 核心组件

  1. MigrationEngine:迁移引擎,负责协调整个迁移过程
  2. SourceDatabase:源数据库抽象接口,OracleSource是其实现
  3. TargetDatabase:目标数据库抽象接口,DataXTargetDatabase是其实现(用于OGRAC)
  4. MigrationStrategy:迁移策略抽象接口,实现不同类型对象的迁移
  5. DataXManager:DataX管理类,负责DataX配置生成和执行
  6. TranslatorFactory:SQL转换器工厂,负责管理和提供各种数据库类型的SQL转换器
  7. ProgressTracker:进度跟踪器,负责跟踪迁移进度和状态
  8. QueueManager:队列管理器,负责管理各种迁移队列,实现生产者-消费者模式

2.3 执行流程

1.  初始化阶段

  • 解析命令行参数,加载配置文件 初始化MigrationEngine,创建数据库连接 构建策略工厂和各种迁移策略

2.  迁移执行阶段

  • 根据命令行参数指定的任务类型,获取对应的迁移策略 执行迁移操作: 序列迁移:读取序列元数据,生成DDL并执行 表迁移:读取表结构和数据,通过DataX工具迁移 索引和键迁移:读取索引、主键、外键、约束信息,生成DDL并执行 对象迁移:读取视图、函数、触发器、存储过程信息,转换SQL语法并执行

3.  并行处理

  • 使用线程池进行并行处理,提高迁移效率 支持大规模表迁移场景的并发处理

4.  进度跟踪

  • 实时跟踪迁移进度和状态 记录每个对象的迁移状态和结果

2.4 技术特点

  • DataX集成:利用DataX进行高效的数据迁移,支持大数据量迁移
  • 智能类型转换:自动处理Oracle与oGRAC之间的数据类型差异
  • 并行处理:采用多线程并行处理,提高迁移效率
  • 扩展性:通过工厂模式和策略模式,可方便添加新的数据库类型支持
  • 可靠性:实时记录迁移进度,支持断点续传

三、迁移前准备

在开始迁移之前,需要完成以下准备工作:

1. 环境要求

项目

要求

推荐配置

JDK版本

17+



17.0.0+



执行机器CPU



4核

8核及以上

执行机器内存

8GB



16GB及以上

执行机器磁盘

50GB



100GB及以上

网络带宽

1Gbps



10Gbps



网络延迟

<10ms



<5ms



2. 2. 源端Oracle准备

  • 版本要求:Oracle 19
  • 统计信息更新:执行以下命令更新指定schema的表统计信息
  • EXEC DBMS_STATS.GATHER_SCHEMA_STATS('YOUR_SCHEMA_NAME', cascade=>TRUE);
  • 字符集检查:确保Oracle使用AL32UTF8字符集
  • SELECT USERENV('language') FROM DUAL;
  • 权限设置:确保迁移用户具有足够的权限读取源数据库对象

3. 目标端oGRAC准备

  • 数据库创建:创建目标数据库,确保编码格式与源端一致(UTF-8)
  • 用户权限:创建迁移用户并授予相应权限
  • 表空间:确保有足够的表空间用于迁移操作

4. 工具下载与安装

1.  下载openGauss-FullReplicate工具

wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/latest/tools/openGauss-FullReplicate-7.0.0-RC3.tar.gz

2.  解压安装包

tar -zxvf openGauss-FullReplicate-7.0.0-RC3.tar.gz

3.  解压后目录结构

openGauss-FullReplicate/
openGauss-FullReplicate/config/
openGauss-FullReplicate/config/config.yml
openGauss-FullReplicate/build_commit_id.log
openGauss-FullReplicate/openGauss-FullReplicate-7.0.0-RC3.jar

四、迁移操作步骤

完成配置文件配置后,即可开始迁移。迁移命令不支持并行执行,需要按照一定顺序执行。

1. 迁移序列

# 迁移序列
java -jar openGauss-FullReplicate-7.0.0-RC3.jar --start sequence --source oracle --config config.yml

2. 迁移表结构和数据

# 迁移表结构和数据(使用DataX方式)
java -jar openGauss-FullReplicate-7.0.0-RC3.jar --start datax_table --source oracle --config config.yml

3. 迁移主键

# 迁移主键
java -jar openGauss-FullReplicate-7.0.0-RC3.jar --start primarykey --source oracle --config config.yml

4. 迁移外键

# 迁移外键
java -jar openGauss-FullReplicate-7.0.0-RC3.jar --start foreignkey --source oracle --config config.yml

5. 迁移索引

# 迁移索引
java -jar openGauss-FullReplicate-7.0.0-RC3.jar --start index --source oracle --config config.yml

6. 迁移约束

# 迁移约束
java -jar openGauss-FullReplicate-7.0.0-RC3.jar --start constraint --source oracle --config config.yml

7. 迁移视图

# 迁移视图
java -jar openGauss-FullReplicate-7.0.0-RC3.jar --start view --source oracle --config config.yml

8. 迁移函数

# 迁移函数
java -jar openGauss-FullReplicate-7.0.0-RC3.jar --start function --source oracle --config config.yml

9. 迁移触发器

# 迁移触发器
java -jar openGauss-FullReplicate-7.0.0-RC3.jar --start trigger --source oracle --config config.yml

10. 迁移存储过程

# 迁移存储过程
java -jar openGauss-FullReplicate-7.0.0-RC3.jar --start procedure --source oracle --config config.yml

五、数据类型转换规则

1. 列类型转换

Oracle

oGRAC

备注

数值类型

NUMBER



NUMBER



保持精度

NUMBER



BIGINT



自增类型

FLOAT



DOUBLE

      PRECISION



转换为DOUBLE

      PRECISION



BINARY_FLOAT



BINARY_FLOAT



类型名称一致

BINARY_DOUBLE



BINARY_DOUBLE



类型名称一致

字符串类型

CHAR(n)



CHAR(n)



保持长度,默认为BYTE



VARCHAR2(n)



VARCHAR2(n

      BYTE)



保持长度,默认为BYTE



NCHAR(n)



NCHAR(n)



保持原样

NVARCHAR2(n

      CHAR)



NVARCHAR2(n

      CHAR)



保持原样

CLOB



CLOB



类型名称一致

NCLOB



CLOB



转换为CLOB



大对象类型

BLOB



BLOB



类型名称一致

RAW(n)



RAW(n)



保持原类型,包含长度信息

LONG RAW



BLOB



转换为BLOB



日期时间类型

DATE



DATE



类型名称一致

TIMESTAMP



TIMESTAMP



类型名称一致

TIMESTAMP

      WITH TIME ZONE



TIMESTAMP

      WITH TIME ZONE



类型名称一致

2. 2. 索引类型转换

Oracle

oGRAC

备注

B-tree Index



B-tree Index



完全兼容

Unique Index



Unique Index



完全兼容

Reverse Key

      Index



B-tree Index



完全兼容

Function-based

      Index



Function

      Index



部分兼容,仅支持特定函数

Composite

      Index



Composite

      Index



完全兼容,复合索引最多支持16列

Bitmap Index



B-tree Index



转为普通索引

3. 3. 主键迁移

  • 普通主键:直接迁移到oGRAC数据库,保持原有的数据类型和约束定义
  • 自增主键:Oracle的自增主键(IDENTITY列)迁移到oGRAC时,NUMBER类型会转换为BIGINT类型,IDENTITY模式会转换为AUTO_INCREMENT
     

六、迁移进度与日志

1. 进度文件

迁移过程中,工具会在process/目录下生成多个JSON文件,记录各类对象的迁移进度和详情:

  • datax_table.json - 表迁移进度
  • primarykey.json - 主键迁移进度
  • foreignkey.json - 外键迁移进度
  • index.json - 索引迁移进度
  • constraint.json - 约束迁移进度
  • view.json - 视图迁移进度
  • function.json - 函数迁移进度
  • trigger.json - 触发器迁移进度
  • procedure.json - 存储过程迁移进度
  • sequence.json - 序列迁移进度
  • migration_error.log - 迁移错误日志

2. 日志分析

  • 错误日志:所有对象迁移错误都会记录在migration_error.log文件中
  • DataX日志:如果启用了DataX日志输出,可在指定目录查看详细的DataX执行日志

七、常见问题与解决方案

1. 中文编码与乱码问题

原因:源端Oracle和目标端oGRAC字符集不一致

解决方案

  • 确保Oracle使用AL32UTF8字符集
  • 确保oGRAC使用UTF-8字符集
  • 设置正确的环境变量
  • export LANG=C.UTF-8
  • export LC_ALL=C.UTF-8
  • export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

2. 迁移速度慢

原因:线程数配置不合理或系统资源不足

解决方案

  • 调整配置文件中的readerNumwriterNum参数
  • 根据表大小调整DataX的Channel数和批处理大小
  • 确保执行机器有足够的内存和CPU资源

3. 迁移失败

原因:权限不足、网络中断、配置错误等

解决方案

  • 检查源端和目标端数据库连接配置
  • 确保迁移用户具有足够的权限
  • 检查网络连接是否稳定
  • 查看错误日志,定位具体失败原因

八、迁移建议

1. 执行策略

  • 迁移顺序:建议按照序列 → 表结构和数据 → 主键 → 外键 → 索引 → 约束 → 视图 → 函数 → 触发器 → 存储过程的顺序执行
  • 分批迁移:对于大型数据库,建议按schema或表的大小分批迁移
  • 业务低峰期:选择业务低峰期进行迁移,减少对生产系统的影响

2. 性能优化

  • 内存配置:根据迁移数据量调整JVM内存参数
  • java -Xmx8g -jar openGauss-FullReplicate-7.0.0-RC3.jar --start datax_table --source oracle --config config.yml
  • 并发度调整:根据系统资源情况调整readerNumwriterNum参数
  • DataX配置:根据表大小选择合适的DataX配置策略

3. 验证步骤

  • 数据一致性:迁移完成后,验证源端和目标端数据是否一致
  • 功能验证:验证应用程序在目标数据库上是否正常运行
  • 性能验证:测试目标数据库的性能是否满足业务需求

九、总结

使用openGauss-FullReplicate工具从Oracle迁移到oGRAC是一个相对简单和高效的过程。通过本文的指南,您应该能够顺利完成从Oracle到oGRAC的迁移工作。

希望本文对您的Oracle到oGRAC迁移工作有所帮助!


本页内容