本文将手把手演示如何使用 SeaTunnel(版本 2.3.12)的 JDBC 连接器,完成从 Oracle 11g 到 Oracle 19c 的数据批量同步。如果你正在规划数据库升级或异构数据源之间的 数据迁移,这个基于文件配置的流程会非常清晰实用。
一、 环境准备
本次操作涉及以下三个核心组件:
- 源数据库:Oracle 11g
- 目标数据库:Oracle 19c
- 同步工具:SeaTunnel 2.3.12
二、 SeaTunnel 2.3.12 组件配置
开始之前,需要确保 SeaTunnel 拥有连接 Oracle 的能力。
- 下载 JDBC 连接器:将
connector-jdbc-2.3.12.jar 放置于 SeaTunnel 安装目录的 connectors/ 文件夹下。
- 放置 Oracle JDBC 驱动:由于笔者使用的是 OpenJDK 17.0.17,因此需要下载
ojdbc10-19.29.0.0.jar 并将其放入 SeaTunnel 安装目录的 lib/ 文件夹下。请根据你的 JDK 版本选择合适的驱动。
三、 Oracle 19c 别名配置(可选)
为了方便连接,可以在 Oracle 19c 客户端配置一个网络服务名。编辑 tnsnames.ora 文件:
vi tnsnames.ora
添加如下内容,其中 HOST = LQ 需要替换为你实际的数据厙主机名或IP。
ORCLPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = LQ)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCLPDB)
)
)
四、 Oracle 11g 源数据准备
在源数据库创建一个测试表并插入数据。
- 创建表
TAB_SALELIST_DATA(表结构根据你的业务定义)。
- 插入测试数据:
insert into TAB_SALELIST_DATA values(...);
insert into TAB_SALELIST_DATA values(...);
.....
commit;
五、 编写 SeaTunnel 同步配置文件
这是整个流程的核心,我们创建一个名为 oracle11_oracle19.conf 的作业配置文件。
env {
parallelism = 1
job.mode = "BATCH"
}
source {
Jdbc {
url = "jdbc:oracle:thin:@10.0.20.50:1521:ECOLOGY"
driver = "oracle.jdbc.driver.OracleDriver"
user = "oracle"
password = "oracle"
query = "SELECT * FROM TAB_SALELIST_DATA"
}
}
sink {
Jdbc {
url = "jdbc:oracle:thin:@10.0.20.240:1521/ORCLPDB"
driver = "oracle.jdbc.driver.OracleDriver"
username = "C##CDC"
password = "cdc"
schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
generate_sink_sql = true
database = ORCLPDB
table = "C##CDC.TAB_SALELIST_DATA"
}
}
配置文件解析:
source 部分定义了如何连接和读取 Oracle 11g 源表。
sink 部分定义了如何写入 Oracle 19c 目标表。generate_sink_sql = true 和 schema_save_mode 配置允许 SeaTunnel 在目标表不存在时自动建表。
六、 执行同步作业
将配置文件放入 SeaTunnel 的 job/ 目录(或指定路径),使用以下命令在本地模式执行:
bin/seatunnel.sh --config job/oracle11_oracle19.conf -m local
七、 验证同步结果
作业执行完毕后,连接到目标 Oracle 19c 数据库验证数据。
sqlplus c##cdc/cdc@ORCLPDB
执行查询:
SQL> select count(*) from TAB_SALELIST_DATA;
COUNT(*)
----------
3828438
查询结果与源表数据量一致,表明本次使用 SeaTunnel 进行的跨版本 Oracle 数据批量同步成功完成。整个过程清晰可控,配置文件驱动的方式也便于集成到自动化运维流程中。如果你在 大数据 集成或数据同步方面有更多实践经验或疑问,欢迎在 云栈社区 的 数据库/中间件/技术栈 板块与大家交流探讨。
|