最简单的数据同步方式是通过doris的catalog功能实现,满足日常需求、
1. Catalog 的创建与管理
1.1 在 Oracle 端准备账号(只读权限)
在 Oracle 数据库里创建一个用户,并授予最基本的只读权限就可以了。
— 1. 创建用户(如果还没有)
CREATE USER 用户名 IDENTIFIED BY "你的密码";
— 2. 授予连接和查询权限
GRANT CREATE SESSION TO 用户名;
GRANT SELECT ANY TABLE TO 用户名;
1.2 创建 Catalog
以连接一个 Oracle数据源为例,在 Doris 中执行如下 SQL 即可创建一个名为 Oracle_catalog 的 Catalog:
CREATE CATALOG oracle_catalog PROPERTIES (
"type" = "jdbc",
"user" = "doris_sync",
"password" = "你的密码",
— 注意:如果是服务名,使用 /your_service_name;如果是SID,使用 :your_sid
"jdbc_url" = "jdbc:oracle:thin:@//oracle_host:1521/your_service_name",
"driver_url" = "ojdbc8.jar",
"driver_class" = "oracle.jdbc.driver.OracleDriver"
);
注意:你需要将 ojdbc8.jar放到 Doris 所有 FE 和 BE 节点的 jdbc_drivers/ 目录下,或者显式的指定全路径。
1.3 查看与切换 Catalog
— 查看所有已创建的 Catalog
SHOW CATALOGS;
— 切换到外部 Catalog
SWITCH mysql_catalog;
— 切换回 Doris 内部 Catalog
SWITCH internal;
切换后,你就可以用 SHOW DATABASES; 和 USE DB; 来查看和操作其中的数据了
2. 查看或同步源oracle数据库的数据表
直接查询外部表
— 查询 oracle Catalog 中的一张表
SELECT * FROM oracle_catalog.source_db.user_activity WHERE date = '2026-06-03';
跨 Catalog 关联查询与写入(构建中间层)
假设你要同步 oracle库中的 source_db.user_activity 表到 Doris 内部的 ods_db.user_activity 表中,可以使用 INSERT INTO … SELECT … 语句:
— 切换至内部 Catalog,确保数据写入 Doris 内部表
SWITCH internal;
— 创建目标表(ODS层)
CREATE TABLE ods_db.user_activity (
`user_id` LARGEINT NOT NULL,
`date` DATE NOT NULL,
`city` VARCHAR(20),
`cost` BIGINT
) DUPLICATE KEY(`user_id`, `date`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 10
PROPERTIES ("replication_num" = "1");
— 将外部数据源的数据导入到 Doris 内部表
INSERT INTO ods_db.user_activity
SELECT user_id, date, city, cost
FROM mysql_catalog.source_db.user_activity
WHERE date = '2026-06-02';
这条 INSERT INTO … SELECT … 语句就是数据传输的核心。它会从源表读取数据,然后写入到你的 Doris 目标表中。
3. 实现数据的每日定期同步
为了实现“每日定期导入或同步”,最简便的方法是将上一步的 INSERT INTO … SELECT … 语句包装成一个 Doris Job 定时任务。
下面这个例子会创建一个名为 daily_sync_job 的任务,它会在每天凌晨 3 点自动执行,将 oracle 中当天的数据同步到 Doris 的 ODS 表中:
CREATE JOB daily_sync_job
ON SCHEDULE EVERY 1 DAY
STARTS '2026-06-04 03:00:00'
DO
— 此处是每日要执行的同步逻辑
INSERT INTO ods_db.user_activity
SELECT user_id, date, city, cost
FROM oracle_catalog.source_db.user_activity
WHERE date = CURDATE();
整体思路是:创建多个 Catalog → 编写 INSERT INTO … SELECT … 传输数据 → 使用 Job 定时任务自动执行。
在实际应用时,还有几个地方值得留意:
Catalog 是只读的:通过 Catalog 创建的外部数据源在 Doris 中是只读的,你无法通过 Doris 直接修改源数据库的数据,这保证了上游系统的安全。
性能影响:同步数据时会给源数据库带来查询负载。建议在业务低峰期运行 Job,如果条件允许,最好从源库的从库(备库)读取数据,以减轻主库的压力。
连接池优化:对于高频查询场景,可以适当调大 Catalog 的连接池配置来提升性能。
4 应用实例
注:
1、导入前提是目标表已经按照源表的表结构创建完成
2、doris数据库管理可以使用navicat等mysql管理的客户端
3、catalog有点类似于oracle的dblink
— 首次全量导入
INSERT INTO demo2.TBMPR030
SELECT * FROM oracle_catalog.DB.TBMPR030;
— 每日增量同步(假设有更新时间字段)
INSERT INTO demo2.TBMPR030
SELECT * FROM oracle_catalog.DB.TBMPR030
WHERE update_time >= CURDATE();
5 常见问题
root 密码怎么配置?
默认情况下,Doris 集群的 root 账号是无密码的,配置或修改密码的操作其实很简单,不过根据环境,分为两种情况:
在 MySQL 客户端中修改(最常用):
像连接 MySQL 一样连接 Doris 后,使用 SQL 语句来修改密码。
— 1. 首次连接,通常 root 默认无密码
mysql -h fe_host -P 9030 -u root
— 2. 连接成功后,执行以下命令设置或修改密码
ALTER USER 'root' IDENTIFIED BY '你的新密码';
通过以上配置可以实现简单的数据同步等功能,具体doris的配置优化和其它应用方式,我们再行研讨。







