基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
如何使用 DataX 工具迁移 Oracle 数据到 OceanBase
更新时间:2026-08-25 02:41
总结说明
本文主要描述如何使用 DataX 工具将 Oracle 数据迁移到 OceanBase Oracle 模式租户。
详细说明
一、源端和目标端环境准备
源端 Oracle 环境准备
在源端 Oracle 数据库中创建测试表:
SQL> CREATE TABLE departments (
dept_id NUMBER(10) PRIMARY KEY,
dept_name VARCHAR2(50) NOT NULL,
dept_location VARCHAR2(50),
dept_manager VARCHAR2(50)
);
Table created.
插入测试数据:
SQL> INSERT INTO departments (dept_id, dept_name, dept_location, dept_manager)
VALUES (1, '人事部', '北京市', '王经理');
SQL> INSERT INTO departments (dept_id, dept_name, dept_location, dept_manager)
VALUES (2, '财务部', '上海市', '张经理');
-- 省略其余插入数据
SQL> INSERT INTO departments (dept_id, dept_name, dept_location, dept_manager)
VALUES (6, '运营部', '武汉市', '周经理');
SQL> INSERT INTO departments (dept_id, dept_name, dept_location, dept_manager)
VALUES (7, '客服部', '南京市', '黄经理');
1 row created.
确认源表数据量:
SQL> SELECT count(1) FROM departments;
COUNT(1)
----------
7
目标端 OceanBase 环境准备
在目标端 OceanBase 数据库的 Oracle 模式兼容租户中创建与源端结构相同的表(DataX 不支持迁移表结构,目标表需提前创建):
obclient> CREATE TABLE departments (
-> dept_id NUMBER(10) PRIMARY KEY,
-> dept_name VARCHAR2(50) NOT NULL,
-> dept_location VARCHAR2(50),
-> dept_manager VARCHAR2(50)
-> );
Query OK, 0 rows affected (0.99 sec)
确认目标表初始数据为空:
obclient> SELECT count(1) FROM departments;
+----------+
| COUNT(1) |
+----------+
| 0 |
+----------+
1 row in set (0.14 sec)
二、安装 DataX
下载并解压安装文件
wget https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202303/datax.tar.gz
tar zxvf datax.tar.gz
cd datax
目录结构说明
解压后的目录结构如下:
$ tree -L 1 --filelimit 30
.
├── bin
├── conf
├── job
├── lib
├── log
├── log_perf
├── plugin
├── script
└── tmp
各目录说明:
| 目录名 | 说明 |
|---|---|
| bin | 可执行文件目录,该目录下的 datax.py 为 DataX 任务的启动脚本 |
| conf | 日志文件配置目录,存放 DataX 与任务无关的配置文件 |
| lib | 运行时依赖包目录,存放 DataX 运行所需的全局 jar 文件 |
| job | 任务配置目录,包含用于测试验证 DataX 安装的任务配置文件 |
| log | 日志文件目录,存放 DataX 任务运行日志。DataX 运行时默认将日志输出到标准输出,同时写入 log 目录 |
| plugin | 插件文件目录,保存 DataX 支持的各种数据源插件 |
三、配置 Job 文件
创建 Job 配置文件
将以下 JSON 配置文件按照源端和目标端的实际环境信息填写后,放置到 datax/job/ 目录下。
注意
请直接下载并使用此 JSON 文件。下方示例代码中包含注释说明,直接复制使用时格式可能会有问题。
{
"job": {
"setting": {
"speed": {
"channel": 32
},
"errorLimit": {
"percentage": 0.1
}
},
"content": [
{
"reader": {
"name": "oraclereader",
"parameter": {
"username": "TEST2",
"password": "xxxxxx",
"column": ["*"],
"connection": [
{
"table": ["TEST2.DEPARTMENTS"],
"jdbcUrl": ["jdbc:oracle:thin:@xx.xx.xx.xx:1521:helowin"]
}
]
}
},
"writer": {
"name": "oceanbasev10writer",
"parameter": {
"writeMode": "insert",
"batchSize": 5000,
"memstoreThreshold": "90",
"username": "TEST2@oracle#obcluster",
"password": "xxxxxx",
"column": ["*"],
"connection": [
{
"table": ["TEST2.DEPARTMENTS"],
"jdbcUrl": "jdbc:oceanbase://xx.xx.xx.xx:2883/TEST2"
}
]
}
}
}
]
}
}
全局配置参数说明
| 参数 | 说明 |
|---|---|
| job | 表示一个数据同步任务,包含同步任务的配置信息 |
| channel | 表示数据同步的通道数,可不修改 |
| percentage | 表示错误限制的百分比,可不修改 |
Reader 参数说明
reader.name 值为 oraclereader,表示读取插件名称,请勿修改。
| 参数 | 说明 |
|---|---|
| username | 源端 Oracle 数据库用户名 |
| password | 源端 Oracle 数据库密码 |
| column | 表示读取或写入的列名 |
| table | 需要迁移数据的表名 |
| jdbcUrl | JDBC 连接串,注意最后需要填写端口和服务名 |
Writer 参数说明
writer.name 值为 oceanbasev10writer,表示写入插件名称,请勿修改。
| 参数 | 说明 |
|---|---|
| username | 连接 OceanBase 数据库时使用的用户名,格式为 用户@租户#集群。OceanBase 使用 2883 端口,必须带上 #集群,否则迁移会连接不上 |
| password | 连接 OceanBase 数据库时使用的密码 |
| column | 表示读取或写入的列名 |
| writeMode | 表示写入数据的方式,值为 insert 表示每次写入均为插入新数据 |
| batchSize | 表示写入数据的批次大小,即每次写入的数据条数 |
| memstoreThreshold | 表示写入数据时使用的 Memstore 阈值 |
| preSql | 表示在写入数据之前需要执行的 SQL 语句 |
| table | 需要迁移数据的表名,格式为 用户.表名 |
| jdbcUrl | JDBC 连接串,注意最后需要填写用户名 |
四、执行 Job
配置文件准备完成后,执行以下命令启动 DataX 同步任务:
cd datax/bin
python datax.py ../job/oraclejob4.json
五、执行结果
查看任务报告
DataX 任务执行结束后会输出任务报告,包含任务平均流量、记录写入速度和读写失败总数等信息。
在目标端验证数据
在目标端 OceanBase Oracle 模式租户中查询该表,确认数据是否迁移成功:
obclient> SELECT * FROM departments;
+---------+-----------+---------------+--------------+
| DEPT_ID | DEPT_NAME | DEPT_LOCATION | DEPT_MANAGER |
+---------+-----------+---------------+--------------+
| 1 | 人事部 | 北京市 | 王经理 |
| 2 | 财务部 | 上海市 | 张经理 |
| 3 | 市场部 | 广州市 | 李经理 |
| 4 | 研发部 | 深圳市 | 赵经理 |
| 5 | 销售部 | 成都市 | 刘经理 |
| 6 | 运营部 | 武汉市 | 周经理 |
| 7 | 客服部 | 南京市 | 黄经理 |
+---------+-----------+---------------+--------------+
7 rows in set (0.03 sec)
适用版本
- OceanBase V4.0 之前的所有版本
- DataX 工具最新版本(下载地址:https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202303/datax.tar.gz)
注意事项
- DataX 不支持迁移表结构,只支持迁移数据,目标端表必须事先创建。源表和目标表均可以是无主键表。
- DataX 迁移数据以任务形式执行,每个任务只处理一张表,每个任务对应一个 JSON 格式的配置文件。
- 建议使用最新版本的 DataX 软件。旧版本 writer 可能存在同步报错
datax java.lang.NumberFormatException: multiple points的问题。 - 如果 OceanBase 通过 OBProxy 连接,用户名必须带上
#集群,否则迁移时会连接不上。可能出现的报错信息为:com.alipay.oceanbase.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user 'root@mysql'@'xx.xx.xx.xx' (using password: YES)