文档

同步时源库为Oracle的注意事项及限制

更新时间:
重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

如果同步的源数据库类型为自建Oracle,您需要在配置具体的同步任务前,参考本文的注意事项及限制,以保障数据同步任务的正常运行。

源库为Oracle的同步方案概览

根据如下同步方案,查看同步任务的注意事项及限制:

说明
  • 在库表结构同步过程中,DTS会将源数据库中的外键同步到目标数据库。

  • 在全量同步和增量同步过程中,DTS会以Session级别暂时禁用约束检查以及外键级联操作。若任务运行时源库存在级联更新、删除操作,可能会导致数据不一致。

自建Oracle同步至云原生数据仓库AnalyticDB PostgreSQL版

类型

说明

源库限制

  • 同步对象要求:

    • 待同步的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。

    • 如果您的自建Oracle版本为12c及以上,待同步表的名称长度需不超过30个字节。

    • 如同步对象为表级别,且需进行编辑(如表列名映射),则单次同步任务仅支持同步至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待同步的表,分批配置多个任务,或者配置整库的同步任务。

  • 如果源库通过专线的方式接入,那么需要将其中任意1个VIP配置到连接信息中,实现Oracle RAC通过专线接入同步任务。

  • 如自建Oracle为RAC架构,不支持配置ScanIP,仅支持将其中任意1个VIP配置到连接信息中,该方式配置后不支持RAC的节点切换。

  • 需开启Redo Log和Archive Log。

    说明

    如为增量同步任务,DTS要求源数据库的Redo Log和Archive Log保存24小时以上,如为全量同步和增量同步任务,DTS要求源数据库的Redo Log和Archive Log至少保留7天以上(您可在全量同步完成后将Redo Log和Archive Log保存时间设置为24小时以上),否则DTS可能因无法获取Redo Log或Archive Log而导致任务失败,极端情况下甚至可能会导致数据不一致或丢失。由于您所设置的Redo Log或Archive Log保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。

  • 如果源库在同步阶段进行主备切换,将会导致同步任务失败。

  • 如果源库存在varchar2类型的空字符串(Oracle会将其处理为null)且对应的目标库字段有非空约束,将会导致同步任务失败。

  • 不支持单独更新大文本字段,否则会导致同步任务失败。

其他限制

  • 结构初始化的对象有:table、index、constraint、function、sequence和view。

    警告

    DTS在执行结构初始化时数据类型无法完全对应,请谨慎评估数据类型的映射关系对业务的影响,否则可能导致任务失败或数据不一致。关于数据类型映射关系的更多信息,请参见结构初始化涉及的数据类型映射关系

  • 暂不支持同步触发器。建议您删除源库的触发器,否则可能会因触发器导致数据不一致。若您需要同步触发器,详情请参见源库存在触发器时如何配置同步作业

  • DTS会丢弃分区表的定义,您需要在目标库自行定义。

  • 仅支持表级别的同步,且目标表暂不支持AO表。

  • 若使用列映射时为非全表同步或者源与目标表结构不一致,则目标端比源端缺少的列的数据将会丢失。

  • 由于目标AnalyticDB PostgreSQL版不支持写入字符串的终止符('\0'),若待同步的数据中包含该终止符,DTS不会将该终止符写入到目标库,从而会导致数据不一致。

  • 执行数据同步前需评估源库和目标库的性能,同时建议业务低峰期执行数据同步。否则全量数据初始化时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升。

  • 全量初始化会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量初始化完成后目标实例的表空间比源实例的表空间大。

  • 由于DTS的延迟时间是根据同步到目标库最后一条数据的时间戳和当前时间戳对比得出,源库长时间未执行DML操作可能导致延迟信息不准确。如果任务显示的延迟时间过大,您可以在源库执行一个DML操作来更新延迟信息。

    说明

    如果同步对象选择为整库,您还可以创建心跳表,心跳表每秒定期更新或者写入数据。

  • 在DTS同步期间,不允许有除DTS外的数据写入目标库,否则会导致源库与目标库数据不一致。例如,有除DTS外的数据写入目标库时,使用DMS执行在线DDL变更,可能引起目标库数据丢失。

自建Oracle同步至阿里云消息队列Kafka版或自建Kafka

类型

说明

源库限制

  • 同步对象要求:

    • 待同步的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。

    • 如果您的自建Oracle版本为12c及以上,待同步表的名称长度需不超过30个字节。

    • 如同步对象为表级别,且需进行编辑(如表列名映射),则单次同步任务仅支持同步至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待同步的表,分批配置多个任务,或者配置整库的同步任务。

  • 如果源库通过专线的方式接入,那么需要将其中任意1个VIP配置到连接信息中,实现Oracle RAC通过专线接入同步任务。

  • 如自建Oracle为RAC架构,不支持配置ScanIP,仅支持将其中任意1个VIP配置到连接信息中,该方式配置后不支持RAC的节点切换。

  • 需开启Redo Log和Archive Log。

    说明

    如为增量同步任务,DTS要求源数据库的Redo Log和Archive Log保存24小时以上,如为全量同步和增量同步任务,DTS要求源数据库的Redo Log和Archive Log至少保留7天以上(您可在全量同步完成后将Redo Log和Archive Log保存时间设置为24小时以上),否则DTS可能因无法获取Redo Log或Archive Log而导致任务失败,极端情况下甚至可能会导致数据不一致或丢失。由于您所设置的Redo Log或Archive Log保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。

  • 如果源库在同步阶段进行主备切换,将会导致同步任务失败。

  • 如果源库存在varchar2类型的空字符串(Oracle会将其处理为null)且对应的目标库字段有非空约束,将会导致同步任务失败。

  • 不支持单独更新大文本字段,否则会导致同步任务失败。

其他限制

  • 不支持自动调整同步对象,如果对同步对象中的数据表进行重命名操作,且重命名后的名称不在同步对象中,那么这部分数据将不再同步到目标Kafka集群中。如需将修改后的数据表继续数据同步至目标Kafka集群中,您需要进行修改同步对象操作,详情请参见新增同步对象

  • 执行数据同步前需评估源库和目标库的性能,同时建议业务低峰期执行数据同步。否则全量数据初始化时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升。

  • 全量初始化会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量初始化完成后目标实例的表空间比源实例的表空间大。

  • 由于DTS的延迟时间是根据同步到目标库最后一条数据的时间戳和当前时间戳对比得出,源库长时间未执行DML操作可能导致延迟信息不准确。如果任务显示的延迟时间过大,您可以在源库执行一个DML操作来更新延迟信息。

    说明

    如果同步对象选择为整库,您还可以创建心跳表,心跳表每秒定期更新或者写入数据。

  • 在DTS同步期间,不允许有除DTS外的数据写入目标库,否则会导致源库与目标库数据不一致。例如,有除DTS外的数据写入目标库时,使用DMS执行在线DDL变更,可能引起目标库数据丢失。

  • 在DTS同步期间,若目标Kafka发生了扩容或缩容,您需要重启实例。

自建Oracle同步至阿里云流式数据服务DataHub

类型

说明

源库限制

  • 同步对象要求:

    • 待同步的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。

    • 如果您的自建Oracle版本为12c及以上,待同步表的名称长度需不超过30个字节。

    • 如同步对象为表级别,且需进行编辑(如表列名映射),则单次同步任务仅支持同步至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待同步的表,分批配置多个任务,或者配置整库的同步任务。

  • 如果源库通过专线的方式接入,那么需要将其中任意1个VIP配置到连接信息中,实现Oracle RAC通过专线接入同步任务。

  • 如自建Oracle为RAC架构,不支持配置ScanIP,仅支持将其中任意1个VIP配置到连接信息中,该方式配置后不支持RAC的节点切换。

  • 需开启Redo Log和Archive Log。

    说明

    如为增量同步任务,DTS要求源数据库的Redo Log和Archive Log保存24小时以上,如为全量同步和增量同步任务,DTS要求源数据库的Redo Log和Archive Log至少保留7天以上(您可在全量同步完成后将Redo Log和Archive Log保存时间设置为24小时以上),否则DTS可能因无法获取Redo Log或Archive Log而导致任务失败,极端情况下甚至可能会导致数据不一致或丢失。由于您所设置的Redo Log或Archive Log保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。

  • 如果源库在同步阶段进行主备切换,将会导致同步任务失败。

  • 如果源库存在varchar2类型的空字符串(Oracle会将其处理为null)且对应的目标库字段有非空约束,将会导致同步任务失败。

  • 不支持单独更新大文本字段,否则会导致同步任务失败。

其他限制

  • 结构初始化对象为table。

    警告

    不兼容触发器。建议您删除源库的触发器,以避免因触发器而导致数据不一致的问题。详情请参见源库存在触发器时如何配置同步作业

  • 目标DataHub中单个String字段的长度最大支持2 MB。

  • 仅支持表级别的数据同步。

  • 由于DTS的延迟时间是根据同步到目标库最后一条数据的时间戳和当前时间戳对比得出,源库长时间未执行DML操作可能导致延迟信息不准确。如果任务显示的延迟时间过大,您可以在源库执行一个DML操作来更新延迟信息。

    说明

    如果同步对象选择为整库,您还可以创建心跳表,心跳表每秒定期更新或者写入数据。

  • 在DTS同步期间,不允许有除DTS外的数据写入目标库,否则会导致源库与目标库数据不一致。例如,有除DTS外的数据写入目标库时,使用DMS执行在线DDL变更,可能引起目标库数据丢失。

自建Oracle同步至PolarDB-X 2.0

类型

说明

源库限制

  • 同步对象要求:

    • 待同步的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。

    • 如果您的自建Oracle版本为12c及以上,待同步表的名称长度需不超过30个字节。

    • 如同步对象为表级别,且需进行编辑(如表列名映射),则单次同步任务仅支持同步至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待同步的表,分批配置多个任务,或者配置整库的同步任务。

  • 如果源库通过专线的方式接入,那么需要将其中任意1个VIP配置到连接信息中,实现Oracle RAC通过专线接入同步任务。

  • 如自建Oracle为RAC架构,不支持配置ScanIP,仅支持将其中任意1个VIP配置到连接信息中,该方式配置后不支持RAC的节点切换。

  • 需开启Redo Log和Archive Log。

    说明

    如为增量同步任务,DTS要求源数据库的Redo Log和Archive Log保存24小时以上,如为全量同步和增量同步任务,DTS要求源数据库的Redo Log和Archive Log至少保留7天以上(您可在全量同步完成后将Redo Log和Archive Log保存时间设置为24小时以上),否则DTS可能因无法获取Redo Log或Archive Log而导致任务失败,极端情况下甚至可能会导致数据不一致或丢失。由于您所设置的Redo Log或Archive Log保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。

  • 如果源库在同步阶段进行主备切换,将会导致同步任务失败。

  • 如果源库存在varchar2类型的空字符串(Oracle会将其处理为null)且对应的目标库字段有非空约束,将会导致同步任务失败。

  • 不支持单独更新大文本字段,否则会导致同步任务失败。

其他限制

  • 执行数据同步前需评估源库和目标库的性能,同时建议业务低峰期执行数据同步。否则全量数据初始化时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升。

  • 全量初始化会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量初始化完成后目标实例的表空间比源实例的表空间大。

  • 由于DTS的延迟时间是根据同步到目标库最后一条数据的时间戳和当前时间戳对比得出,源库长时间未执行DML操作可能导致延迟信息不准确。如果任务显示的延迟时间过大,您可以在源库执行一个DML操作来更新延迟信息。

    说明

    如果同步对象选择为整库,您还可以创建心跳表,心跳表每秒定期更新或者写入数据。

  • 在DTS同步期间,不允许有除DTS外的数据写入目标库,否则会导致源库与目标库数据不一致。例如,有除DTS外的数据写入目标库时,使用DMS执行在线DDL变更,可能引起目标库数据丢失。

  • 本页导读 (1)