计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机服务器 CPH
Huawei Cloud EulerOS
网络
虚拟私有云 VPC
弹性公网IP EIP
虚拟专用网络 VPN
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
VPC终端节点 VPCEP
云连接 CC
企业路由器 ER
企业交换机 ESW
全球加速 GA
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
边缘安全 EdgeSec
威胁检测服务 MTD
CDN与智能边缘
内容分发网络 CDN
CloudPond云服务
智能边缘云 IEC
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
云搜索服务 CSS
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
数据可视化 DLV
数据湖工厂 DLF
湖仓构建 LakeFormation
企业应用
云桌面 Workspace
应用与数据集成平台 ROMA Connect
云解析服务 DNS
专属云
专属计算集群 DCC
IoT物联网
IoT物联网
设备接入 IoTDA
智能边缘平台 IEF
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
国际站常见问题
ICP备案
我的凭证
支持计划
客户运营能力
合作伙伴支持计划
专业服务
区块链
区块链服务 BCS
Web3节点引擎服务 NES
解决方案
SAP
高性能计算 HPC
视频
视频直播 Live
视频点播 VOD
媒体处理 MPC
实时音视频 SparkRTC
数字内容生产线 MetaStudio
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
存储容灾服务 SDRS
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
专属分布式存储服务 DSS
容器
云容器引擎 CCE
容器镜像服务 SWR
应用服务网格 ASM
华为云UCS
云容器实例 CCI
管理与监管
云监控服务 CES
统一身份认证服务 IAM
资源编排服务 RFS
云审计服务 CTS
标签管理服务 TMS
云日志服务 LTS
配置审计 Config
资源访问管理 RAM
消息通知服务 SMN
应用运维管理 AOM
应用性能管理 APM
组织 Organizations
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
应用身份管理服务 OneAccess
数据库
云数据库 RDS
文档数据库服务 DDS
数据管理服务 DAS
数据复制服务 DRS
云数据库 GeminiDB
云数据库 GaussDB
分布式数据库中间件 DDM
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
人脸识别服务 FRS
图引擎服务 GES
图像识别 Image
内容审核 Moderation
文字识别 OCR
AI开发平台ModelArts
图像搜索 ImageSearch
对话机器人服务 CBS
华为HiLens
视频智能分析服务 VIAS
语音交互服务 SIS
应用中间件
分布式缓存服务 DCS
API网关 APIG
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
多活高可用服务 MAS
事件网格 EG
企业协同
华为云会议 Meeting
云通信
消息&短信 MSGSMS
云生态
合作伙伴中心
云商店
开发者工具
SDK开发指南
API签名指南
Terraform
华为云命令行工具服务 KooCLI
其他
产品价格详情
系统权限
管理控制台
客户关联华为云合作伙伴须知
消息中心
公共问题
开发与运维
应用管理与运维平台 ServiceStage
软件开发生产线 CodeArts
需求管理 CodeArts Req
部署 CodeArts Deploy
性能测试 CodeArts PerfTest
编译构建 CodeArts Build
流水线 CodeArts Pipeline
制品仓库 CodeArts Artifact
测试计划 CodeArts TestPlan
代码检查 CodeArts Check
代码托管 CodeArts Repo
云应用引擎 CAE
开天aPaaS
云消息服务 KooMessage
云手机服务 KooPhone
云空间服务 KooDrive

将Oracle同步到Kafka

更新时间:2024-04-15 GMT+08:00

支持的源和目标数据库

表1 支持的数据库

源数据库

目标数据库

  • 本地自建数据库(Oracle 10g、11g、12c、18c、19c、21c版本)
  • ECS自建数据库(Oracle 10g、11g、12c、18c、19c、21c版本)
  • Kafka

前提条件

  • 已登录数据复制服务控制台。
  • 满足实时同步支持的数据库类型和版本,详情请参见实时同步

使用建议

  • 数据库同步与环境多样性和人为操作均有密切关系,为了确保同步的平顺,建议您在进行正式的数据库同步之前进行一次演练,可以帮助您提前发现问题并解决问题。
  • 建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,避免同步对业务造成性能影响。

使用须知

在创建同步任务前,请务必阅读以下使用须知。

说明:
  • 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。
  • 连接源或目标数据库的账号密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。
表2 环境要求

类型名称

使用限制(DRS自动检查)

数据库权限设置

  • 源数据库端:
    • 12c及以上版本租户模式:

      12c及以上版本CDB数据库同步时,需要具有CREATE SESSION,SELECT ANY DICTIONARY,EXECUTE_CATALOG_ROLE,SELECT ANY TRANSACTION,LOGMINING权限,以及针对单表的SELECT权限(GRANT SELECT ON <userName.tbName> to drsUser;)。

    • 12c及以上版本PDB数据库同步时,除了需要具有CREATE SESSION,SELECT ANY DICTIONARY,EXECUTE_CATALOG_ROLE,SELECT ANY TRANSACTION,LOGMINING权限,以及针对单表的SELECT权限(GRANT SELECT ON <userName.tbName> to drsUser;),还需要具有CDB的CREATE SESSION,SELECT ANY DICTIONARY,EXECUTE_CATALOG_ROLE,SELECT ANY TRANSACTION,LOGMINING,SET CONTAINER(GRANT SET CONTAINER TO <userName> CONTAINER=ALL;)权限。
    • 12c及以上版本非租户模式:

      需要具有CREATE SESSION,SELECT ANY DICTIONARY,EXECUTE_CATALOG_ROLE,SELECT ANY TRANSACTION,LOGMINING权限,以及针对单表的SELECT权限(GRANT SELECT ON <userName.tbName> to drsUser;)。

    • 11g及以下版本数据库同步时,需要具有CREATE SESSION,SELECT ANY DICTIONARY,EXECUTE_CATALOG_ROLE,SELECT ANY TRANSACTION权限,以及针对单表的SELECT权限(GRANT SELECT ON <userName.tbName> to drsUser;)。
    • 增量同步时,源库Oracle需要开启日志归档模式和最小补充日志,所需同步表必须开启PK/UI或以ALL级别的补充日志,不限制库级或表级补充日志方式,如果只开启表级补充日志,重建或者RENAME表后需要重新设置;请确保以上配置在同步过程中始终保持开启状态。
    • 12c及以上版本不支持使用ORACLE_MAINTAINED=Y的用户账号进行增量同步(system/sys除外),因为该属性的账号无日志解析权限。

同步对象约束

  • 支持表的同步,其他数据库对象暂不支持。
  • 支持VARCHAR、VARCHAR2、NVARCHAR2、NUMBER、FLOAT、LONG、DATE、BINARY_FLOAT、BINARY_DOUBLE、CHAR、NCHAR、ROWID、TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE类型。
  • 不支持接入的列类型:GEOMETRY以及自定义类型。
  • 不支持同步但以过滤方式接入的列类型:NTERVAL_YEAR_TO_MONTH、INTERVAL_DAY_TO_SECOND、UROWID、BFILE、XML。
  • 支持同步但默认过滤的列类型:RAW、BLOB、 CLOB、NCLOB、LONG、LONG RAW。
  • 增量同步LOB类型仅支持BasicFiles属性,不支持SecureFiles属性,支持的LOB类型大小限10M以内。
  • 增量阶段源库为Oracle物理备库(PHYSICAL STANDBY)时不支持解析lob类型数据(无法生成数据字典),如果增量同步的表中出现lob类型会导致增量同步异常。
  • 增量阶段不支持Oracle字符集扩展的字符,标准字符集无法解析Oracle自定义扩展字符。
  • 不支持同步源库中的临时表。
  • 不支持默认值含有表达式的函数的表的同步。
  • 不支持同步源库中有虚拟列的表。
  • 如果Oracle中使用LOB类型各自的empty函数写入数据时,通过JDBC查询出来的值是空字符串,写入到目标库后是空字符串还是NULL取决于目标库对空字符串值的处理。

源数据库要求

  • 库名、表名不支持的字符有:非ASCII字符、“. ”、 “>”、 “<”、 “\”、 “`”、 “|”、 “,”、 “? ”、 “! ”、 “"”和 “'”。
  • 不支持选择源数据库的空库进行同步。
  • 源库为RAC时,不支持增加、减少节点数量。
  • 源库为RAC时,如果需要使用SCAN IP,需要drs node能够连接全部节点的VIP,否则无法通过连接检查。
  • 目前仅支持同步如下字符集:ZHS16GBK、AL32UTF8、UTF8、US7ASCII、WE8MSWIN1252、WE8ISO8859P1、WE8ISO8859P2、WE8ISO8859P4、WE8ISO8859P5、WE8ISO8859P7、WE8ISO8859P9、WE8ISO8859P13、WE8ISO8859P15。

目标数据库要求

  • 目标库为社区Kafka。

操作须知

  • 如有特殊字符,业务连接Oracle数据库使用的编码需和Oracle数据库服务端编码一致,否则目标库会出现乱码。
  • Oracle中实时同步到kafka后的字符集为UTF8。
  • Oracle归档日志文件大小必须大于单条数据最大值,避免单条数据日志跨文件(超过2个日志文件)导致的增量数据解析异常。
  • 对于Oracle RAC集群,建议使用SCAN IP+ SERVICE_NAMES方式创建任务,SCAN IP具有更强的容错性,更好的负载能力,更快的同步体验。
  • 源库为Oracle RAC时,如果需要使用SCAN IP配置DRS任务,需要保证SCAN IP、DRS节点的IP同时能与源库的所有VIP互通(Oracle内部机制),否则无法通过连通性检查。如果不使用SCAN IP,可以使用某一节点的VIP,这种情况下DRS日志解析只会在VIP指定的RAC节点上进行。
  • 如果源库为RAC,增量同步首次启动时所有RAC节点必须正常在线,否则增量启动会出现异常。
  • 如果源库为RAC,增量同步时,不支持增加、减少节点数量,避免导致增量同步异常(为保证数据的强一致性)。
  • 当使用PDB数据库同步时,由于Oracle LogMiner组件的限制,增量同步时必须打开全部PDB。
  • Oralce 12.2及以上版本,由于Oracle LogMiner组件的限制,增量同步不支持表名或列名超过30个字符。
  • 附加日志级别为all或者pk+ui。
  • 日志中未出现的列在传递的消息中不会出现,表示该列未更新。
  • 同步过程中,不允许删除连接源和目标数据库的用户的用户名、密码、权限,或修改目标数据库的端口号。
  • 同步过程中,禁止对Oracle源库做resetlogs操作,否则会导致数据无法同步且任务无法恢复。
  • 同步过程中,不支持LOB类型的rollback操作,否则会导致同步任务失败。
  • 同步过程中,不支持修改源数据库Oracle用户名(SCHEMA名),包括11.2.0.2之前版本通过修改USER$字典表方式及11.2.0.2之后通过ALTER USER username RENAME TO new_username修改SCHEMA名称的场景。
  • 增量同步时,不建议选择混合分区表,因为混合分区表中的外部分区数据变更不产生DML日志,DRS增量数据同步无法获取变更信息,会存在数据不一致的风险。
  • 单增量任务场景,不支持直接连PDB数据库,用户需要提供CDB的Service Name/SID。
  • 选择表级对象同步时,增量同步过程中不建议对表进行重命名操作。
  • 选择表级对象同步时,仅支持所有表同步到目标端的同一个Topic。
  • 支持表级DDL操作。
  • 任务再编辑增加新表时,请确保新增的表的事务都已提交,否则未提交的事务可能无法同步到目标库。建议在业务低峰期做增加表的操作。

操作步骤

  1. 在“实时同步管理”页面,单击“创建同步任务”。
  2. 在“同步实例”页面,填选任务名称、描述、同步实例信息,单击“开始创建”

    • 任务信息
      表3 任务和描述

      参数

      描述

      任务名称

      任务名称在4到50位之间,必须以字母开头,可以包含字母、数字、中划线或下划线,不能包含其他的特殊字符。

      描述

      描述不能超过256位,且不能包含! = < > & ' " \ 特殊字符。

    • 同步实例信息
      表4 同步实例信息

      参数

      描述

      数据流动方向

      选择“自建-自建”

      源数据库引擎

      选择“Oracle”

      目标数据库引擎

      选择“Kafka”

      网络类型

      此处以“公网网络”为示例。目前支持可选公网网络、VPC网络和VPN、专线网络。

      VPC

      选择可用的虚拟私有云。

      同步实例所在子网

      请选择同步实例所在的子网。也可以单击“查看子网”,跳转至“网络控制台”查看实例所在子网帮助选择。

      默认值为当前所选数据库实例所在子网,请选择有可用IP地址的子网。为确保同步实例创建成功,仅显示已经开启DHCP的子网。

      内网安全组

      请选择内网安全组。内网安全组限制实例的安全访问规则,加强安全访问。

      同步模式

      • 增量

        增量同步通过解析日志等技术,将源端产生的增量数据同步至目标端。

        无需中断业务,实现同步过程中源业务和数据库继续对外提供访问。

    • 任务类型
      表5 任务类型信息

      参数

      描述

      可用区

      DRS任务创建的可用区,选择跟源或目标库相同的可用区性能更优。

      DRS任务类型选择“双AZ”时,可用区分为“主可用区”和“备可用区”。

    说明:

    对于创建失败的任务,DRS默认保留3天,超过3天将会自动结束任务。

  3. 在“源库及目标库”页面,同步实例创建成功后,填选源库信息和目标库信息,单击“源库和目标库”处的“测试连接”,分别测试并确定与源库和目标库连通后,勾选协议,单击“下一步”

    表6 源库信息

    参数

    描述

    IP地址或域名

    源数据库的IP地址或域名。

    说明:

    对于RAC集群,建议使用scanip接入,提高访问性能。

    端口

    源数据库服务端口,可输入范围为1~65535间的整数。

    数据库服务名

    数据库服务名(Service Name/SID),客户端可以通过其连接到Oracle,具体查询方法请参照界面提示。

    PDB名称

    PDB同步仅在Oracle12c及以后的版本支持,该功能为选填项,当需要迁移PDB中的表时开启。

    PDB功能开启后,只能迁移该PDB中的表,并且需要提供CDB的service name/sid及用户名和密码,不需要PDB的用户名和密码。

    数据库用户名

    源数据库的用户名。

    数据库密码

    源数据库的用户名所对应的密码。

    SSL安全连接

    通过该功能,用户可以选择是否开启对迁移链路的加密。如果开启该功能,需要用户上传SSL CA根证书。

    说明:
    • 最大支持上传500KB的证书文件。
    • 如果不启用SSL安全连接,请自行承担数据安全风险。
    说明:

    源数据库的IP地址或域名、数据库用户名和密码,会被系统加密暂存,直至删除该迁移任务后自动清除。

    表7 目标库信息

    参数

    描述

    IP地址或域名

    目标数据库的IP地址或域名。

    安全协议

    支持四种认证方式的选择,PLAINTEXT、SSL、SASL_PLAINTEXT和SASL_SSL,详细说明可参考Kafka认证方式

  4. “设置同步”页面,选择Topic和同步对象,单击“下一步”

    表8 同步模式和对象

    参数

    描述

    同步DDL

    选择是否将DDL语句投递到Kafka中。如果选择同步DDL,在选择partition策略为按照主键hash时,因DDL中无主键值,DDL会按照表名hash后投递到topic中,其余情况下投递方式与partition策略一致。

    全列数据

    选择是否需要单行的数据完整,DRS增量通过解析源库日志实现,单行数据是否完整取决于日志中是否记录了所有列的值。

    如果需要全列数据,则需要源库打开ALL级别的补全日志让日志中记录单行数据所有列的信息。该选项联动任务预检查阶段对源库补全日志级别的校验,DRS增量同步对于补全日志最低的要求为表级PK/UI级别的补全日志,补全日志检查方法可参考源库Oracle补全日志检查方法

    同步Topic策略

    同步Topic策略,可选择

    • 集中投递到一个Topic:适合源库业务量不大的场景。
    • 按schema自动生成Topic名字:如果每个schema数据量很大,建议选择按schema自动生成Topic名字。
    • 按schema-表名自动生成Topic名字:如果每张表数据量很大,建议选择schema-表名自动生成Topic名字。

    Topic

    选择目标端需要同步到的Topic,同步Topic策略选择集中投递到一个Topic时可见。

    Topic名字格式

    Topic名字格式,同步Topic策略选择自动生成Topic名字时可见。

    由于Kafka的机制限制,Topic名字只能包含ASCII字符、"."、"_"及"-",如果超过该范围会导致创建Topic失败,任务异常。

    如果Topic名字格式中包含数据库对象名,请确保对象名的字符在Kafka topic命名机制内。

    Topic名字格式支持schema和tablename两个变量,其他字符都当做常量。分别用$schema$代替模式名,$tablename$代替表名。

    例如:配置成 $schema$-$tablename$时,如果以oracle为源,模式名为schema1,表名为tab1,则Topic名字为schema1-tab1。

    Partition个数

    同步Topic策略选择自动生成Topic名字时可见。

    用来设置topic的分区个数。每个topic都可以创建多个partition,越多的partition可以提供更高的吞吐量,越多的partition会消耗更多的资源,建议根据broker节点的实际情况来设置partition的数量。

    副本个数

    同步Topic策略选择自动生成Topic名字时可见。

    用来设置topic的副本数。每个topic可以有多个副本,副本位于集群中不同的broker上,副本的数量不能超过broker的数量,否则创建topic时会失败。

    同步到kafka partition策略

    同步到kafka partition策略。

    • 按schema.表名的hash值投递到不同Partition:适用于单表的查询场景,表内保序,表与表之间不保序,可以提高单表读写性能,推荐使用此选项。
    • 按主键的hash值投递到不同Partition:适用于一个表一个Topic的场景,避免该表都写到同一个分区,消费者可以并行从各分区获取数据。

      对于无主键表,如果选择“按主键的hash值投递都不同的partition”策略时,同步任务则会使用默认“schema.表名的hash值投递到不同的partition”的策略进行同步。

    • 按schema的hash值投递到不同Partition:适用于一个schema一个topic的场景,避免多个schema下的数据写到一个分区,消费者可以并行从各分区获取数据。
    • 全部投递到Partition 0:数据固定发送到Topic的0号分区,任务默认多线程发送数据,能够保证表级保序,表与表之间不保序,并发写入性能比较差,如果有强事务一致性要求,推荐选择此选项并找运维人员修改为单线程写Kafka或配置Topic策略按表名自动生成。

    投送到kafka的数据格式

    选择Oracle投送到kafka的数据格式。

    • Avro:可以显示Avro二进制编码,高效获取数据。
    • Json:为Json消息格式。

    详细格式可参考Kafka消息格式

    同步对象

    左侧框是源数据库对象,右侧框是已经选择的对象,同步对象支持表级同步、导入对象文件,您可以根据业务场景选择对应的数据进行同步。

    • 选择导入对象文件时,支持不同表同步到目标端不同的Topic,具体导入步骤和说明可参考导入同步对象
    • 使用导入对象功能时 ,同步Topic策略选择“集中投递到一个Topic”,才能使用对象名映射功能,否则会按Topic名字格式生成。
    说明:
    • 选择对象的时候支持对展开的库进行搜索,以便您快速选择需要的数据库对象。
    • 如果有切换源数据库的操作或源库同步对象变化的情况,请在选择同步对象前单击右上角的,以确保待选择的对象为最新源数据库对象。
    • 当对象名称包含空格时,名称前后的空格不显示,中间如有多个空格只显示一个空格。
    • 选择的同步对象名称中不能包含空格。

  5. “预检查”页面,进行同步任务预校验,校验是否可进行实时同步。

    • 查看检查结果,如有不通过的检查项,需要修复不通过项后,单击“重新校验”按钮重新进行任务预校验。
    • 预检查完成后,且所有检查项结果均通过时,单击“下一步”
      说明:

      所有检查项结果均通过时,如果存在请确认项,需要阅读并确认详情后才可以继续执行下一步操作。

  6. “任务确认”页面,设置同步任务的启动时间,并确认同步任务信息无误后,单击“启动任务”,提交同步任务。

    表9 任务启动设置

    参数

    描述

    启动时间

    同步任务的启动时间可以根据业务需求,设置为“立即启动”或“稍后启动”。

    说明:

    预计同步任务启动后,会对源数据库和目标数据库的性能产生影响,建议选择业务低峰期,合理设置同步任务的启动时间。

  7. 同步任务提交后,您可在“实时同步管理”页面,查看并管理自己的任务

    • 您可查看任务提交后的状态,状态请参见任务状态说明
    • 在任务列表的右上角,单击刷新列表,可查看到最新的任务状态。
    • 对于未启动、状态为配置中的任务,DRS默认保留3天,超过3天DRS会自动删除后台资源,当前任务状态不变。当用户再次配置时,DRS会重新申请资源,此时DRS任务IP会发生改变。

我们使用cookie来确保您的高速浏览体验。继续浏览本站,即表示您同意我们使用cookie。 详情

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容