跳到主要内容

Oracle 迁移同步到 ClickHouse

NineData 数据复制支持将 Oracle 的数据复制到 ClickHouse,支持结构和全量数据复制。

功能介绍

NineData 数据复制支持数据源之间的结构、全量数据、增量数据的高性能复制,对于 MySQL 数据源之间的复制,还提供双向复制功能,实现快捷构建异地多活业务架构。

  • 结构:支持同构及异构数据源之间的对象结构复制,很大程度上降低了两个数据源之间的数据复制门槛。
  • 全量数据:通过智能数据分片实现行级并发批量复制能力,有效保障复制性能。自主研发的新型断点续传技术,保证无主键表的数据准确性。
  • 增量数据:支持全对象类型的 DML|DDL 增量数据复制,结合事务级并发、热点合并等技术,在保障事务一致性的基础上,提供强劲复制性能。
  • 双向数据实时复制(仅 MySQL 之间):直接多个节点之间的数据双向复制,保证所有节点的数据均保持最新状态。

通过以上功能,可以轻松高效地实现全量|增量数据复制全量|增量数据迁移全量|增量数据同步数据集成不停机无缝迁移等场景,为企业提供灵活和可靠的数据复制解决方案。

前提条件

  • 已将源数据源和目标数据源添加至 NineData。如何添加,请参见添加数据源

  • 源和目标数据源的版本见下表。

    源数据源目标数据源
    Oracle 11g 及以上ClickHouse 20.8 及以上
  • 如需进行增量复制,请确保源数据源中已进行如下配置:

    • Oracle 的日志模式已设置为 ARCHIVELOG 模式(默认情况下为 NOARCHIVELOG)。

      验证当前的日志模式:SELECT log_mode FROM v$database;
      如果日志模式为 NOARCHIVELOG,执行下列步骤:
      1. 关闭数据库:SHUTDOWN IMMEDIATE;
      2. 启动并装载数据库:STARTUP MOUNT;
      3. 执行开启归档命令:ALTER DATABASE ARCHIVELOG;
      4. 启动数据库:ALTER DATABASE OPEN;
    • 已开启 Supplemental Log,即附加日志(默认情况下不开启)。

      验证附加日志是否开启:SELECT supplemental_log_data_all allc FROM v$database;
      如果返回 NO,执行开启附加日志命令:
      - ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
      //在数据库级别启用附加日志,对所有的表和所有的列生效,将占用较多资源。
      - ALTER TABLE <database_name>.<table_name> ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
      //在特定的表上启用附加日志,对该表中所有的列生效。
  • 用于登录 ClickHouse 的账号的 access_management 参数值需为 1

    配置方式:

    通过编辑器打开位于 /etc/clickhouse-server 目录下的 User.xml 配置文件,找到目标用户,加入参数:<access_management>1</access_management>

  • 已拥有源数据源和目标数据源的如下权限。

    复制类型
    源数据源目标数据源
    全量复制
    • select connect
    • select any dictionary
    • select_catalog_role
    TABLE的相关权限(CREATE、CREATE TABLE、ALTER、ALTER COLUMN、DROP、SELECT、INSERT)

注意事项

  • 源 Oracle 数据源中,如果有无符号整形类型字段,则 ClickHouse 中会被映射为 Uint 类型。

  • 通常 Oracle 到 ClickHouse 的复制场景需要包含结构复制,系统会自动迁移 Oracle 的表结构到 ClickHouse,并在 ClickHouse 涉及复制的表中插入两个系统列。如果复制类型不包含结构复制,则您在需要手动确保下列事项:

    • ClickHouse 数据源中涉及复制的数据对象,其库表结构必须和 Oracle 数据源一致。

    • ClickHouse 数据源涉及复制的表中都需要手动插入如下两个系统列用于记录 DML 操作以及 Binlog 的时间。

      列名称数据类型
      列默认值
      说明
      _jz_data_signInt8DEFAULT 1记录 DML 操作的类型,保证 ClickHouse 端的数据和 Oracle 端一致。
      • INSERT 操作:该字段记录为 1。
      • DELETE 操作:该字段记录为 -1。
      • UPDATE 操作:拆分成 INSERT、DELETE 两条记录。
      _jz_data_timeStringDEFAULT now()记录 Binlog 的时间。

      示例:

      CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
      (
      ...
      _jz_data_sign Int8 DEFAULT 1 COMMENT 'replication data update sign: add = 1, remove = -1',
      _jz_data_time String DEFAULT now() COMMENT 'replication data update time'
      ) ENGINE = engine

使用限制

  • 执行数据同步前需评估源数据源和目标数据源的性能,同时建议业务低峰期执行数据同步。否则全量数据初始化时将占用源数据源和目标数据源一定的读写资源,导致数据库负载上升。
  • 建议确保同步对象中的每张表都有主键或唯一约束、列名具有唯一性,否则可能会重复同步相同数据。

操作步骤

  1. 登录 NineData 控制台

  2. 在左侧导航栏单击

  3. 页面,单击右上角的

  4. 页签,按照下表进行配置,并单击

    参数
    说明
    输入数据同步任务的名称,为了方便后续查找和管理,请尽量使用有意义的名称。最多支持 64 个字符。
    同步对象所在的数据源。
    接收同步对象的数据源。
    选择对象名称从源端迁移到目标端后的大小写转换规则。
    • :无论源端的命名规则如何,目标端的命名规则全部为小写。
    • :沿用源端的命名规则。
    • :无论源端的命名规则如何,目标端的命名规则全部为大写。
    选择需要复制到目标数据源的内容。
    • :只同步源数据源的库表结构,不同步数据。
    • :同步源数据源的所有对象和数据,即全量数据复制。右侧的开关为周期性全量复制的开关,更多信息,请参见周期性全量复制
    (选中时需要选择)
    • :预检查阶段检测到同名表时,停止任务。
    • :预检查阶段检测到同名表时,发送提示并继续任务。 结构复制时,忽略该同名表。如果您同时进行了数据复制,则数据会在同名表中追加,而不会覆盖原有数据。
    • :预检查阶段检测到同名表时,发送提示并继续任务。结构复制时,删除目标库同名表,并基于源库重新复制表结构。如果您同时进行了数据复制,则数据会在表结构复制完成后写入。
    • (同时进行结构和数据复制时可选):预检查阶段检测到同名表时,发送提示并继续任务。结构复制时在目标库保留该表结构,并在数据复制开始时清空同名表中的数据,然后重新从原表中复制。
    (未选中时需要选择)
    • :预检查阶段检测到目标表中存在数据时,停止任务。
    • :预检查阶段检测到目标表中存在数据时,忽略该部分数据,追加写入其他数据。
    • :预检查阶段检测到目标表中存在数据时,删除该部分数据,重新写入。
  5. 页签,配置下列参数,然后单击

    参数
    说明
    选择需要复制的内容,您可以选择复制源库所有内容,也可以选择,在列表中选中需要复制的内容,单击>添加到右侧列表。
  6. 页签,根据所选的复制类型选择不同操作,然后单击。如果在配置映射阶段,源和目标数据源中有更新,可以单击页面右上角的按钮,重新获取源和目标数据源的信息。

    • 包含:配置目标表同步到目标数据源之后的表名。

      提示

      您可以单击页面右侧的,自定义列名同步到目标数据源之后的名称。除此之外,您还可以设置,通过比较表达式配置过滤条件,仅符合过滤条件的数据会同步到目标数据源。例如,将过滤条件设置为 emp_no>=10005,则 emp_no 列中小于 10005 的数据均不会同步到目标数据源。

    • 不包含:系统默认选择目标数据源中的同名数据库,如果不存在,则需要手动选择目标库。目标库中的表名、列名需要和同步对象一致。如果不一致,您也可以手动进行表名和列名的映射。

  7. 页签,等待系统完成预检查,预检查通过后,单击

    提示
    • 您可以勾选。在同步任务完成后,自动开启基于源数据源的数据一致性对比,保证两端数据一致。根据您选择的的启动时机如下:
      • :结构复制完成后启动。
      • +:全量复制完成后启动。
    • 如果预检查未通过,需要单击目标检查项右侧列的,排查失败的原因,手动修复后单击重新执行预检查,直到通过。
    • 的检查项,可视具体情况修复或忽略。
  8. 页面,提示,同步任务开始运行。此时您可以进行如下操作:

    • 单击查看同步任务各个阶段的执行情况。
    • 单击可以返回任务列表页面。

查看同步结果

  1. 登录 NineData 控制台

  2. 在左侧导航栏单击 >

  3. 页面单击目标同步任务的,页面说明如下。

    result_no_incre

    序号
    功能
    说明
    1配置告警配置告警后,系统会在任务失败时通过您选择的方式通知您。更多信息,请参见运维监控简介
    2更多
    • :暂停任务,仅状态为运行中的任务可选。
    • :创建一个和当前任务配置相同的新复制任务。
    • :结束未完成或监听中(即增量同步中)的任务,终止任务后无法重启任务,请谨慎操作。如果同步对象中包含触发器,会弹出触发器复制选项,请按需选择。
    • :删除任务,任务删除后无法恢复,请谨慎操作。
    3结构复制(包含结构复制的场景下显示)展示结构复制的进度和详细信息。
    • 单击页面右侧的:查看结构复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    • 单击列表中目标对象右侧列的:可以查看 SQL 回放。
    4全量复制(包含全量复制的场景下显示)展示全量复制的进度和详细信息。
    • 单击页面右侧的:查看全量复制过程中的各监控指标。全量复制过程中,还可以单击监控指标页面右侧的,限制每秒写入到目标数据源的速率。单位为行/秒。
    • 单击页面右侧的:查看全量复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    5数据对比展示源数据源和目标数据源之间对比的结果。如果您未开启数据对比,请单击页面中的
    • 单击页面右侧的:对当前源和目标两端数据重新发起对比。
    • 单击页面右侧的:对比任务开始后,可单击该按钮立即停止对比任务。
    • 单击页面右侧的:查看一致性对比的执行日志。
    • 单击页面右侧的(仅数据对比显示):查看对比 RPS(每秒对比的记录数)的走势图。单击可以查看更早之前的记录。
    • 在对比列表右侧列单击details页签下只在不一致情况下显示):查看源端和目标端的对比详情。
    • 在对比列表右侧列单击sql(不一致情况下显示):生成变更 SQL,您可以直接复制该 SQL 到目标数据源执行,修改不一致的内容。
    6展开展示当前复制任务的详细信息。

附录:预检查项一览表

检查项检查内容
目标库数据存在性检查检查待复制对象在目标数据库中是否已存在数据
目标库同名对象存在性检查检查待复制对象在目标数据库中是否已存在
源数据源连接检查检查源数据源网关状态、实例是否可达、用户名及密码准确性
目标数据源连接检查检查目标数据源网关状态、实例是否可达、用户名及密码准确性
目标库权限检查检查目标数据库的账号权限是否满足要求
源库权限检查检查源数据库的账号权限是否满足要求

相关文档

数据复制简介