高效数据移动指南 | 如何快速实现数据库 Oracle 到 Apache Doris 的数据同步?
在现代企业中,数据无处不在,贯穿于各个业务环节和系统之间。无论是跨系统的数据集成、多地域的数据协同,还是实时应用的数据同步,数据的一致性和及时性都至关重要。在数字化转型的过程中,如何确保不同系统、地域、设备之间的数据同步,成为了企业面临的重要挑战。
本专题将基于实践经验,从常见需求入手,为大家介绍热门数据源与数据目标之间的数据同步(全量/增量)如何实现?了解如何快速搭建数据管道,实现数据的高效迁移与无缝同步。
>>> 本文教程为:Oracle → Apache Doris 的数据同步任务。
在实际应用中,数据同步涉及诸多场景,如容灾备份、应用改造/替代、数据库版本升级/回退、数据库替代、业务分流等,不同的场景在数据流向、同步需求、数据处理等方面会有不同的需求,需要针对性地选择迁移工具和方案。
以 Oracle 到 Apache Doris 的数据同步需求为例,主要挑战在于数据类型的兼容性、增量数据捕获、以及高并发和大数据量处理等问题。首先,二者支持的数据类型不同,尤其是 Oracle 的复杂类型如 BLOB 和 CLOB,往往需要类型转换或定制处理;其次,作为同步场景的关键环节,Oracle 的增量数据捕获通常依赖 LogMiner 或 GoldenGate,这在同步大量数据时可能会影响效率。同时,事务一致性也是需要关注的重点,确保同步过程中的数据准确性。为优化同步性能,需合理设置批量处理和数据切分策略,降低源数据库压力并提升 Doris 导入效率。
一、什么是 Oracle?
RDBMS 是由甲骨文公司推出的一款关系型数据库管理系统。它是数据库领域一直处于领先地位的产品,具有强稳定性和可移植性,适用于各类大、中、小微机环境。Oracle 数据库系统是世界上流行的关系数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。
优势
高性能:具有高度优化的 SQL 引擎,能够处理大量数据和复杂查询。
可扩展性:支持分布式数据库架构,可以轻松地将数据分布在多个服务器上,以提高性能和可靠性。
安全性:提供了严格的访问控制和加密技术,确保数据的安全性和隐私。
兼容性:支持多种操作系统和硬件平台,可以在各种环境中运行。
可靠性:具有高度可靠的故障恢复功能,可以在系统故障时保护数据的完整性和一致性。
并发控制:支持多用户并发访问,可以有效地处理多个事务的同时进行。
大型数据处理:可以处理大量数据,支持分区表、分区索引等特性,以提高数据处理效率。
二、什么是 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 本地部署版)
版本指路:
① 准备工作(作为源库)
数据源:Oracle
以具有 DBA 权限的用户身份登录 Oracle 数据库。
依次执行下述格式的命令,创建用于数据复制/转换任务的用户。
Oracle 标准模式
CREATE USER username IDENTIFIED BY password;
username:用户名,当 Oracle 处于多租户模式下时,用户名需增加
C##
前缀。password:密码。
Oracle 多租户模式
username:用户名,当 Oracle 处于多租户模式下时,用户名需增加
C##
前缀。password:密码。
为刚创建的账号授予权限,您也可以基于业务需求自定义权限控制。当需要读取全量+增量数据时:
*提示:当 Oracle 版本为 12c 及以上时,您还需要执行
GRANT LOGMINING TO username;
格式的命令授予LOGMINING
权限。
如果您需要获取源库的数据变更以实现增量同步,您还需要以 DBA 身份登录数据库完成下述数据库设置。
a. 开启数据库归档模式(ARCHIVELOG),由于涉及重启数据库,请在业务低峰期操作。
*提示:您也可以执行
SELECT log_mode FROM v$database;
命令来查看是否已开启该功能,返回结果为 ARCHIVELOG 表示已开启,可跳过本步骤。
b. 开启补充日志(Supplemental Logging)。
*提示:如日志磁盘存储空间相对充裕,可执行
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
命令开启库级的全补充日志,简化操作流程。
c. 如存在无主键表,您还需要选择执行下述命令,为单个表或所有表开启全补充日志(full supplemental logging)。
*提示:如果 Oracle 处于多租户模式,推荐为指定的容器开启,即在执行上述命令前先执行
ALTER SESSION SET CONTAINER=PDB名称;
格式的命令,将更改应用于容器。
d. 提交更改。
e. 如果 Oracle 处于多租户模式,您还需要执行下述命令打开可插拔数据库。
数据目标:Doris
登录 Doris 数据库,执行下述格式的命令,创建用于数据同步/开发任务的账号。
username:用户名。
password:密码。
host:允许该账号登录的主机,百分号(%)表示允许任意主机。
示例:创建一个名为 tapdata 的账号。
为刚创建的账号授予权限,您也可以基于业务需求设置更精细化的权限控制。
*提示
请更换上述命令中的信息:
catalog_name:数据目录名称,默认名称为 internal,可以通过 SHOW CATALOGS 命令查看已创建的数据目录。
database_name:要授予权限的数据库名称。
username:用户名。
② 创建 Oracle 的连接
进入 TapData 控制台,在左侧导航栏,单击连接管理。
单击页面右侧的创建,在弹框中,搜索并选择 Oracle。
在跳转到的页面,根据下述说明填写 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 个,则刷新将在您指定的时间每天进行。
单击连接测试,测试通过后单击保存:
*提示:如提示连接测试失败,请根据页面提示进行修复。
③ 创建 Doris 的连接
参照 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 秒更新一次其中的数据(数据库账号需具备相关权限),用于数据源连接与任务的健康度监测,更多介绍,见通过心跳表监测数据同步链路。
测试 Doris 的连接:
④ 创建数据复制/开发任务
左侧导航栏点击数据复制,并点击右侧创建:
进入 DAG 页面,构建数据复制任务,通过拖拉拽的方式添加源与目标节点,并连接源与目标
单击源与目标节点,即可按需对二者进行设置:
保存任务
⑤ 任务启动与监控
启动任务,任务全量同步正常运行:
增量同步开启
以上,便是借助 TapData 快速实现数据库 Oracle 到 Doris 的全、增量同步的模拟教程。
后续,我们还将持续输出本专题内容,欢迎关注 TapData 官方公众号,了解更多。
【推荐阅读】
离散制造 vs 流程制造:锚定精准制造未来,从装配线到化学反应,实时数据集成在制造业案例中的多维应用
高效数据移动指南 | 如何快速实现数据库 MySQL 到 MongoDB 的数据同步?
Sybase「退役」在即,某公共卫生机构如何实现 SAP Sybase 到 PostgreSQL 的持续、无缝数据迁移?
评论