tencent cloud

文档反馈

Oracle 数据源

最后更新时间:2024-11-01 16:54:35
    数据集成提供了 Oracle 的读取和写入能力,本文为您介绍使用 Oracle 进行实时数据同步的前置环境配置以及当前能力支持情况。

    支持版本

    目前数据集成已支持 Oracle 单表及整库级实时读取和单表写入,使用实时同步能力需遵循以下版本限制:
    类型
    版本
    Oracle
    11,12,19

    使用限制

    Oracle 只读备库只支持 logical standby,不支持 physical standby。
    无主键的表由于无法保证 exactly once 可能会有数据重复,因此实时同步任务最好保证有主键。
    若要监控 Oracle 端表字段变更,数据源请勿配置 system/sys 两个账号,否则所有表(包括新增表)都需要开启日志才能进行同步。

    数据库环境准备

    授权数据库权限

    主要是创建基础的同步用户,以及授予拉取存量数据的权限。给需要使用的用户授权各个 view、需导入表的读权限。
    ANALYZE ANY 权限的主要作用是读取表的结构与 unique index。当表没有主键时,可以使用某一个 unique index 来代替主键的作用。
    sqlplus sys/password@host:port/SID AS SYSDBA;
    CREATE USER flinkuser IDENTIFIED BY flinkpw DEFAULT TABLESPACE LOGMINER_TBS QUOTA UNLIMITED ON LOGMINER_TBS;
    -- 允许用户连接到数据库
    GRANT CREATE SESSION TO flinkuser;
    -- 用于支持需要使用了cdb / pdb的场景,授予用户访问pdb / cdb的权限
    GRANT SET CONTAINER TO flinkuser;
    -- 授予用户对数据库中所有表的SELECT权限,用于读取数据
    GRANT SELECT ANY TABLE TO flinkuser;
    --SELECT_CATALOG_ROLE预定义的数据库角色,它提供了查看数据库系统表的权限;此外,增量阶段的时候,logminer session也依赖于该权限来查询表的结构。
    GRANT SELECT_CATALOG_ROLE TO flinkuser;
    
    --GRANT ANALYZE ANY是一个授权语句,用于授予用户分析任何用户拥有的所有表、索引、分区和表函数的权限;当表没有主键时,依赖该权限拿到表的惟一索引,并使用惟一索引替代主键。
    GRANT ANALYZE ANY TO flinkuser;

    开启日志归档

    即开启产生逻辑日志的行为,否则 Oracle 无法正确产生 logs 部分,这样的话无法进行增量数据同步。
    1. 使用 DBA 账号连接。
    sqlplus sys/password@host:port/SID AS SYSDBA
    2. 开启日志归档不开启无法读取增量数据
    alter 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;
    
    Notes:开启日志归档需要数据库重启,并且需要占用磁盘空间
    3. 检测是否已开启。
    -- Should now "Database log mode: Archive Mode"
    archive log list;
    4. 开启 supplemental log
    不开启在 Update 中,读取到的未更新字段均为空。
    -- Enable supplemental logging for a specific table:
    ALTER TABLE inventory.customers ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    或者可以全局打开:
    -- Enable supplemental logging for database
    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
    5. Create Tablespace
    建议为实时同步用户创建单独的表空间,也可以复用已有的表空间。
    CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/SID/logminer_tbs.dbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE 2048M;
    

    授予通过 logminer 读取日志的权限

    --特殊的权限授予语句,它表示授予用户对V$DATABASE视图的SELECT权限,主要用于检查数据库的归档日志是否开启(LOG_MODE),以及获取当前数据库的SCN位点。
    GRANT SELECT ON V_$DATABASE to flinkuser;
    
    --EXECUTE_CATALOG_ROLE是一个预定义的角色,它主要提供了允许logminer将字典写入binlog的能力,通过这种方式将表结构的变化也记录到逻辑日志中。
    GRANT EXECUTE_CATALOG_ROLE TO flinkuser;
    
    --允许用户通过LOGMINING组件来读取数据
    GRANT LOGMINING TO flinkuser;
    
    --EXECUTE ON DBMS_LOGMNR 权限是用于授予用户能够执行DBMS_LOGMNR包中的程序的权限。DBMS_LOGMNR包用于在数据库日志文件中分析和提取变更数据。
    GRANT EXECUTE ON DBMS_LOGMNR TO flinkuser;
    
    --GRANT EXECUTE ON DBMS_LOGMNR_D 是一个授权语句,它授予用户对DBMS_LOGMNR_D包的执行权限。DBMS_LOGMNR_D是Oracle提供的包,用于在数据库级别上分析在线和归档的重做日志文件
    GRANT EXECUTE ON DBMS_LOGMNR_D TO flinkuser;
    
    --Logminer的数据查询接口是由一组系统提供的视图组成的,需要从logminer中读取数据的话,需要给访问以下视图的权限。
    GRANT SELECT ON V_$LOG TO flinkuser;
    GRANT SELECT ON V_$LOG_HISTORY TO flinkuser;
    GRANT SELECT ON V_$LOGMNR_LOGS TO flinkuser;
    GRANT SELECT ON V_$LOGMNR_CONTENTS TO flinkuser;
    GRANT SELECT ON V_$LOGMNR_PARAMETERS TO flinkuser;
    GRANT SELECT ON V_$LOGFILE TO flinkuser;
    GRANT SELECT ON V_$ARCHIVED_LOG TO flinkuser;
    GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO flinkuser;
    
    exit;

    整库来源配置

    数据来源设置

    
    
    
    参数
    说明
    数据来源
    选择需要同步的 Oracle 数据源
    来源表
    根据业务需求,选择“所有库表”、“指定表”、“指定库”
    所有库表:监控数据源下所有库。任务运行期间新增库、表默认将同步至目标端
    指定表:仅同步指定表
    指定库:监控指定库和 schema,同步 schema 下所有或符合规则的表
    读取模式
    全量 + 增量:数据同步分为全量和增量同步阶段,全量阶段完成后任务进入增量阶段。全量阶段将同步库内历史数据,增量阶段从任务启动后 binlog cdc 的位点开始同步。
    增量:仅从任务启动后的 binlog cdc位点开始同步数据。
    一致性语义
    仅代表读取端的一致性语义。支持 At-least-once 和 Exactly-once。
    At-least-once:数据可能存在重复读取,依赖目标端支持去重来保证数据的一致性。适用于全量阶段数据量大且使用非数值型主键、对同步性能要求高的场景。
    Exactly-once:数据严格只读取一次,性能上有一定损失,不支持无主键且无唯一索引列的表。适用于源表有数值型主键或唯一索引列的通用场景。
    当前版本两种模式状态不兼容,任务提交后如果修改模式,不支持带状态重启。
    高级设置(可选)
    可根据业务需求配置参数
    说明:
    若要监控 Oracle 端表字段变更,数据源请勿配置 system/sys 两个账号,否则所有表(包括新增表)都需要开启日志才能进行同步。
    开启命令:
    ALTER TABLE SCHEMA_NAME.TBALE_NAME ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS

    单表读取节点配置

    1. 在数据集成页面左侧目录栏单击实时同步。
    2. 在实时同步页面上方选择单表同步新建(可选择表单和画布模式)并进入配置页面。
    
    
    
    参数
    描述
    数据源
    选择需要同步的表所在数据源。
    支持选择、或者手动输入需读取的库名称。
    默认将数据源绑定的数据库作为默认库,其他数据库需手动输入库名称。
    当数据源网络不联通导致无法直接拉取库信息时,可手动输入数据库名称。在数据集成网络连通的情况下,仍可进行数据同步。
    Schema
    支持选择、或者手动输入需读取该数据源下可用的 Schema。
    支持选择、或者手动输入需读取的表名称。
    读取模式
    全量 + 增量:数据同步分为全量和增量同步阶段,全量阶段完成后任务进入增量阶段。全量阶段将同步库内历史数据,增量阶段从任务启动后 binlog cdc 的位点开始同步。
    仅增量:仅从任务启动后的 binlog cdc 位点开始同步数据。
    一致性语义
    仅代表读取端的一致性语义。支持 At-least-once 和 Exactly-once。
    At-least-once:数据可能存在重复读取,依赖目标端支持去重来保证数据的一致性。适用于全量阶段数据量大且使用非数值型主键、对同步性能要求高的场景。
    Exactly-once:数据严格只读取一次,性能上有一定损失,不支持无主键且无唯一索引列的表。适用于源表有数值型主键或唯一索引列的通用场景。
    当前版本两种模式状态不兼容,任务提交后如果修改模式,不支持带状态重启。
    高级设置
    (选填)
    可根据业务需求配置参数。

    单表写入节点配置

    1. 在数据集成页面左侧目录栏单击实时同步。
    2. 在实时同步页面上方选择单表同步新建(可选择表单和画布模式)并进入配置页面。
    
    
    
    参数
    说明
    数据源
    需要写入的 Oracle 数据源。
    支持选择、或者手动输入需写入的库名称
    默认将数据源绑定的数据库作为默认库,其他数据库需手动输入库名称。
    当数据源网络不联通导致无法直接拉取库信息时,可手动输入数据库名称。在数据集成网络连通的情况下,仍可进行数据同步。
    Schema
    支持选择、或者手动输入需要写入的 Oracle 数据模式。
    支持选择、或者手动输入需写入的表名称。
    当数据源网络不联通导致无法直接拉取表信息时,可手动输入表名称。在数据集成网络连通的情况下,仍可进行数据同步。
    主键
    选择一个字段作为写入表的主键。
    高级设置(选填)
    可根据业务需求配置参数。

    日志采集写入节点

    
    
    
    参数
    说明
    数据源
    选择当前项目中可用的 Oracle 数据源。
    库/表
    选择该数据源中对应的库表。
    主键
    选择一个字段作为数据表主键。
    高级设置(可选)
    可根据业务需求配置参数。

    数据类型转换支持

    读取

    Oracle 读取支持的数据类型及转换对应关系如下(在处理 Oracle 时,会先将 Oracle 数据源的数据类型和数据处理引擎的数据类型做映射):
    Oracle 类型
    内部类型
    NUMBER(p, s <= 0), p - s < 3
    TINYINT
    NUMBER(p, s <= 0), p - s < 5
    SMALLINT
    NUMBER(p, s <= 0), p - s < 10
    INT
    NUMBER(p, s <= 0), p - s < 19
    BIGINT
    NUMBER(p, s <= 0), 19 <= p - s <= 38
    DECIMAL(p - s, 0)
    NUMBER(p, s > 0)
    DECIMAL(p, s)
    NUMBER(p, s <= 0), p - s > 38
    STRING
    FLOAT,BINARY_FLOAT
    FLOAT
    DOUBLE PRECISION,BINARY_DOUBLE
    DOUBLE
    NUMBER(1)
    BOOLEAN
    DATE,TIMESTAMP [(p)]
    TIMESTAMP [(p)] [WITHOUT TIMEZONE]
    TIMESTAMP [(p)] WITH TIME ZONE
    TIMESTAMP [(p)] WITH TIME ZONE
    TIMESTAMP [(p)] WITH LOCAL TIME ZONE
    TIMESTAMP_LTZ [(p)]
    CHAR(n),NCHAR(n),NVARCHAR2(n),VARCHAR(n),VARCHAR2(n),CLOB,NCLOB,XML 类型
    STRING
    BLOB,ROWID
    BYTES
    INTERVAL DAY TO SECOND,INTERVAL YEAR TO MONTH
    BIGINT

    写入

    Oracle 写入支持的数据类型及转换对应关系如下:
    内部类型
    Oracle 类型
    FLOAT
    BINARY_FLOAT
    DOUBLE
    BINARY_DOUBLE
    DECIMAL(p, s)
    SMALLINT,FLOAT(s),DOUBLE PRECISION,REAL,NUMBER(p, s)
    DATE
    DATE
    DECIMAL(20, 0)
    -
    FLOAT
    REAL,FLOAT4
    DOUBLE
    FLOAT8,DOUBLE PRECISION
    DECIMAL(p, s)
    NUMERIC(p, s),DECIMAL(p, s)
    BOOLEAN
    BOOLEAN
    DATE
    DATE
    TIMESTAMP [(p)][WITHOUT TIMEZONE]
    TIMESTAMP [(p)]WITHOUT TIMEZONE
    STRING
    CHAR(n),VARCHAR(n),CLOB(n)
    BYTES
    RAW(s),BLOB
    ARRAY
    -
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持