Oracle到MySQL实时数据同步CloudCanal实战

简述

CloudCanal 2.1.0.x 版本开始支持 Oracle 作为源端的数据迁移同步能力,目前邀请测试中。

本文通过 Oracle 到 MySQL 的数据迁移同步案例简要介绍这个源端的能力。链路特点:

结构迁移、全量迁移、增量同步(数据)、数据校验俱全流程全自动化

此文章简要介绍如何快速构建一条长期稳定运行的 Oracle->MySQL 数据链路。

技术要点

将数据从 Oracle 中同步出来有两种方式可以选择

  • 物化视图日志
  • 使用 Redo 日志

权限问题

请确保添加的数据源账号可以访问如下 13 张表和 1 个函数 ,或者使用一个具有 DBA 权限的 Oracle 账号。

  • 表 SYS.DBA_USERS
  • 表 SYS.DBA_TABLES
  • 表 SYS.DBA_TAB_COLS
  • 表 SYS.DBA_TAB_COMMENTS
  • 表 SYS.DBA_COL_COMMENTS
  • 表 SYS.PRODUCT_COMPONENT_VERSION
  • 表 SYS.DBA_CONSTRAINTS
  • 表 SYS.DBA_CONS_COLUMNS
  • 表 SYS.DBA_INDEXES
  • 表 SYS.DBA_IND_COLUMNS
  • 表 v$version
  • 表 v$database
  • 表 v$tablespace

对于物化视图方案来讲需要有额外的下列权限

  • 语句 CREATE MATERIALIZED VIEW LOG ON xxx
  • 语句 CREATE INDEX xxxx

对于 Redo 方案来将需要有 LOGMNR 相关的权限

  • 表 SYS.ALL_LOG_GROUPS
  • 表 v$logfile
  • 表 v$log
  • 表 v$archived_log
  • 表 v$logmnr_logs
  • 存储过程 SYS.DBMS_LOGMNR_D.BUILD
  • 存储过程 SYS.DBMS_LOGMNR.ADD_LOGFILE
  • 存储过程 SYS.DBMS_LOGMNR.START_LOGMNR
  • 存储过程 SYS.DBMS_LOGMNR.END_LOGMNR
  • 语句 ALTER TABLE xxxx DROP SUPPLEMENTAL LOG xxx
  • 语句 ALTER TABLE xxxx ADD SUPPLEMENTAL LOG xxx
  • 语句 ALTER SYSTEM ARCHIVE LOG CURRENT

在配置同步任务之前需要确保上面的 Oracle 权限,另外作为源端 Oracle 全量阶段还需要读取对应表的权限。

举个 “栗子”

准备 CloudCanal

添加数据源

  • 登录 CloudCanal 平台

  • 数据源管理 -> 添加数据源

  • 选择 自建数据源 ,并填写相关数据库信息,其中 网络地址 请按提示带上端口号
    Oracle到MySQL实时数据同步CloudCanal实战

  • 如下已添加完 Oracle 和 MySQL
    Oracle到MySQL实时数据同步CloudCanal实战

创建同步任务

  • 任务管理->新建任务
  • 源端选择刚添加的 Oracle 数据源,目标选择 MySQL, 分别点击 测试连接 按钮以测试数据库连通性和获取 schema 级别元信息
  • 点击下一步

Oracle到MySQL实时数据同步CloudCanal实战

  • 选择 数据同步,并且勾选全量数据初始化
  • 规格可以根据任务重要度以及部署机器的内存容量合理选择,一般 2GB 内存规格即可
  • 点击下一步

Oracle到MySQL实时数据同步CloudCanal实战

  • 勾选需要同步的表,如果目标表为橙色,表示不存在同名表,任务创建完成后自动进行结构迁移。也可以下拉框选择表进行映射

  • 勾选需要同步的 INSERT/UPDATE/DELETE 操作,默认全选

  • 点击下一步

    Oracle到MySQL实时数据同步CloudCanal实战

  • 通过勾选做列映射列裁剪

  • 点击下一步

    Oracle到MySQL实时数据同步CloudCanal实战

  • 对任务内容进行创建 ,如果任务不需要立刻运行 , 可置灰自动启动任务 按钮

  • 点击确认创建

    Oracle到MySQL实时数据同步CloudCanal实战

任务同步

  • 任务分为 3 个阶段:结构迁移数据初始化数据同步,每一个阶段完成时,状态自动流转,直到同步稳态
    Oracle到MySQL实时数据同步CloudCanal实战
    Oracle到MySQL实时数据同步CloudCanal实战
    • 结构迁移:当对端数据库不存在对应的库表时 CloudCanal 会自动将 Oracle 的表在对端创建出来
    • 数据初始化:将源端所选库表数据以全量迁移方式搬迁到对端
    • 数据同步:准实时的同步增量数据,即源端数据库上发生的增、删、改操作同步到对端数据库上

FAQ

目前 Oracle 源端还支持哪些数据源?

除了 Oracle 到 MySQL 之外,截止社区版 2.0.1.1 版本,还支持下面这些链路

  • Oracle -> PostgreSQL
  • Oracle -> Greenplum
  • Oracle -> TiDB
  • Oracle -> Oracle
  • Oracle -> Kudu 。

预检失败会有哪些影响?

一些小伙伴可能在创建任务的时候遇到类似如下报错信息,可能会有一些疑惑。
Oracle到MySQL实时数据同步CloudCanal实战
在创建任务的最后阶段我们会进行一些检测,Oracle 作为源端会存在如下一些检测项目。

物化视图模式下

  • 如果表已经创建了物化视图日志表那么预检失败。

Redo 模式下

  • 开启日志归档模式 alter database archivelog 开启过程需要数据库离线。
  • 需要开启最小补全日志 alter database add supplemental log data

总结

本文简单介绍了如何使用 CloudCanal 快速构建Oracle-> MySQL 数据迁移同步链路,更多的源端和目标端陆续开放。各位小伙伴,如果觉得还不错,请点赞、评论加转发吧。

更多精彩

参加内测

Oracle 源端目前处于 beta 阶段,你可以通过添加我们的微信小助手(suhuayue001),进入内测群提前进行测试验证,获得提交需求优先解决的机会,包括支持以 Oracle 为源端的、尚未开通的链路或功能。

上一篇:DBA常用命令(数据的导入和导出(即数据备份)重点


下一篇:MySQL 实战笔记:MySQL 角色管理