欢迎光临
我们一直在努力

doris数据库同步Oracle数据库的数据

最简单的数据同步方式是通过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的配置优化和其它应用方式,我们再行研讨。

赞(0)
未经允许不得转载:171主机测评 » doris数据库同步Oracle数据库的数据
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址