文档

迁移时源库为Oracle的注意事项及限制

更新时间:

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

源库为Oracle的迁移方案概览

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

自建Oracle迁移至PolarDB PostgreSQL版(兼容Oracle)

具体注意事项及限制如下:

类型

说明

源库限制

  • 带宽要求:源库所属的服务器需具备足够出口带宽,否则将影响数据迁移速率。

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

  • 如自建Oracle为RAC架构,且用专线/VPN网关/智能接入网关、数据库网关DG、云企业网CEN和ECS的接入方式,则不支持配置ScanIP,仅支持将其中任意1个VIP配置到连接信息中,该方式配置后不支持RAC的节点切换。

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

  • 迁移对象要求:

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

      说明

      您也可以使用Oracle中的ROWID作为无主键和唯一约束表的主键。

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

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

  • 如需进行增量迁移,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保障范围内。

  • 源库的操作限制:

    • 在库表结构迁移和全量迁移阶段,请勿执行库或表结构变更的DDL操作,否则数据迁移任务失败。

    • 如仅执行全量数据迁移,请勿向源实例中写入新的数据,否则会导致源和目标数据不一致。为实时保持数据一致性,建议选择结构迁移、全量数据迁移和增量数据迁移。

    • 单独更新大文本字段场景不支持,任务会失败。

其他限制

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

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

  • DTS会尝试恢复七天之内迁移失败任务。因此业务切换至目标实例前,请务必结束或释放该任务,或者将DTS访问目标实例账号的写权限用revoke命令回收掉。避免该任务被自动恢复后,源端数据覆盖目标实例的数据。

  • 由于目标PolarDB PostgreSQL版(兼容Oracle)集群会生成类似pg_oid_1498503_index的唯一索引,来对应源自建Oracle的ROWID,所以INDEX会比源自建Oracle多。

  • 由于目标PolarDB PostgreSQL版(兼容Oracle)集群不支持写入字符串的终止符('\0'),若待迁移的数据中包含该终止符,DTS不会将该终止符写入到目标库,从而会导致数据不一致。

  • 源自建Oracle的CHECK约束迁移到目标PolarDB PostgreSQL版(兼容Oracle)集群后,会转换成NOT NULL约束。

  • 需确保源库和目标库的字符集兼容,否则可能会导致数据不一致或任务失败。

  • 建议使用DTS的库表结构迁移功能,否则可能会因为数据类型不兼容而导致任务失败。

  • 源库和目标库的时区必须保持一致。

  • 您自定义的Type可以迁移到目标PolarDB PostgreSQL版(兼容Oracle)集群,Oracle自动生成的Type Object(即内置对象)不会被迁移。

    说明

    PolarDB PostgreSQL版(兼容Oracle)集群已经支持Oracle中的内置对象,您无需迁移。

  • DTS的校验对象为数据内容,暂不支持Sequence等元数据的校验,您需要自行校验。

  • 由于业务切换到目标端后,新写入的Sequence不会按照源库的Sequence最大值作为初始值去递增,您需要在业务切换前,在源库中查询对应Sequence的最大值,然后在目标库中将其作为对应Sequence的初始值。查询源库Sequence值的相关命令如下:

    DECLARE
      CURSOR cur_data IS
        SELECT SEQUENCE_NAME, LAST_NUMBER FROM user_sequences;
      v_column1_value varchar(1000);
      v_column2_value number(20);
    BEGIN
      OPEN cur_data;
      LOOP
        FETCH cur_data INTO v_column1_value, v_column2_value;
        EXIT WHEN cur_data%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE('select setval(''' || lower(v_column1_value) || ''', ' || v_column2_value || ');');
      END LOOP;
      CLOSE cur_data;
    END;
    /
    说明

    执行以上命令输出的SQL包含源库所有Sequence,请根据业务需求在目标库中执行。

自建Oracle迁移至MySQL

如果迁移的目标数据库类型为MySQL,如RDS MySQL、自建MySQL,具体注意事项及限制如下:

类型

说明

源库限制

  • 带宽要求:源库所属的服务器需具备足够出口带宽,否则将影响数据迁移速率。

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

  • 如自建Oracle为RAC架构,且用专线/VPN网关/智能接入网关、数据库网关DG、云企业网CEN和ECS的接入方式,则不支持配置ScanIP,仅支持将其中任意1个VIP配置到连接信息中,该方式配置后不支持RAC的节点切换。

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

  • 迁移对象要求:

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

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

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

  • 如需进行增量迁移,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保障范围内。

  • 源库的操作限制:

    • 在库表结构迁移和全量迁移阶段,请勿执行库或表结构变更的DDL操作,否则数据迁移任务失败。

    • 如仅执行全量数据迁移,请勿向源实例中写入新的数据,否则会导致源和目标数据不一致。为实时保持数据一致性,建议选择结构迁移、全量数据迁移和增量数据迁移。

    • 单独更新大文本字段场景不支持,任务会失败。

其他限制

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

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

  • DTS会尝试恢复七天之内迁移失败任务。因此业务切换至目标实例前,请务必结束或释放该任务,或者将DTS访问目标实例账号的写权限用revoke命令回收掉。避免该任务被自动恢复后,源端数据覆盖目标实例的数据。

  • 若目标库的DDL写入失败,DTS任务会继续运行,您需要在任务日志中查看执行失败的DDL。查看任务日志的方法,请参见查询任务日志

  • 需确保源库和目标库的字符集兼容,否则可能会导致数据不一致或任务失败。

  • 建议使用DTS的库表结构迁移功能,否则可能会因为数据类型不兼容而导致任务失败。

  • 源库和目标库的时区必须保持一致。

  • 若您将列名仅大小写不同的字段写入到目标MySQL数据库的同一个表中,可能会因为MySQL数据库列名大小写不敏感,导致迁移结果不符合预期。

  • 在数据迁移完成后,建议使用analyze table <表名>命令检查数据是否已写入目标表。例如,在MySQL触发HA切换机制后,可能会导致数据只写到了内存,从而造成数据丢失。

特殊情况

当目标库为RDS MySQL时

  • RDS MySQL实例对表名的英文大小写不敏感,如果使用大写英文建表,RDS MySQL会先把表名转为小写再执行建表操作。

    如果源Oracle数据库中存在表名相同仅大小写不同的表,可能会导致迁移对象重名并在结构迁移中提示“对象已经存在”。如果出现这种情况,请在配置迁移对象的时候,使用DTS提供的对象名映射功能对重名的对象进行重命名,将表名转为大写,详情请参见库表列映射

  • DTS会自动在RDS MySQL中创建数据库,如果待迁移的数据库名称不符合RDS MySQL的定义规范,您需要在配置迁移任务之前在RDS MySQL中创建数据库。相关操作,请参见管理数据库

自建Oracle迁移至PolarDB MySQL版

如果迁移的目标集群为PolarDB MySQL版,具体注意事项及限制如下:

类型

说明

源库限制

  • 带宽要求:源库所属的服务器需具备足够出口带宽,否则将影响数据迁移速率。

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

  • 如自建Oracle为RAC架构,且用专线/VPN网关/智能接入网关、数据库网关DG、云企业网CEN和ECS的接入方式,则不支持配置ScanIP,仅支持将其中任意1个VIP配置到连接信息中,该方式配置后不支持RAC的节点切换。

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

  • 迁移对象要求:

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

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

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

  • 如需进行增量迁移,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保障范围内。

  • 源库的操作限制:

    • 在库表结构迁移和全量迁移阶段,请勿执行库或表结构变更的DDL操作,否则数据迁移任务失败。

    • 如仅执行全量数据迁移,请勿向源实例中写入新的数据,否则会导致源和目标数据不一致。为实时保持数据一致性,建议选择结构迁移、全量数据迁移和增量数据迁移。

    • 单独更新大文本字段场景不支持,任务会失败。

其他限制

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

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

  • DTS会尝试恢复七天之内迁移失败任务。因此业务切换至目标实例前,请务必结束或释放该任务,或者将DTS访问目标实例账号的写权限用revoke命令回收掉。避免该任务被自动恢复后,源端数据覆盖目标实例的数据。

  • 若目标库的DDL写入失败,DTS任务会继续运行,您需要在任务日志中查看执行失败的DDL。查看任务日志的方法,请参见查询任务日志

  • 需确保源库和目标库的字符集兼容,否则可能会导致数据不一致或任务失败。

  • 建议使用DTS的库表结构迁移功能,否则可能会因为数据类型不兼容而导致任务失败。

  • 源库和目标库的时区必须保持一致。

特殊情况

当目标库为PolarDB MySQL版时:

  • PolarDB MySQL版集群对表名的英文大小写不敏感,如果使用大写英文建表,PolarDB MySQL版会先把表名转为小写再执行建表操作。

    如果源Oracle数据库中存在表名相同仅大小写不同的表,可能会导致迁移对象重名并在结构迁移中提示“对象已经存在”。如果出现这种情况,请在配置迁移对象的时候,使用DTS提供的对象名映射功能对重名的对象进行重命名,将表名转为大写,详情请参见库表列映射

  • DTS会自动在PolarDB MySQL版中创建数据库,如果待迁移的数据库名称不符合PolarDB MySQL版的定义规范,您需要在配置迁移任务之前在PolarDB MySQL版中创建数据库。相关操作,请参见管理数据库

自建Oracle迁移至AnalyticDB for PostgreSQL

如果迁移的目标实例为云原生数据仓库 AnalyticDB PostgreSQL 版,具体注意事项及限制如下:

类型

说明

源库限制

  • 带宽要求:源库所属的服务器需具备足够出口带宽,否则将影响数据迁移速率。

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

  • 如自建Oracle为RAC架构,且用专线/VPN网关/智能接入网关、数据库网关DG、云企业网CEN和ECS的接入方式,则不支持配置ScanIP,仅支持将其中任意1个VIP配置到连接信息中,该方式配置后不支持RAC的节点切换。

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

  • 迁移对象要求:

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

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

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

  • 如需进行增量迁移,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保障范围内。

  • 源库的操作限制:

    • 在库表结构迁移和全量迁移阶段,请勿执行库或表结构变更的DDL操作,否则数据迁移任务失败。

    • 如仅执行全量数据迁移,请勿向源实例中写入新的数据,否则会导致源和目标数据不一致。为实时保持数据一致性,建议选择结构迁移、全量数据迁移和增量数据迁移。

    • 单独更新大文本字段场景不支持,任务会失败。

其他限制

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

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

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

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

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

  • DTS会尝试恢复七天之内迁移失败任务。因此业务切换至目标实例前,请务必结束或释放该任务,或者将DTS访问目标实例账号的写权限用revoke命令回收掉。避免该任务被自动恢复后,源端数据覆盖目标实例的数据。

自建Oracle迁移至阿里云消息队列Kafka版或自建Kafka

类型

说明

源库限制

  • 带宽要求:源库所属的服务器需具备足够出口带宽,否则将影响数据迁移速率。

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

  • 如自建Oracle为RAC架构,且用专线/VPN网关/智能接入网关、数据库网关DG、云企业网CEN和ECS的接入方式,则不支持配置ScanIP,仅支持将其中任意1个VIP配置到连接信息中,该方式配置后不支持RAC的节点切换。

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

  • 迁移对象要求:

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

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

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

  • 如需进行增量迁移,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保障范围内。

  • 源库的操作限制:

    • 在库表结构迁移和全量迁移阶段,请勿执行库或表结构变更的DDL操作,否则数据迁移任务失败。

    • 如仅执行全量数据迁移,请勿向源实例中写入新的数据,否则会导致源和目标数据不一致。为实时保持数据一致性,建议选择结构迁移、全量数据迁移和增量数据迁移。

    • 单独更新大文本字段场景不支持,任务会失败。

其他限制

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

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

  • DTS会尝试恢复七天之内迁移失败任务。因此业务切换至目标实例前,请务必结束或释放该任务,或者将DTS访问目标实例账号的写权限用revoke命令回收掉。避免该任务被自动恢复后,源端数据覆盖目标实例的数据。

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

自建Oracle间迁移

如果迁移的目标数据库类型为Oracle,具体注意事项及限制如下:

类型

说明

源库限制

  • 带宽要求:源库所属的服务器需具备足够出口带宽,否则将影响数据迁移速率。

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

  • 如自建Oracle为RAC架构,且用专线/VPN网关/智能接入网关、数据库网关DG、云企业网CEN和ECS的接入方式,则不支持配置ScanIP,仅支持将其中任意1个VIP配置到连接信息中,该方式配置后不支持RAC的节点切换。

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

  • 迁移对象要求:

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

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

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

  • 如需进行增量迁移,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保障范围内。

  • 源库的操作限制:

    • 在库表结构迁移和全量迁移阶段,请勿执行库或表结构变更的DDL操作,否则数据迁移任务失败。

    • 如仅执行全量数据迁移,请勿向源实例中写入新的数据,否则会导致源和目标数据不一致。为实时保持数据一致性,建议选择结构迁移、全量数据迁移和增量数据迁移。

    • 单独更新大文本字段场景不支持,任务会失败。

其他限制

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

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

  • DTS会尝试恢复七天之内迁移失败任务。因此业务切换至目标实例前,请务必结束或释放该任务,或者将DTS访问目标实例账号的写权限用revoke命令回收掉。避免该任务被自动恢复后,源端数据覆盖目标实例的数据。

  • 本页导读 (1)
文档反馈