源库为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占用源和目标库一定读写资源,可能会导致数据库的负载上升。 由于全量数据迁移会并发执行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的库表结构迁移功能,否则可能会因为数据类型不兼容而导致任务失败。 源库和目标库的时区必须保持一致。 在增量迁移过程中,不支持使用Oracle Data Pump向源库导入数据,否则可能会导致数据丢失。 您自定义的Type可以迁移到目标PolarDB PostgreSQL版(兼容Oracle)集群,Oracle自动生成的Type Object(即内置对象)不会被迁移。
说明 PolarDB PostgreSQL版(兼容Oracle)集群已经支持Oracle中的内置对象,您无需迁移。 DTS的校验对象为数据内容,暂不支持Sequence等元数据的校验,您需要自行校验。 由于业务切换到目标端后,新写入的Sequence不会按照源库的Sequence最大值作为初始值去递增,您需要在业务切换前,更新目标库的Sequence值。更多信息,请参见更新目标库的Sequence值。 若为全量迁移或增量迁移任务,且源数据库中要迁移的表包含外键、触发器、事件触发器,如果目标库账号为高权限账号或者super权限账号,全量或增量迁移时DTS会以Session级别暂时将session_replication_role的参数值设置为replica;如果目标库账号没有该权限,您需要手动将目标数据库中session_replication_role的参数值设置为replica。在此期间(全量迁移或增量迁移过程中session_replication_role的参数值为replica),若源库存在级联更新、删除操作,则可能会导致数据不一致。在DTS迁移任务释放后,您可以将session_replication_role的参数值改回origin。 若实例运行失败,DTS技术支持人员将在8小时内尝试恢复该实例。在恢复失败实例的过程中,可能会对该实例进行重启、调整参数等操作。
说明 在调整参数时,仅会修改实例的参数,不会对数据库中的参数进行修改。可能修改的参数,包括但不限于修改实例参数中的参数。
|
自建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: 源库的操作限制:
|
其他限制 | 在增量迁移过程中,不支持使用Oracle Data Pump向源库导入数据,否则可能会导致数据丢失。 不支持迁移外部表。 执行数据迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据迁移。否则全量数据迁移时DTS占用源和目标库一定读写资源,可能会导致数据库的负载上升。 由于全量数据迁移会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量迁移完成后目标数据库的表存储空间会比源实例的表存储空间大。 DTS会尝试恢复七天之内迁移失败任务。因此业务切换至目标实例前,请务必结束或释放该任务,或者将DTS访问目标实例账号的写权限用revoke 命令回收掉。避免该任务被自动恢复后,源端数据覆盖目标实例的数据。 若目标库的DDL写入失败,DTS任务会继续运行,您需要在任务日志中查看执行失败的DDL。查看任务日志的方法,请参见查询任务日志。 需确保源库和目标库的字符集兼容,否则可能会导致数据不一致或任务失败。 建议使用DTS的库表结构迁移功能,否则可能会因为数据类型不兼容而导致任务失败。 源库和目标库的时区必须保持一致。 若您将列名仅大小写不同的字段写入到目标MySQL数据库的同一个表中,可能会因为MySQL数据库列名大小写不敏感,导致迁移结果不符合预期。 在数据迁移完成后,建议使用analyze table <表名> 命令以确认数据均已写入目标表。例如,在MySQL触发HA切换机制后,可能会导致数据只写到了内存,从而造成数据丢失。 若实例运行失败,DTS技术支持人员将在8小时内尝试恢复该实例。在恢复失败实例的过程中,可能会对该实例进行重启、调整参数等操作。
说明 在调整参数时,仅会修改实例的参数,不会对数据库中的参数进行修改。可能修改的参数,包括但不限于修改实例参数中的参数。
|
特殊情况 | 当目标库为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: 源库的操作限制:
|
其他限制 | 在增量迁移过程中,不支持使用Oracle Data Pump向源库导入数据,否则可能会导致数据丢失。 不支持迁移外部表。 执行数据迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据迁移。否则全量数据迁移时DTS占用源和目标库一定读写资源,可能会导致数据库的负载上升。 由于全量数据迁移会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量迁移完成后目标数据库的表存储空间会比源实例的表存储空间大。 DTS会尝试恢复七天之内迁移失败任务。因此业务切换至目标实例前,请务必结束或释放该任务,或者将DTS访问目标实例账号的写权限用revoke 命令回收掉。避免该任务被自动恢复后,源端数据覆盖目标实例的数据。 若目标库的DDL写入失败,DTS任务会继续运行,您需要在任务日志中查看执行失败的DDL。查看任务日志的方法,请参见查询任务日志。 需确保源库和目标库的字符集兼容,否则可能会导致数据不一致或任务失败。 建议使用DTS的库表结构迁移功能,否则可能会因为数据类型不兼容而导致任务失败。 源库和目标库的时区必须保持一致。 若实例运行失败,DTS技术支持人员将在8小时内尝试恢复该实例。在恢复失败实例的过程中,可能会对该实例进行重启、调整参数等操作。
说明 在调整参数时,仅会修改实例的参数,不会对数据库中的参数进行修改。可能修改的参数,包括但不限于修改实例参数中的参数。
|
特殊情况 | 当目标库为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: 源库的操作限制:
|
其他限制 | 仅支持表级别的迁移,且目标表暂不支持AO表。 若使用列映射时为非全表迁移或者源与目标表结构不一致,则目标端比源端缺少的列的数据将会丢失。 由于目标AnalyticDB PostgreSQL版不支持写入字符串的终止符('\0'),若待迁移的数据中包含该终止符,DTS不会将该终止符写入到目标库,从而会导致数据不一致。 不支持迁移外部表。 在增量迁移过程中,不支持使用Oracle Data Pump向源库导入数据,否则可能会导致数据丢失。 执行数据迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据迁移。否则全量数据迁移时DTS占用源和目标库一定读写资源,可能会导致数据库的负载上升。 由于全量数据迁移会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量迁移完成后目标数据库的表存储空间会比源实例的表存储空间大。 DTS会尝试恢复七天之内迁移失败任务。因此业务切换至目标实例前,请务必结束或释放该任务,或者将DTS访问目标实例账号的写权限用revoke 命令回收掉。避免该任务被自动恢复后,源端数据覆盖目标实例的数据。 若实例运行失败,DTS技术支持人员将在8小时内尝试恢复该实例。在恢复失败实例的过程中,可能会对该实例进行重启、调整参数等操作。
说明 在调整参数时,仅会修改实例的参数,不会对数据库中的参数进行修改。可能修改的参数,包括但不限于修改实例参数中的参数。
|
自建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: 源库的操作限制:
|
其他限制 | 在增量迁移过程中,不支持使用Oracle Data Pump向源库导入数据,否则可能会导致数据丢失。 不支持迁移外部表。 执行数据迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据迁移。否则全量数据迁移时DTS占用源和目标库一定读写资源,可能会导致数据库的负载上升。 由于全量数据迁移会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量迁移完成后目标数据库的表存储空间会比源实例的表存储空间大。 DTS会尝试恢复七天之内迁移失败任务。因此业务切换至目标实例前,请务必结束或释放该任务,或者将DTS访问目标实例账号的写权限用revoke 命令回收掉。避免该任务被自动恢复后,源端数据覆盖目标实例的数据。 在迁移期间,若目标Kafka发生了扩容或缩容,您需要重启实例。 若实例运行失败,DTS技术支持人员将在8小时内尝试恢复该实例。在恢复失败实例的过程中,可能会对该实例进行重启、调整参数等操作。
说明 在调整参数时,仅会修改实例的参数,不会对数据库中的参数进行修改。可能修改的参数,包括但不限于修改实例参数中的参数。
|
自建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: 源库的操作限制:
|
其他限制 | 在增量迁移过程中,不支持使用Oracle Data Pump向源库导入数据,否则可能会导致数据丢失。 不支持迁移外部表。 执行数据迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据迁移。否则全量数据迁移时DTS占用源和目标库一定读写资源,可能会导致数据库的负载上升。 由于全量数据迁移会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量迁移完成后目标数据库的表存储空间会比源实例的表存储空间大。 DTS会尝试恢复七天之内迁移失败任务。因此业务切换至目标实例前,请务必结束或释放该任务,或者将DTS访问目标实例账号的写权限用revoke 命令回收掉。避免该任务被自动恢复后,源端数据覆盖目标实例的数据。 若实例运行失败,DTS技术支持人员将在8小时内尝试恢复该实例。在恢复失败实例的过程中,可能会对该实例进行重启、调整参数等操作。
说明 在调整参数时,仅会修改实例的参数,不会对数据库中的参数进行修改。可能修改的参数,包括但不限于修改实例参数中的参数。
|