更新时间:2022-05-20 GMT+08:00
分享

将DDM同步到Oracle

支持的源和目标数据库

表1 支持的数据库

源数据库

目标数据库

  • DDM实例
  • 本地自建数据库
  • ECS自建数据库

前提条件

  • 已登录数据复制服务控制台。
  • 账户余额大于等于0元。
  • 满足实时同步支持的数据库类型和版本,详情请参见支持的数据库
  • 当用户创建DRS任务使用的是子帐号时,请先确认已添加过委托。创建委托方法,可参考委托管理

使用建议

  • DRS任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。
  • 为保证同步前后数据一致性,确保同步期间目标数据库无业务写入。
  • 数据库同步与环境多样性和人为操作均有密切关系,为了确保同步的平顺,建议您在进行正式的数据库同步之前进行一次演练,可以帮助您提前发现问题并解决问题。
  • 基于以下原因,建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,相对静止的数据可以有效提升一次性同步成功率,避免同步对业务造成性能影响。
    • 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,以及占用2~4个CPU。
    • 正在同步的数据被其他事务长时间锁死,可能导致读数据超时。
    • DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。
    • 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。
  • 数据对比

    建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。

使用须知

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

表2 使用须知

类型名称

使用和操作限制

数据库权限设置

  • 源数据库DDM帐户需要具备SELECT权限,DDM物理分片数据库账号需要具备如下权限:SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。
  • 提供的目标数据库账号必须具有每张表的如下权限:ALTER ANY INDEX,ALTER ANY TABLE,ALTER SESSION,COMMENT ANY TABLE,CREATE ANY INDEX,CREATE ANY TABLE,CREATE SESSION,DELETE ANY TABLE,DROP ANY TABLE,INSERT ANY TABLE,SELECT ANY TABLE,,SELECT ANY DICTIONARY,SELECT ANY TRANSACTION,UPDATE ANY TABLE,ANALYZE ANY和RESOURCE。

同步对象约束

  • 支持源库数据同步。
  • 源库表结构仅支持全量同步。
  • 不支持同步表结构、索引、约束之外的数据库对象。
  • 目标库Oracle不支持空字符串,同步对象含有非空约束的字段中不能包含空字符串。

源数据库要求

  • 源物理分片数据库的binlog日志必须打开,且binlog日志格式必须为Row格式。
  • 在磁盘空间允许的情况下,binlog保存时间越长越好,建议为3天。
  • 增量同步时,必须设置MySQL源数据库的server_id。如果源数据库版本小于或等于MySQL5.6,server_id的取值范围在2-4294967296之间;如果源数据库版本大于或等于MySQL5.7,server_id的取值范围在1-4294967296之间。
  • 源分库分表中间件中的库名、表名不能包含:'<>/\以及非ASCII字符。
  • 源物理分片数据库建议开启skip-name-resolve,减少连接超时的可能性。
  • 源物理分片数据库的GTID状态建议为开启状态。
  • 源物理分片数据库不支持枚举类型和set集合类型的。
  • 源数据库表名、字段名不能超过30个字符。
  • 不支持同步无主键表。
  • 源库中需要同步的数据库具有RESOURCE权限。
  • 源库的timestamp列的默认值,需要在目标库的合理取值内,否则会导致同步失败。

目标数据库要求

  • 目标数据库实例的运行状态必须正常。
  • 目标数据库实例必须有足够的磁盘空间。
  • 目标数据库的时区设置必须与源数据库一致。
  • 目标库中需要同步的数据库(用户)具有RESOURCE权限。

操作须知

  • 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。
  • 数据类型不兼容时,可能引起同步失败。
  • 由于数据库引擎支持不同,MySQL中的非空约束支持空字符串,Oracle中的非空约束不支持空字符串。数据同步过程中,如果非空约束的字段出现了空字符串,建议用户在目标端Oracle中将这个非空约束删除。
  • 源数据库中存在主键重复的数据时,直接同步将导致目标库数据比源库少,请务必检查并订正数据后启动同步。
  • 源数据库表中类型为varbinary、binary、timestamp的字段不能含有主键或唯一键约束。
  • 如果DDM的拆分库或拆分表的拆分键是函数,且不是主键,那么在Oracle里创建该表时,会自动把主键和拆分键作为复合主键。
  • 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。
    • 目标端多的列要求非空且没有默认值,源端insert数据,同步到目标端后多的列为null,不符合目标端要求。
    • 目标端多的列设置固定默认值,且有唯一约束。源端insert多条数据后,同步到目标端后多的列为固定默认值,不符合目标端要求。
  • 创建任务后,不支持增加逻辑库或修改旧逻辑库关联新的RDS,否则会导致同步任务失败。
  • 同步过程中,不支持DDL操作。
  • 同步过程中,不允许源端DDM正在同步的表做改变拆分键的操作;也不允许将单表/广播表改为拆分表,拆分表改为单表/广播表。
  • 增量同步过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
  • 增量同步过程中,若需要对源库需要同步的表结构进行修改,则用户必须在目标库同步修改表结构。
  • 增量同步场景下,不支持源数据库进行恢复操作。
分享:

    相关文档

    相关产品

close