头图

在现代企业中,数据无处不在,贯穿于各个业务环节和系统之间。无论是跨系统的数据集成、多地域的数据协同,还是实时应用的数据同步,数据的一致性和及时性都至关重要。在数字化转型的过程中,如何确保不同系统、地域、设备之间的数据同步,成为了企业面临的重要挑战。

本专题将基于实践经验,从常见需求入手,为大家介绍热门数据源与数据目标之间的数据同步(全量/增量)如何实现?了解如何快速搭建数据管道,实现数据的高效迁移与无缝同步。

本文教程为:Oracle → Apache Doris 的数据同步任务。

在实际应用中,数据同步涉及诸多场景,如容灾备份、应用改造/替代、数据库版本升级/回退、数据库替代、业务分流等,不同的场景在数据流向、同步需求、数据处理等方面会有不同的需求,需要针对性地选择迁移工具和方案。

以 Oracle 到 Apache Doris 的数据同步需求为例,主要挑战在于数据类型的兼容性、增量数据捕获、以及高并发和大数据量处理等问题。首先,二者支持的数据类型不同,尤其是 Oracle 的复杂类型如 BLOB 和 CLOB,往往需要类型转换或定制处理;其次,作为同步场景的关键环节,Oracle 的增量数据捕获通常依赖 LogMiner 或 GoldenGate,这在同步大量数据时可能会影响效率。同时,事务一致性也是需要关注的重点,确保同步过程中的数据准确性。为优化同步性能,需合理设置批量处理和数据切分策略,降低源数据库压力并提升 Doris 导入效率。

一、什么是 Oracle?

Oracle RDBMS 是由甲骨文公司推出的一款关系型数据库管理系统。它是数据库领域一直处于领先地位的产品,具有强稳定性和可移植性,适用于各类大、中、小微机环境。Oracle 数据库系统是世界上流行的关系数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。

优势

  • 高性能:具有高度优化的 SQL 引擎,能够处理大量数据和复杂查询。
  • 可扩展性:支持分布式数据库架构,可以轻松地将数据分布在多个服务器上,以提高性能和可靠性。
  • 安全性:提供了严格的访问控制和加密技术,确保数据的安全性和隐私。
  • 兼容性:支持多种操作系统和硬件平台,可以在各种环境中运行。
  • 可靠性:具有高度可靠的故障恢复功能,可以在系统故障时保护数据的完整性和一致性。
  • 并发控制:支持多用户并发访问,可以有效地处理多个事务的同时进行。
  • 大型数据处理:可以处理大量数据,支持分区表、分区索引等特性,以提高数据处理效率。

二、什么是 Apache Doris?

Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即时查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。

优势

  • 性能优异:自带高效的列式存储引擎,具备高压缩比和低扫描量。支持丰富的索引结构、分区分桶裁剪、向量化执行引擎以及智能物化视图技术,单节点可支持上千 QPS,优化查询性能。
  • 简单易用:支持标准 ANSI SQL语法,包括复杂查询功能(如Join、子查询、窗口函数),兼容 MySQL 协议,支持 UDF/UDAF 自定义函数,并可与 BI 工具无缝集成。
  • 架构精简:系统只有Frontend(FE)和Backend(BE)两个模块,支持无第三方组件的分布式集群部署,易于扩展和管理,最高可扩展至数百个节点,存储超 10PB 数据。
  • 稳定可靠:支持数据多副本存储,集群具备自愈功能,节点扩容和均衡自动化,无需停止服务,即可实现扩容、缩容和故障恢复。
  • 生态丰富:提供丰富的数据同步方式,支持多种数据源加载和访问,如 Hadoop、Flink、Kafka、MySQL、PostgreSQL 等,并可被上游数据应用读取进行展示与分析。

三、方案选择:如何实现 Oracle → Apache Doris 的数据同步?

实现 Oracle 到 Doris 的数据同步的常见方式包括,通过外部表同步数据或使用自动化工具:

通过外部表同步数据

INSERT INTO 支持将 Doris 查询的结果导入到另一个表中。INSERT INTO 是一个同步导入方式,执行导入后返回导入结果。可以通过请求的返回判断导入是否成功。INSERT INTO 可以保证导入任务的原子性,要么全部导入成功,要么全部导入失败。

主要的 Insert Into 命令包含以下两种:

  • INSERT INTO tbl SELECT ...
  • INSERT INTO tbl (col1, col2, ...) VALUES (1, 2, ...), (1,3, ...)

在使用 INSERT INTO 时,需要通过 MySQL 协议发起导入作业给 FE 节点,FE 会生成执行计划,执行计划中前部是查询相关的算子,最后一个是 OlapTableSink 算子,用于将查询结果写到目标表中。执行计划会被发送给 BE 节点执行,Doris 会选定一个节点做为 Coordinator 节点,Coordinator 节点负责接受数据并分发数据到其他节点上。

但在一些场景下,该方案也存在一定的限制,例如:手动操作复杂、实时性不足以及对大规模数据的性能瓶颈。虽然支持批量导入并具备原子性,但无法处理高并发、实时增量同步和复杂事务的一致性,难以满足大数据环境下的同步需求。相比自动化工具,此方法更适合小规模或简单场景。

自动化工具

例如选择使用 TapData 这样的自动化数据集成平台,只需三步就可以在几分钟内开启所需的数据同步任务:

  • 将 Oracle 设置为源连接
  • 将 Doris 设置为目标连接
  • 定义要传输的数据以及传输频率

TapData 内置 100+ 数据连接器,提供了友好的用户界面和强大的实时同步功能,无需编写复杂的代码即可轻松实现数据的迁移和同步。这样不仅节省了大量的时间和人力成本,还能保障数据同步过程的稳定性和可靠性。对于那些希望快速、高效地完成 Oracle 到 Doris 数据同步的企业和开发者来说,这样的便捷工具无疑是一个理想的选择。

四、TapData 高效同步完整教程

完成 TapData Agent 部署后,即可跟随以下教程在 TapData 中添加源与目标的数据连接(支持版本:Oracle 9i、10g、11g、12c、18c、19c+;Dorix 1.x、2.x),并快速构建数据管道。(*涉及工具版本为 TapData 本地部署版)

版本指路:
>>> 点击登录 TapData Cloud
>>> 申请试用 TapData 本地部署版

① 准备工作(作为源库)

数据源:Oracle

  1. 以具有 DBA 权限的用户身份登录 Oracle 数据库。
  2. 依次执行下述格式的命令,创建用于数据复制/转换任务的用户。
  • Oracle 标准模式
CREATE USER username IDENTIFIED BY password;
  • username:用户名,当 Oracle 处于多租户模式下时,用户名需增加 C## 前缀。
  • password:密码。
  • Oracle 多租户模式
-- 切换至根容器
ALTER SESSION SET CONTAINER=cdb$root;

-- 创建用户
CREATE USER username IDENTIFIED BY password CONTAINER=all;
  • username:用户名,当 Oracle 处于多租户模式下时,用户名需增加 C## 前缀。
  • password:密码。
  1. 为刚创建的账号授予权限,您也可以基于业务需求自定义权限控制。当需要读取全量+增量数据时:
-- 替换下述命令中的 username 为真实的用户名
GRANT CREATE SESSION,
      ALTER SESSION,
      EXECUTE_CATALOG_ROLE,
      SELECT ANY DICTIONARY,
      SELECT ANY TRANSACTION,
      SELECT ANY TABLE
TO username;
*提示:当 Oracle 版本为 12c 及以上时,您还需要执行 GRANT LOGMINING TO username; 格式的命令授予 LOGMINING 权限。
  1. 如果您需要获取源库的数据变更以实现增量同步,您还需要以 DBA 身份登录数据库完成下述数据库设置。

    a.开启数据库归档模式(ARCHIVELOG),由于涉及重启数据库,请在业务低峰期操作。

    *提示:您也可以执行 SELECT log_mode FROM v$database; 命令来查看是否已开启该功能,返回结果为 ARCHIVELOG 表示已开启,可跳过本步骤。
-- 关闭数据库
SHUTDOWN IMMEDIATE;

-- 启动并挂载数据库
STARTUP MOUNT;

-- 开启归档并打开数据库
ALTER DATABASE archivelog;
ALTER DATABASE OPEN;

b.开启补充日志(Supplemental Logging)。

-- 为库级开启主键补充日志,如需关闭,将 ADD 替换为 DROP
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;


-- 为单个表开启主键补充日志,需替换命令中 Schema 名称和 表名称
ALTER TABLE Schema名称.表名称 ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
*提示:如日志磁盘存储空间相对充裕,可执行 ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; 命令开启库级的全补充日志,简化操作流程。

c.如存在无主键表,您还需要选择执行下述命令,为单个表或所有表开启全补充日志(full supplemental logging)。

-- 为单个表开启,需替换命令中 Schema名称和表名称
ALTER TABLE Schema名称.表名称 ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

-- 为所有表开启
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
*提示:如果 Oracle 处于多租户模式,推荐为指定的容器开启,即在执行上述命令前先执行 ALTER SESSION SET CONTAINER=PDB名称; 格式的命令,将更改应用于容器。

d.提交更改。
ALTER SYSTEM SWITCH LOGFILE;

e.如果 Oracle 处于多租户模式,您还需要执行下述命令打开可插拔数据库。
ALTER PLUGGABLE DATABASE ALL OPEN;

数据目标:Doris

  1. 登录 Doris 数据库,执行下述格式的命令,创建用于数据同步/开发任务的账号。
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
  • username:用户名。
  • password:密码。
  • host:允许该账号登录的主机,百分号(%)表示允许任意主机。

示例:创建一个名为 tapdata 的账号。

CREATE USER 'tapdata'@'%' IDENTIFIED BY 'Tap@123456';
  1. 为刚创建的账号授予权限,您也可以基于业务需求设置更精细化的权限控制。
-- 请根据下述提示更换 catalog_name、database_name 和 username
GRANT SELECT_PRIV, ALTER_PRIV, CREATE_PRIV, DROP_PRIV, LOAD_PRIV ON catalog_name.database_name.* TO 'username'@'%';

*提示
请更换上述命令中的信息:

  • catalog_name:数据目录名称,默认名称为 internal,可以通过 SHOW CATALOGS 命令查看已创建的数据目录。
  • database_name:要授予权限的数据库名称。
  • username:用户名。

② 创建 Oracle 的连接

  1. 进入 TapData 控制台,在左侧导航栏,单击连接管理
  2. 单击页面右侧的创建,在弹框中,搜索并选择 Oracle。
  3. 在跳转到的页面,根据下述说明填写 Oracle 连接信息:

  • 连接信息设置

    • 连接名称:填写具有业务意义的独有名称。
    • 连接类型:支持将 Oracle 作为源或目标库。
    • 连接方式:可选择通过 SID 或 Service Name 连接。
    • 数据库地址:数据库连接地址。
    • 端口:数据库的服务端口。
    • SID/Service Name:填写 SID 或 Service Name 信息。
    • Schema:Schema 名称,即一个连接对应一个 Schema,如需连接多个 Schema 则需创建多个数据连接。
    • 其他连接串参数:额外的连接参数,默认为空。
    • 账号:数据库的账号。
    • 密码:数据库账号对应的密码。
    • 日志插件:基于业务需求选择,默认为 logMiner,相关介绍,见增量日志获取方式介绍
  • 高级设置

    • 加载表注释:选择是否加载表注释信息(默认关闭),帮助快速识别表的业务意义,当表注释较多时可能影响模型加载效率。
    • 多租户模式:如 Oracle 为多租户模式,需打开该开关并填写 PDB 信息。
    • 使用 SSL:选择是否开启 SSL 连接数据源,可进一步提升数据安全性,开启该功能后还需要上传 SSL 证书文件并填写证书密码,相关文件已在开启 SSL 连接中获取。
    • 时间类型的时区:默认为 0 时区,您也可以根据业务需求手动指定,当配置为其他时区时,会影响不带时区的字段,例如 DATE、TIMESTAMP。
    • 套接字超时时长:设置此参数,以重试机制来避免 LogMiner 执行自动挖掘增量变更时,因意外情况(如套接字交互超时)而形成的僵尸连接,默认值为 0 表示不设置。
    • 共享挖掘挖掘源库的增量日志,可为多个任务共享同一源库的增量日志采集进程,从而避免重复读取,从而最大程度上减轻增量同步对源库的压力,开启该功能后还需要选择一个外存用来存储增量日志信息。
    • 包含表:默认为全部,您也可以选择自定义并填写包含的表,多个表之间用英文逗号(,)分隔。
    • 排除表:打开该开关后,可以设定要排除的表,多个表之间用英文逗号(,)分隔。
    • Agent 设置:默认为平台自动分配,您也可以手动指定 Agent。
    • 模型加载时间:如果数据源中的模型数量少于10000个,则每小时更新一次模型信息。但如果模型数量超过10000个,则刷新将在您指定的时间每天进行。

4.单击连接测试,测试通过后单击保存

*提示:如提示连接测试失败,请根据页面提示进行修复。

③ 创建 Doris 的连接

  1. 参照 Oracle 连接创建流程,完成 Doris 连接配置信息填写,添加数据目标:

  • 基本设置

    • 连接名称:填写具有业务意义的独有名称。
    • 连接类型:支持将 Doris 作为源或目标库。
    • 数据库地址:Doris 的连接地址。
    • 端口:Doris 的查询服务端口,默认端口为 9030。
    • 开启 HTTPS:选择是否启用无证书的 HTTPS 连接功能。
    • HTTP/HTTPS 接口地址:FE 服务的 HTTP/HTTPS 协议访问地址,包含地址和端口信息,默认端口为 8030。
    • 数据库名称:一个连接对应一个数据库,如有多个数据库则需创建多个数据连接。
    • 账号、密码:分别填写数据库的账号和密码。
  • 高级设置

    • Doris 目录:Doris 的目录,其层级在数据库之上,如使用默认目录可置空,更多介绍,见多源数据目录。
    • 其他连接参数:额外的连接参数,默认为空。
    • 时间类型的时区:默认为数据库所用的时区,您也可以根据业务需求手动指定。
    • Agent 设置:默认为平台自动分配,您也可以手动指定 Agent。
    • 模型加载时间:当数据源中模型数量小于 10,000 时,每小时刷新一次模型信息;如果模型数据超过 10,000,则每天按照您指定的时间刷新模型信息。
    • 开启心跳表:当连接类型选择为源头和目标、源头时,支持打开该开关,由 Tapdata 在源库中创建一个名为 _tapdata_heartbeat_table 的心跳表并每隔 10 秒更新一次其中的数据(数据库账号需具备相关权限),用于数据源连接与任务的健康度监测,更多介绍,见通过心跳表监测数据同步链路。
  1. 测试 Doris 的连接:

④ 创建数据复制/开发任务

  1. 左侧导航栏点击数据复制,并点击右侧创建:

  1. 进入 DAG 页面,构建数据复制任务,通过拖拉拽的方式添加源与目标节点,并连接源与目标

  1. 单击源与目标节点,即可按需对二者进行设置:

  1. 保存任务

⑤ 任务启动与监控

  1. 启动任务,任务全量同步正常运行:

  1. 增量同步开启

以上,便是借助 TapData 快速实现数据库 Oracle 到 Doris 的全、增量同步的模拟教程。

后续,我们还将持续输出本专题内容,欢迎关注 TapData 官方公众号,了解更多。

推荐阅读


Tapdata钛铂
6 声望1 粉丝

钛铂数据(Tapdata)是企业数据即服务DaaS解决方案领导者,致力于打造一站式实时数据融合平台,帮助企业在面临复杂的数据孤岛问题时,通过简单、高效的方式实现从数据孤岛系统的实时获取、处理和服务,加速企业数...