---
title: Oracle迁移oGRAC数据库指南-官方技术文章-鲲鹏社区
description: 随着企业数字化转型的深入，数据库迁移需求日益增长。oGRAC作为openGauss社区推出的业界首个开源多主数据库，以其高性能、高可靠性和强大的扩展性，成为越来越多企业的选择。本文将详细介绍如何使用openGauss-FullReplicate工具实现从Oracle到oGRAC的平滑迁移。
keywords: Oracle,GRAC,数据库指南,官方技术文章,鲲鹏社区,迁移工具介绍,核心功能,适用场景
url: https://www.hikunpeng.com/developer/techArticles/20260528-1?envFlag=1
section: (其他)
---

# Oracle迁移oGRAC数据库指南-官方技术文章-鲲鹏社区

URL: https://www.hikunpeng.com/developer/techArticles/20260528-1?envFlag=1
描述: 随着企业数字化转型的深入，数据库迁移需求日益增长。oGRAC作为openGauss社区推出的业界首个开源多主数据库，以其高性能、高可靠性和强大的扩展性，成为越来越多企业的选择。本文将详细介绍如何使用openGauss-FullReplicate工具实现从Oracle到oGRAC的平滑迁移。
关键词: Oracle,GRAC,数据库指南,官方技术文章,鲲鹏社区,迁移工具介绍,核心功能,适用场景

官方技术文章 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles)

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 | DOUBLEPRECISION | 转换为DOUBLEPRECISION |
| BINARY_FLOAT | BINARY_FLOAT | 类型名称一致 |
| BINARY_DOUBLE | BINARY_DOUBLE | 类型名称一致 |
| 字符串类型 |  |  |
| CHAR(n) | CHAR(n) | 保持长度，默认为BYTE |
| VARCHAR2(n) | VARCHAR2(nBYTE) | 保持长度，默认为BYTE |
| NCHAR(n) | NCHAR(n) | 保持原样 |
| NVARCHAR2(nCHAR) | NVARCHAR2(nCHAR) | 保持原样 |
| CLOB | CLOB | 类型名称一致 |
| NCLOB | CLOB | 转换为CLOB |
| 大对象类型 |  |  |
| BLOB | BLOB | 类型名称一致 |
| RAW(n) | RAW(n) | 保持原类型，包含长度信息 |
| LONG RAW | BLOB | 转换为BLOB |
| 日期时间类型 |  |  |
| DATE | DATE | 类型名称一致 |
| TIMESTAMP | TIMESTAMP | 类型名称一致 |
| TIMESTAMPWITH TIME ZONE | TIMESTAMPWITH TIME ZONE | 类型名称一致 |

### 2.2. 索引类型转换

| Oracle | oGRAC | 备注 |
| --- | --- | ---|
| B-tree Index | B-tree Index | 完全兼容 |
| Unique Index | Unique Index | 完全兼容 |
| Reverse KeyIndex | B-tree Index | 完全兼容 |
| Function-basedIndex | FunctionIndex | 部分兼容，仅支持特定函数 |
| CompositeIndex | CompositeIndex | 完全兼容，复合索引最多支持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. 迁移速度慢

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

解决方案：

- 调整配置文件中的`readerNum`和`writerNum`参数
- 根据表大小调整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
- 并发度调整：根据系统资源情况调整`readerNum`和`writerNum`参数
- DataX配置：根据表大小选择合适的DataX配置策略

### 3. 验证步骤

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

## 九、总结

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

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

本页内容
