概述
Oracle 是企业级关系型数据库,广泛应用于金融、电信、政府等行业的核心业务系统。DataBuddy 数据接入支持将 Oracle 作为来源端,覆盖离线同步、实时整库同步、分库分表同步等场景。本文介绍其连接配置、能力支持范围、前提条件与常见问题。
支持的版本
类型 | 支持版本 |
Oracle | 11g / 12c / 19c |
读取能力
能力 | 支持情况 | 说明 |
离线同步(读 / 写) | ✓ / - | 支持作为离线同步任务的源端读取数据;DataBuddy 数据源仅支持接入读取,不支持写入 |
实时同步(读 / 写) | ✓ / - | 支持作为实时同步任务的源端读取整库数据变更;DataBuddy 数据源仅支持接入读取,不支持写入 |
分库分表同步(读 / 写) | ✓ / - | 支持以分库分表方式读取多个分表数据;DataBuddy 数据源仅支持接入读取,不支持写入 |
使用限制
实时同步限制(基于 LogMiner)
限制项 | 说明 |
日志保留时间 | 增量日志至少保留 72 小时 |
备库支持 | 仅支持 logical standby,不支持 physical standby |
无主键表 | 无主键表无法保证 exactly-once 语义 |
账号限制 | 严禁使用 system 或 sys 账号配置数据源 |
DDL 风险 | 加列带默认值可能导致解析异常;LogMiner 可能导致 DML 与 DDL 顺序错乱 |
性能瓶颈 | LogMiner 读取超过 5k/s 时可能出现较大延迟 |
RAC 模式风险 | 日志文件切换可能导致 LogMiner 不感知,造成数据缺失 |
若无法接受上述限制,建议使用 OGG (Oracle GoldenGate) 方案。
离线同步限制
限制项 | 说明 |
视图 | 支持读取视图 |
编码格式 | 仅支持 UTF8 / AL32UTF8 / AL16UTF16 / ZHS16GBK |
支持的字段类型
字段类型 | 离线读 | 实时读 |
NUMBER / INTEGER / INT / SMALLINT / NUMERIC / DECIMAL | ✅ | ✅ |
FLOAT / BINARY_FLOAT / DOUBLE PRECISION / BINARY_DOUBLE / REAL | ✅ | ✅ |
CHAR / VARCHAR / VARCHAR2 / NCHAR / NVARCHAR2 | ✅ | ✅ |
CLOB / NCLOB | ✅ | ✅ |
DATE / TIMESTAMP / TIMESTAMP WITH TIME ZONE / TIMESTAMP WITH LOCAL TIME ZONE | ✅ | ✅ |
BLOB / RAW / LONG RAW | ✅ | ✅ |
ROWID | ✅ | ✅ |
INTERVAL YEAR TO MONTH / INTERVAL DAY TO SECOND | ✅ | ✅ |
XMLTYPE | ✅ | ❌ |
BFILE | ❌ | ❌ |
字段类型映射(离线同步)
同步时源端字段类型会转换为 DataBuddy 内部类型(同步链路中的中间类型)。配置任务前请重点核对「备注」列标注的类型,避免精度丢失或语义变化。
源端类型 | DataBuddy 内部类型 | 备注 |
NUMBER / INTEGER / INT / SMALLINT / NUMERIC / DECIMAL | Double | 按 BigDecimal 读取后转为双精度浮点数,超出精度范围会丢失小数精度;对精度敏感的场景建议在目标端改用 Decimal 或字符串类型 |
FLOAT / DOUBLE PRECISION / REAL | Double | 遵循 IEEE 754 浮点精度 |
BINARY_FLOAT / BINARY_DOUBLE | String | 按文本读取,与实时链路落 FLOAT / DOUBLE 不同 |
CHAR / VARCHAR / VARCHAR2 / NCHAR / NVARCHAR2 | String | - |
LONG | String | - |
CLOB / NCLOB | String | 按文本读取 |
DATE / TIMESTAMP / TIMESTAMP WITH TIME ZONE / TIMESTAMP WITH LOCAL TIME ZONE | Date | 均按日期时间读取,不区分时区语义 |
BLOB / RAW / LONG RAW | Bytes | 不做内容解析 |
ROWID / UROWID | String | - |
INTERVAL YEAR TO MONTH / INTERVAL DAY TO SECOND | String | 按文本读取,不落数值 |
XMLTYPE | String | 按文本读取,不解析 XML 结构 |
BFILE | - | 不支持,任务报错并提示不支持的字段类型 |
上表未列出的其他类型 | - | 任务报错并提示不支持的字段类型 |
字段类型映射(实时同步)
实时同步(整库多表 / 分库分表)由 CDC 连接器解析源端类型并写入 TCLake。下表为自动建表时目标表实际使用的字段类型 ,配置任务前请重点核对「备注」列标注的类型。
源端类型 | TCLake 目标类型 | 备注 |
CHAR / VARCHAR / VARCHAR2 | STRING | - |
CLOB / NCLOB | STRING | 长度截断到 4000 字符 |
NUMBER | DECIMAL | 有精度时按 DECIMAL 保留;未指定精度时按 DECIMAL(38, 10) 建表 |
BINARY_FLOAT | FLOAT | - |
BINARY_DOUBLE | DOUBLE | - |
DATE | TIMESTAMP | Oracle DATE 含时分秒,落 TIMESTAMP 而非 DATE |
TIMESTAMP | TIMESTAMP | 不带时区 |
TIMESTAMP WITH TIME ZONE / TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMPTZ | 带时区语义,与 TIMESTAMP 落点不同 |
BLOB / RAW | STRING | 二进制按字符串承载 |
ROWID / UROWID | STRING | - |
INTERVAL YEAR TO MONTH / INTERVAL DAY TO SECOND | LONG | - |
说明:
离线与实时两条链路的类型体系不同,同一源端类型可能落到不同目标类型。例如
BINARY_FLOAT / BINARY_DOUBLE:离线按 String 读取,实时分别落 FLOAT / DOUBLE。请按任务类型核对对应表格。上表目标类型即 TCLake 自动建表时使用的字段类型;如需调整,可在任务的字段映射中修改,参见 实时整库多表任务配置。
上表仅列出已确认的映射,未列出的类型请以实际建表结果为准。
实时同步支持的 DML / DDL
DML
操作 | 是否支持 |
INSERT / DELETE / UPDATE | ✅ |
DDL
操作 | 是否支持 |
新增表 / 新增列 / 删除列 / 重命名列 / 修改列类型 | ✅ |
删除表 / 清空表 / 重命名表(RENAME TABLE) | ❌ |
DDL 变更响应仅在增量阶段 生效;加列带默认值可能导致解析异常,LogMiner 可能导致 DML 与 DDL 顺序错乱。
前提条件
1. 配置账号权限
离线同步 :
CREATE USER wedata_user IDENTIFIED BY your_password;GRANT CREATE SESSION TO wedata_user;GRANT SELECT ANY TABLE TO wedata_user;
实时同步 :
CREATE USER wedata_cdc_user IDENTIFIED BY your_password DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;GRANT CREATE SESSION, SELECT ANY TABLE, SELECT_CATALOG_ROLE TO wedata_cdc_user;GRANT ANALYZE ANY TO wedata_cdc_user;GRANT EXECUTE_CATALOG_ROLE TO wedata_cdc_user;GRANT LOGMINING TO wedata_cdc_user; -- 12c 及以上版本需要,11g 不需要GRANT EXECUTE ON DBMS_LOGMNR TO wedata_cdc_user;GRANT EXECUTE ON DBMS_LOGMNR_D TO wedata_cdc_user;-- 系统视图查询权限GRANT SELECT ON V_$DATABASE TO wedata_cdc_user;GRANT SELECT ON V_$LOG TO wedata_cdc_user;GRANT SELECT ON V_$LOG_HISTORY TO wedata_cdc_user;GRANT SELECT ON V_$LOGMNR_CONTENTS TO wedata_cdc_user;GRANT SELECT ON V_$LOGMNR_LOGS TO wedata_cdc_user;GRANT SELECT ON V_$ARCHIVED_LOG TO wedata_cdc_user;GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO wedata_cdc_user;
注意:
监控表字段变更时,严禁使用
system 或 sys 账号配置数据源。2. 开启日志归档(仅实时同步)
需要重启数据库,并占用磁盘空间。
sqlplus / as sysdbaALTER SYSTEM SET db_recovery_file_dest_size = 10G;ALTER SYSTEM SET db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' scope=spfile;SHUTDOWN IMMEDIATE;STARTUP MOUNT;ALTER DATABASE ARCHIVELOG;ALTER DATABASE OPEN;ARCHIVE LOG LIST; -- 验证归档模式
3. 开启补充日志(仅实时同步)
未开启会导致 UPDATE 操作下游其他列为空。
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;ALTER TABLE schema_name.table_name ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
创建数据源
操作步骤
1. 登录 DataBuddy 控制台。
2. 在顶部切换到目标地域和 Workspace。
3. 进入 数据集成 > 数据源管理 (或 平台管理 > 数据源管理 )。
4. 点击 添加数据源 ,选择 Oracle 。
5. 填写连接配置与认证信息,详见 参数说明。
6. 点击 连通性测试 (参见 数据源连通性测试)。
7. 测试通过后点击 保存 或 保存 & 创建任务 。
参数说明
参数 | 说明 | 是否必填 |
数据源名称 | 数据源在工作空间内的唯一标识 | 是 |
JDBC URL | jdbc:oracle:thin:@host:port:sid 或 jdbc:oracle:thin:@//host:port/service_name | 是 |
用户名 | 数据库连接账号(不允许使用 system / sys) | 是 |
密码 | 数据库连接密码(支持 SSM 凭证托管) | 是 |
数据源版本 | 11g / 12c / 19c | 是 |
在数据接入任务中使用
实时整库
配置项 | 说明 |
来源表范围 | 指定表 (仅同步选中的表,新增表需重启)/ 正则匹配 (指定库名 + 表名正则,符合规则的新增表自动接入) |
读取模式 | 全量 + 增量 / 仅增量 |
离线单表
参数 | 说明 |
库 / Schema / 表 | 必填;支持指定与正则匹配 |
切割键 | 建议主键或索引列;用于并行同步 |
筛选条件 | 标准 WHERE 语法 |
最佳实践
账号权限最小化 :使用专用账号,避免 system / sys。
日志保留时间 :归档日志至少保留 72 小时。
切割键选择 :主键或索引列。
性能考量 :LogMiner 超过 5k/s 时建议使用 OGG 方案替代。
常见问题
Q:实时同步延迟较大?
A:LogMiner 读取超过 5k/s 时存在性能瓶颈。可优化作业并行度、减少同步表数量;高吞吐场景建议 OGG。
Q:加列带默认值后任务异常?
A:LogMiner 对带默认值的加列解析存在问题。建议先加列、再 UPDATE 默认值。
Q:RAC 环境下部分数据未同步?
A:日志文件切换可能导致 LogMiner 不感知。请增加日志保留时间,优化归档日志配置。
Q:UPDATE 后目标端其他列为空?
A:未开启补充日志。执行:
ALTER TABLE schema_name.table_name ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
Q:连接超时或被拒绝?
A:检查网络连通性、监听器状态、防火墙端口。