支持版本
使用驱动版本为 ojdbc6,目前支持 Oracle11g、12c、18c、19c 版本,其中18c、19c 新特性不支持。
使用限制
当前数据集成同步数据时,仅支持 UTF8、AL32UTF8、AL16UTF16 及 ZHS16GBK 编码格式。
说明:
支持读取视图表。
Oracle 离线单表读取节点配置
参数 | 说明 |
数据来源 | 可用的 Oracle 数据源。 |
库 | 支持选择、或者手动输入需读取的库名称 默认将数据源绑定的数据库作为默认库,其他数据库需手动输入库名称。 当数据源网络不联通导致无法直接拉取库信息时,可手动输入数据库名称。在数据集成网络连通的情况下,仍可进行数据同步。 |
Schema | 支持选择、或者手动输入需读取的 Schema。 |
表 | 支持选择、或者手动输入需读取的表名称。 |
添加分库分表 | 可创建多个数据源并添加对应的表对象。 注意: 分库分表情况下选择的多个表对象需保证 Schema 信息一致(包括字段名称、字段类型)。数据字段模块内系统默认展示第一个数据源的第一张表的元数据字段信息,若多表间字段不一致可能会导致运行失败。 |
切割键 | 指定用于数据分片的字段,指定后将启动并发任务进行数据同步,可以提升数据同步效率。 您可以将源数据表中某一列作为切分键,建议使用主键或有索引的列作为切分键, 如果需要配置为字符串,浮点和日期等其它类型的字段,请手动输入即可。 |
筛选条件(选填) | Oracle 根据指定 where 条件拼接 SQL,并根据该 SQL 进行数据抽取。例如,在测试时指定 where 条件为 row_number()。 where 条件可以有效地进行业务增量同步 。 where 条件不配置或为空时,将视作全表同步数据 。 |
Oracle 离线单表写入节点配置
参数 | 说明 |
数据去向 | 需要写入的 Oracle 数据源。 |
库 | 支持选择、或者手动输入需写入的库名称 默认将数据源绑定的数据库作为默认库,其他数据库需手动输入库名称。 当数据源网络不联通导致无法直接拉取库信息时,可手动输入数据库名称。在数据集成网络连通的情况下,仍可进行数据同步。 |
Schema | 支持选择、或者手动输入需要写入的 Oracle 数据模式。 |
表 | 支持选择、或者手动输入需写入的表名称 当数据源网络不联通导致无法直接拉取表信息时,可手动输入表名称。在数据集成网络连通的情况下,仍可进行数据同步。 |
是否清空表 | 在写入该 Oracle 数据表前可以手动选择是否清空该数据表。 |
批量提交大小 | 一次性批量提交的记录数大小,该值可以极大减少数据同步系统与 Oracle 的网络交互次数,并提升整体吞吐量。如果该值设置过大,会导致数据同步运行进程 OOM 异常。 |
写入模式 | Oracle写入支持两种模式:
append:追加写入。
upsert:根据设置主键字段进行数据更新写入。 |
前置 SQL(选填) | 执行同步任务之前执行的 SQL 语句,根据数据源类型对应的正确 SQL 语法填写 SQL,例如,执行前清空表中的旧数据(truncate table tablename)。 |
后置 SQL(选填) | 执行同步任务之后执行的 SQL 语句,根据数据源类型对应的正确 SQL 语法填写 SQL,例如,加上某一个时间戳 alter table tablename add colname timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。 |
数据类型转换支持
读取
Oracle 读取支持的数据类型及转换对应关系如下(在处理 Oracle 时,会先将 Oracle 数据源的数据类型和数据处理引擎的数据类型做映射):
Oracle 数据类型 | 内部类型 |
NUMBER,INTEGER,INT,SMALLINT | Long |
NUMERIC,DECIMAL,FLOAT,DOUBLE PRECISION,REAL | Double |
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 | String |
TIMESTAMP,DATE | Date |
bit, bool | Boolean |
BLOB,BFILE,RAW,LONG RAW | Bytes |
写入
Oracle 写入支持的数据类型及转换对应关系如下:
内部类型 | Oracle 数据类型 |
Long | NUMBER,INTEGER,INT,SMALLINT |
Double | NUMERIC,DECIMAL,FLOAT,DOUBLE PRECISION,REAL |
String | 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 |
Date | TIMESTAMP,DATE |
Boolean | bit, bool |
Bytes | BLOB,BFILE,RAW,LONG RAW |
Oracle 脚本 Demo
如果您配置离线任务时,使用脚本模式的方式进行配置,您需要在任务脚本中,按照脚本的统一格式要求编写脚本中的 reader 参数和 writer 参数。
"job": {"content": [{"reader": {"parameter": {"password": "******","column": [ //列名"ID","NAME"],"connection": [{"jdbcUrl": ["jdbc:oracle:thin:@ip:1521:DATABASE"],"table": [ //源表"SCHEMA.SOURCE_TABLE"]}],"where": "ID>10", //筛选条件"splitPk": "ID", //切割键"username": "root"},"name": "oraclereader"},"transformer": [],"writer": {"parameter": {"postSql": [ //后置sql""],"password": "******","column": [ //列名"ID","NAME"],"connection": [{"jdbcUrl": "jdbc:oracle:thin:@ip:1521:DATABASE","table": [ //目标表"SCHEMA.SINK_TABLE"]}],"writeMode": "upsert", //写入模式"batchSize": 1024, //批量提交大小"username": "root","on": [ //唯一性索引"ID"],"preSql": [ //前置sql""]},"name": "oraclewriter"}}],"setting": {"errorLimit": { //脏数据阈值"record": 0},"speed": {"byte": -1, //不限制同步速度,正整数表示设置最大传输速度 byte/s"channel": 1 //并发数量}}}