You need to enable JavaScript to run this app.
文档中心
大数据研发治理套件

大数据研发治理套件

复制全文
下载 pdf
Oracle
配置 Oracle 数据源
复制全文
下载 pdf
配置 Oracle 数据源

Oracle 数据源为您提供读取和写入 Oracle 的双向通道数据集成能力,实现不同数据源与 Oracle 之间的数据传输场景。本文为您介绍 DataSail 的 Oracle 数据同步的能力支持情况,包括离线批式同步和基于 LogMiner 的实时同步方案。

1 支持的 Oracle 版本

1.1 版本与功能支持矩阵

Oracle 版本

离线读(Oracle Reader)

离线写(Oracle Writer)

实时同步(CDC via LogMiner)

备注

Oracle 11.2 (11gR2)

✅ 支持

✅ 支持

✅ 支持

推荐版本,功能完全兼容

Oracle 12.1 (12cR1)

✅ 支持

✅ 支持

✅ 支持

离线读写支持 CDB/PDB;CDC 仅支持非 CDB 模式

Oracle 12.2 (12cR2)

✅ 支持

✅ 支持

✅ 支持

新版本特性不支持

Oracle 18.3

✅ 支持

✅ 支持

✅ 支持

新版本特性不支持

Oracle 19.x

✅ 支持

✅ 支持

✅ 支持

新版本特性不支持,长期支持版本

Oracle 21.1

✅ 支持

✅ 支持

✅ 支持

新版本特性不支持

说明

  • Oracle 离线读写插件使用 ojdbc8-12.2.0.1.jar 驱动。
  • "新版本特性不支持"指 12.2 及以上版本引入的新数据类型、新 SQL 语法等功能不受支持,核心读写能力正常。
  • 实时同步(CDC)基于 Oracle LogMiner 实现,需要额外的服务端配置,详见第 6 章。

1.2 支持的部署架构

部署架构

离线读写

实时 CDC

说明

单实例(Standalone)

✅

✅

标准部署模式,推荐使用

RAC(Real Application Clusters)

✅

❌ 不支持

离线读写建议连接 SCAN 地址;实时 CDC 不支持 RAC 模式

Data Guard(仅 Primary)

✅

✅

仅支持主库读取,不支持从库

Multitenant(CDB/PDB)

✅

❌ 不支持

离线读写支持 CDB/PDB 模式;实时 CDC 默认仅支持非 CDB 模式

2 使用前提

2.1 网络与权限要求

  1. 确保同步任务使用的独享数据集成资源组,具有 Oracle 数据库节点的网络访问能力。详见网络连通解决方案。
  2. 子账号新建数据源时,需要有项目的管理员角色,方可以进行新建数据源操作。各角色对应权限说明,详见:管理成员
  3. 通过 Oracle CDC 数据源,配置实时整库同步、实时分库分表同步解决方案,使用基于 LogMiner 的日志进行采集时需进行一些前置配置操作。具体详见Oracle CDC 数据源 LogMiner 配置文档。

2.2 Oracle 服务端配置指南

2.2.1 离线同步用户权限

为 DataSail 离线同步创建专用用户并授予必要权限:

  • 单实例(Standalone)数据库

    -- 创建 DataSail 专用用户
    CREATE USER datasail IDENTIFIED BY <your_password>;
    
    -- 授予基础连接权限
    GRANT CREATE SESSION TO datasail;
    
    -- 授予数据读取权限(按需为目标 Schema 授权)
    GRANT SELECT ON <schema_name>.<table_name> TO datasail;
    
    -- 如需读取所有表,可授予以下权限(谨慎使用)
    -- GRANT SELECT ANY TABLE TO datasail;
    
    -- 如需写入数据
    GRANT INSERT, UPDATE, DELETE ON <schema_name>.<table_name> TO datasail;
    
    
  • Multitenant 架构(CDB/PDB)—— 仅适用于离线同步

    注意

    以下 CDB/PDB 配置仅适用于离线读写场景。实时 CDC(LogMiner)默认不支持 CDB 模式。

    -- 在 CDB 根容器中创建公共用户(用户名必须以 C## 开头)
    ALTER SESSION SET CONTAINER = CDB$ROOT;
    CREATE USER C##DATASAIL IDENTIFIED BY <your_password> CONTAINER = ALL;
    
    -- 授予基础连接权限
    GRANT CREATE SESSION TO C##DATASAIL CONTAINER = ALL;
    
    -- 切换到目标 PDB 授予数据访问权限
    ALTER SESSION SET CONTAINER = <pdb_name>;
    GRANT SELECT ON <schema_name>.<table_name> TO C##DATASAIL;
    

2.2.2 实时同步(LogMiner CDC)服务端配置

注意

使用 LogMiner 进行实时 CDC 采集前,请先了解以下使用限制:

  • 当前方案适用于 Oracle 整库的数据变更量小于 10000 条/秒的场景。
  • 仅支持主库读取,不支持从库。
  • 默认仅支持 Oracle 非 CDB 模式以及非 RAC 模式。
  • 不支持的数据类型:NCLOB、CLOB、BFILE、XMLTYPE、LONG、BINARY、VARBINARY、BLOB

在 Oracle 服务端完成以下配置:

  1. 步骤 1:创建归档日志目录,在数据盘(确保有足够空余空间)新建目标目录。

    mkdir -p /opt/oracle/oradata/recovery_area
    mkdir -p /opt/oracle/oradata/ORCLCDB
    chown -R oracle /opt/oracle/oradata
    
  2. 步骤 2:​开启归档日志(Archive Log)。

    注意

    开启 Archive Log 需要重启数据库,可能会导致业务中断,请谨慎评估后进行。开启 Archive Log 模式后,请务必预留足够磁盘空间(建议 50GB 以上),以免空间不足导致 Oracle 异常。

    切换到有 Oracle DBA 权限的用户,运行 sqlplus / as sysdba 命令,然后执行:

    -- 设置日志目录的最大占用空间及存储路径
    alter system set db_recovery_file_dest_size = 100G;
    alter system set db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' scope=spfile;
    
    -- 重启数据库并开启归档
    shutdown immediate;
    startup mount;
    alter database archivelog;
    alter database open;
    
    -- 必须执行,否则会出现列缺失等问题
    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    alter system switch logfile;
    
    -- 确认归档模式已开启(应显示 Database log mode: Archive Mode)
    archive log list;
    

    说明

    建议通过 RMAN 配置 Archive Log 清理策略:运行 rman target / 后执行 CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO DISK;,并可定期执行 DELETE NOPROMPT ARCHIVELOG ALL BACKED UP 1 TIMES TO DISK; 主动触发清理。

  3. 步骤 3:​检查 LogMiner 安装情况(可选)。进入 sqlplus 命令,执行:

    desc DBMS_LOGMNR;
    desc DBMS_LOGMNR_D;
    

    如果没有任何信息返回,需要安装 LogMiner 组件:

    @$ORACLE_HOME/rdbms/admin/dbmslm.sql
    @$ORACLE_HOME/rdbms/admin/dbmslmd.sql
    
  4. 步骤 4:​创建 LogMiner 用户并授予权限。

    注意

    以下命令适用于 10g、11c 版本,或者 12c 及以上版本的非 CDB 模式。如果自行指定了归档目录,请替换下文路径为您部署环境的实际路径;请替换 [您的密码] 为实际密码值。

    -- 创建 LogMiner 采集用户
    CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/logminer_tbs.dbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
    CREATE USER logminer_user IDENTIFIED BY [您的密码] DEFAULT TABLESPACE logminer_tbs QUOTA UNLIMITED ON logminer_tbs;
    
    -- 允许获取 LogMiner 所必须的表
    GRANT CREATE SESSION TO logminer_user;
    GRANT SELECT ON V_$DATABASE to logminer_user;
    GRANT SELECT ON V_$LOG TO logminer_user;
    GRANT SELECT ON V_$LOGFILE TO logminer_user;
    GRANT SELECT ON V_$LOGMNR_LOGS TO logminer_user;
    GRANT SELECT ON V_$LOGMNR_CONTENTS TO logminer_user;
    GRANT SELECT ON V_$ARCHIVED_LOG TO logminer_user;
    GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO logminer_user;
    GRANT EXECUTE ON DBMS_LOGMNR TO logminer_user;
    GRANT EXECUTE ON DBMS_LOGMNR_D TO logminer_user;
    
    GRANT SELECT ANY TABLE TO logminer_user;
    GRANT ANALYZE ANY TO logminer_user;
    
    -- 允许查看所有用户信息
    GRANT SELECT ON ALL_USERS TO logminer_user;
    
    -- 允许查看所有对象信息
    GRANT SELECT ON ALL_OBJECTS TO logminer_user;
    GRANT SELECT ON DBA_OBJECTS TO logminer_user;
    
    -- 允许查看物化视图和物化视图日志
    GRANT SELECT ON DBA_MVIEWS TO logminer_user;
    GRANT SELECT ON DBA_MVIEW_LOGS TO logminer_user;
    
    -- 允许查看约束信息
    GRANT SELECT ON DBA_CONSTRAINTS TO logminer_user;
    GRANT SELECT ON DBA_CONS_COLUMNS TO logminer_user;
    
    -- 允许查看表列信息
    GRANT SELECT ON ALL_TAB_COLS TO logminer_user;
    
    -- 允许查看系统表信息
    GRANT SELECT ON SYS.OBJ$ TO logminer_user;
    GRANT SELECT ON SYS.COL$ TO logminer_user;
    GRANT SELECT ON SYS.USER$ TO logminer_user;
    GRANT SELECT ON SYS.CDEF$ TO logminer_user;
    GRANT SELECT ON SYS.CON$ TO logminer_user;
    GRANT SELECT_CATALOG_ROLE to logminer_user WITH delegate option;
    
    -- 允许查看所有索引信息
    GRANT SELECT ON ALL_INDEXES TO logminer_user;
    
    -- 允许查看备用日志信息
    GRANT SELECT ON V_$STANDBY_LOG TO logminer_user;
    GRANT SELECT ON V_$ARCHIVE_GAP TO logminer_user;
    
    -- 允许查看事务信息
    GRANT SELECT ANY TRANSACTION TO logminer_user;
    
    -- 允许查询 DUAL 表
    GRANT SELECT ON DUAL TO logminer_user;
    
    -- Oracle 12c 及更高版本需要额外执行如下命令,11 等旧版本无需执行
    GRANT LOGMINING TO logminer_user;
    

    说明

    如果您在测试环境遇到权限问题(如 ORA-01031、ORA-00942),可尝试执行 GRANT DBA TO logminer_user;进行临时授权,待数据同步任务完成后请执行 REVOKE DBA FROM logminer_user; 解除授权。

  5. 步骤 5:配置归档日志保留策略,建议至少保留 24 小时的归档日志。通过 RMAN 配置:

    # rman target /
    # CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 1 DAYS;
    

    注意

    • 开启归档日志需要重启数据库,请在维护窗口期操作。
    • 全列补充日志(ALL COLUMNS)会增加 Redo Log 写入量,请评估存储和性能影响。
    • 归档日志保留时间建议不少于 24 小时,确保 DataSail 有足够时间读取变更日志。
    • 如果使用 ASM(Automatic Storage Management),需要额外授予 GRANT SELECT ON V_$ASM_LOGFILE 权限。

2.3 连通性验证清单

在 DataSail 中注册 Oracle 数据源之前,建议按照以下清单逐项验证:

序号

验证项

验证方法

预期结果

1

网络连通性

telnet <oracle_host> <port>

可建立连接

2

Oracle 监听状态

lsnrctl status(Oracle 服务器端执行)

监听器运行中,注册了目标服务

3

用户认证

sqlplus datasail/<password>@<connect_string>

登录成功

4

表访问权限

SELECT * FROM <schema>.<table> WHERE ROWNUM <= 1;

返回数据

5

Schema 访问

SELECT * FROM ALL_TABLES WHERE OWNER = '<schema>';

列出可访问的表

6

归档日志模式(CDC)

SELECT LOG_MODE FROM V$DATABASE;

返回 ARCHIVELOG

7

补充日志(CDC)

SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;

返回 YES

8

LogMiner 权限(CDC)

SELECT * FROM V$LOGMNR_CONTENTS WHERE ROWNUM <= 1;

无权限错误

3 支持的字段类型

3.1 字段类型支持矩阵

当前主要字段类型支持情况如下:

字段类型

离线读(Oracle Reader)

离线写(Oracle Writer)

备注

NUMBER

✅ 支持

✅ 支持

NUMERIC

✅ 支持

✅ 支持

REAL

✅ 支持

✅ 支持

BIT

✅ 支持

✅ 支持

BOOL

✅ 支持

✅ 支持

BINARY_FLOAT

✅ 支持

✅ 支持

BINARY_DOUBLE

✅ 支持

✅ 支持

DOUBLE PRECISION

✅ 支持

✅ 支持

CHAR

✅ 支持

✅ 支持

NCHAR

✅ 支持

✅ 支持

VARCHAR2

✅ 支持

✅ 支持

NVARCHAR2

✅ 支持

✅ 支持

DATE

✅ 支持

✅ 支持

TIMESTAMP

✅ 支持

✅ 支持

TIMESTAMP WITH TIME ZONE

✅ 支持

✅ 支持

TIMESTAMP WITH LOCAL TIME ZONE

✅ 支持

✅ 支持

DATETIME

✅ 支持

✅ 支持

CLOB

✅ 支持

✅ 支持

大字段,注意性能影响

BLOB

✅ 支持

✅ 支持

大字段,注意性能影响

RAW

✅ 支持

✅ 支持

ROWID

✅ 支持

✅ 支持

UROWID

✅ 支持

✅ 支持

FLOAT

✅ 支持

✅ 支持

INTERVAL DAY

✅ 支持

❌ 不支持

仅支持读取

INTERVAL YEAR

✅ 支持

❌ 不支持

仅支持读取

BFILE

✅ 支持

✅ 支持

LONG

✅ 支持

✅ 支持

LONG RAW

✅ 支持

✅ 支持

NCLOB

✅ 支持

✅ 支持

XmlType

✅ 支持

✅ 支持

STRUCT

❌ 不支持

❌ 不支持

User-Defined Types

❌ 不支持

❌ 不支持

AnyType / AnyData / AnyDataSet

❌ 不支持

❌ 不支持

Spatial Types

❌ 不支持

❌ 不支持

Media Types

❌ 不支持

❌ 不支持

3.2 类型转换映射表

Oracle Reader 读取数据时,会按照以下规则将 Oracle 数据类型转换为 DataSail 内部类型:

类型分类

Oracle 数据类型

DataSail 内部类型

说明

整数类

INTEGER、INT、SMALLINT

整型

浮点类

NUMBER、NUMERIC、DECIMAL、FLOAT、DOUBLE PRECISION、REAL、BINARY_FLOAT、BINARY_DOUBLE、DEC

浮点型

NUMBER 根据精度自动映射

字符串类

LONG、CHAR、NCHAR、VARCHAR、VARCHAR2、NVARCHAR2、CLOB、NCLOB、CHARACTER、CHARACTER VARYING、CHAR VARYING、NATIONAL CHARACTER、NATIONAL CHAR、NATIONAL CHARACTER VARYING、NATIONAL CHAR VARYING、NCHAR VARYING、ROWID、UROWID、XMLTYPE

字符串型

日期时间类

TIMESTAMP、DATE、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE、DATETIME

日期时间型

布尔型

BIT、BOOL

布尔型

二进制类

BLOB、BFILE、RAW、LONG RAW

二进制型

注意

LOB 类型注意事项:

  • 离线同步:CLOB、BLOB、NCLOB 等 LOB 类型字段在离线读写中受支持,但同步时可能产生较大的网络传输量,建议适当调整 reader_fetch_size 参数。
  • 实时同步(CDC):LogMiner CDC 不支持 NCLOB、CLOB、BLOB、BFILE、XMLTYPE、LONG 等类型,请在 CDC 场景中避免同步包含这些类型的字段。
  • 超大 LOB(大于 16MB)在离线同步中也可能导致单条记录处理超时,建议评估是否需要同步此类字段。

4 数据源注册

4.1 注册参数说明

新建数据源操作详见配置数据源,以下为您介绍用连接串方式配置 Oracle 数据源信息:

注意

Oracle 侧如果是白名单访问机制,则不同网络环境的连接串地址,需要添加不同的 IP 地址到数据库白名单中,确保集成资源组使用的 VPC 与 Oracle 网络能互通:

  • 如果使用的是公网连接串访问,则需要给集成资源组添加公网 IP,并将公网 IP 地址加入到白名单中。
  • 如果使用的是私网连接串访问,则需要将资源组 VPC 下的 IPv4 CIDR 地址加入到白名单中。

详见网络连通解决方案。

参数

说明

基本配置

数据源类型

Oracle

接入方式

连接串

数据源名称

数据源的名称,可自行设置,仅支持中文,英文,数字,“_”,100个字符以内。

参数配置

主机名或IP地址

Oracle 数据库的主机名称或者 IP 地址。

端口

连接主机的端口号。

连接方式

下拉选择 Oracle 数据库的连接方式:

  • SID:Oracle 实例的唯一名称。
  • Service Name:Oracle 一个实例或者多个实例的连接别名。

详细说明请参见下方的连接方式说明。

数据库名

输入已创建的 Oracle 数据库名称。

用户名

有权限访问数据库的用户名信息。

密码

输入用户名对应的密码信息。

4.2 连接方式说明

DataSail 支持两种 Oracle 连接方式,请根据您的 Oracle 部署情况选择:

连接方式

适用场景

连接串格式

说明

SID

单实例部署

jdbc:oracle:thin:@host:port:SID

SID 是 Oracle 实例的唯一名称,每个实例对应唯一的 SID。

Service Name

RAC、Data Guard 或多实例部署

jdbc:oracle:thin:@//host:port/service_name

Service Name 是一个或多个实例的连接别名,支持负载均衡和故障转移。

如何确定使用 SID 还是 Service Name?

-- 查看当前实例的 SID
SELECT INSTANCE_NAME FROM V$INSTANCE;

-- 查看当前数据库注册的 Service Name
SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME = 'service_names';

-- 或通过 lsnrctl 命令查看(在 Oracle 服务器上执行)
-- lsnrctl status

说明

使用建议如下:

  • 单实例环境优先使用 SID,配置简单直观。
  • RAC 或高可用环境必须使用 Service Name,以支持连接的负载均衡和自动故障转移。
  • 如果不确定,建议咨询 Oracle DBA。
最近更新时间:2026.07.03 18:29:48
这个页面对您有帮助吗?
有用
有用
无用
无用