源库的注意事项及限制
本文为您介绍不同类型数据库作为源库时的限制,以帮助您提前了解相关注意事项及DTS功能的限制,从而有效减少实例异常的发生。
背景信息
本文中主要的相关名词解释如下表所示。
名词 | 说明 |
库表结构任务 | 库表结构同步或库表结构迁移模块运行时对应的任务。 |
全量任务 | 全量同步或全量迁移模块运行时对应的任务。 |
增量任务 | 增量同步或增量迁移模块运行时对应的任务。 说明 数据同步实例默认包含增量任务(增量同步)。 |
任务类型 | 包含库表结构任务、全量任务、增量任务。 |
自建数据库 | 配置实例时,接入方式不是云实例的数据库实例。自建数据库包含第三方云的数据库实例、部署在您本地的数据库、部署在ECS实例的数据库。 |
数据同步或迁移实例
通用注意事项及限制
所有类型的数据库在作为源库时,均存在以下限制条件:
请确保源库处于正常运行的状态。
源库所属的服务器需具备足够的出口带宽,否则将会影响DTS实例的运行速率。
请确保DTS服务的IP地址段能够被自动或手动添加至源库的安全设置中,以允许DTS服务器的访问。更多信息,请参见添加DTS服务器的IP地址段。
若DTS实例包含增量任务:
数据库为记录事务日志的只读实例(如RDS MySQL 5.7或8.0版本),可以作为源库。
数据库为不记录事务日志的只读实例(如RDS MySQL 5.6版本),不可以作为源库。
若源库待同步或迁移的对象为整库,且该库中的触发器(Trigger)会更新库内某个表时,可能导致源库与目标库的数据不一致。更多信息,请参见源库存在触发器时如何配置同步或迁移作业
数据库注意事项及限制
不同类型的数据库作为源库时,存在不同的注意事项及限制条件,具体详情如下所示。
MySQL系列数据库
MySQL
待同步或迁移的表需具备主键或唯一约束,且字段需具有唯一性,否则可能会导致目标数据库中出现重复数据。
说明双向同步支持同步不具备主键和唯一约束的表。更多信息,请参见同步无主键和唯一约束的表。
若同步或迁移对象为表级别且需要进行编辑(例如表或列名映射),则当单次同步或迁移任务的表数量超过1000张时,建议您将待同步或迁移的表分批配置为多个DTS实例,或将其配置为整库的同步或迁移实例。
若DTS实例包含增量任务,Binlog日志有如下要求:
源库需开启Binlog日志,并确保
binlog_row_image
的参数值为full
。否则,预检查阶段将提示报错,且无法成功启动DTS实例。说明若源库为自建MySQL数据库,您还需确保
binlog_format
的参数值为row
。RDS MySQL实例默认已开启Binlog。设置参数的方法,请参见设置实例参数;自建MySQL开启Binlog的方法,请参见为自建MySQL创建账号并设置binlog。
若源库为双主集群(两者互为主从)的自建MySQL,为确保DTS能够获取全部的Binlog日志,需要启用
log_slave_updates
参数。
RDS MySQL实例的本地Binlog日志需保留3天及以上(建议保留7天),自建MySQL数据库的本地Binlog日志需保留7天及以上。否则DTS可能会因无法获取Binlog而导致任务失败,极端情况下甚至可能会导致数据不一致或数据丢失。由于您所设置的Binlog日志保存时间低于DTS要求的时间而导致的问题,不在DTS的SLA保障范围内。
说明RDS MySQL实例的本地Binlog日志保留时长的设置方法,请参见自动删除本地日志。
在全量任务和增量任务运行过程中,DTS会以Session级别暂时禁用约束检查以及外键级联操作。若任务运行时源库存在级联更新或删除操作,可能会导致数据不一致。
目前DTS仅支持两个MySQL数据库之间的双向同步,暂不支持多个MySQL数据库之间的双向同步。
RENAME TABLE操作可能导致源库与目标库的数据不一致,您可以在配置实例对象时将该表所属的整个数据库作为任务对象,并确保RENAME TABLE操作前后的表所属的数据库均在同步对象中。
若任务对象为单个或多个表(非整库),在实例运行时,请勿对源库的同步对象使用pt-online-schema-change等类似工具执行在线DDL变更,否则会导致实例运行失败。
若源库为已开通全密态(EncDB)功能的RDS MySQL实例,则不支持全量任务。
源库为自建MySQL数据库时,若在DTS实例运行期间源库发生主备切换,将会导致DTS实例运行失败。
DTS会在源库定时执行CREATE DATABASE IF NOT EXISTS `test`命令创建
test
表,并写入心跳数据以推进Binlog位点。若在配置实例时,是否去除正反向任务的心跳表sql选择为是(或者DTS实例使用的源库账号没有建表权限),且源库长时间未执行DML操作,则可能会导致延迟信息不准确。说明若实例显示的延迟时间过大,您可以在源库执行一次DML操作来更新延迟信息。
由于全量任务会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量任务完成后目标库的表存储空间会大于源库的表存储空间。
在DTS实例运行期间,不记录Binlog的变更操作所产生的数据(例如通过物理备份功能恢复、级联操作等产生的数据),不会被同步或迁移到目标库。
说明若有该情况,您可以在业务允许的前提条件下,通过如下方式进行处理:
同步实例:通过修改同步对象功能,移除该数据所属的库表,然后将该数据所属的库表重新添加到待同步对象。更多信息,请参见修改同步对象。
迁移实例:重新迁移全量数据。
PolarDB for MySQL
不支持同步或迁移源PolarDB MySQL版集群的只读节点。
不支持同步或迁移OSS外表。
待同步或迁移的表需具备主键或唯一约束,且字段需具有唯一性,否则可能会导致目标数据库中出现重复数据。
说明双向同步支持同步不具备主键和唯一约束的表。更多信息,请参见同步无主键和唯一约束的表。
若同步或迁移对象为表级别且需要进行编辑(例如表或列名映射),则当单次同步或迁移任务的表数量超过1000张时,建议您将待同步或迁移的表分批配置为多个DTS实例,或将其配置为整库的同步或迁移实例。
若DTS实例包含增量任务,Binlog日志有如下要求:
源库需开启Binlog日志,并确保
loose_polar_log_bin
的参数值为ON
。否则,预检查阶段将提示报错,且无法成功启动DTS实例。开启Binlog日志和修改参数的方法,请参见开启Binlog和设置集群参数和节点参数。说明PolarDB MySQL版集群开启Binlog日志会占用一定的存储空间,需要收取存储费用。
PolarDB MySQL版集群的本地Binlog日志需保留3天及以上(建议保留7天),否则DTS可能会因无法获取Binlog而导致任务失败,极端情况下甚至可能会导致数据不一致或数据丢失。由于您所设置的Binlog日志保存时间低于DTS要求的时间而导致的问题,不在DTS的SLA保障范围内。
说明PolarDB MySQL版集群的本地Binlog日志保留时长的设置方法,请参见修改保存时长。
在全量任务和增量任务运行过程中,DTS会以Session级别暂时禁用约束检查以及外键级联操作。若任务运行时源库存在级联更新或删除操作,可能会导致数据不一致。
DTS会在源库定时执行CREATE DATABASE IF NOT EXISTS `test`命令创建
test
表,并写入心跳数据以推进Binlog位点。若在配置实例时,是否去除正反向任务的心跳表sql选择为是(或者DTS实例使用的源库账号没有建表权限),且源库长时间未执行DML操作,则可能会导致延迟信息不准确。说明若实例显示的延迟时间过大,您可以在源库执行一次DML操作来更新延迟信息。
由于全量任务会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量任务完成后目标库的表存储空间会大于源库的表存储空间。
在DTS实例运行期间,不记录Binlog的变更操作所产生的数据(例如通过物理备份功能恢复、级联操作等产生的数据),不会被同步或迁移到目标库。
说明若有该情况,您可以在业务允许的前提条件下,通过如下方式进行处理:
同步实例:通过修改同步对象功能,移除该数据所属的库表,然后将该数据所属的库表重新添加到待同步对象。更多信息,请参见修改同步对象。
迁移实例:重新迁移全量数据。
MariaDB
待同步或迁移的表需具备主键或唯一约束,且字段需具有唯一性,否则可能会导致目标数据库中出现重复数据。
若同步或迁移对象为表级别且需要进行编辑(例如表或列名映射),则当单次同步或迁移任务的表数量超过1000张时,建议您将待同步或迁移的表分批配置为多个DTS实例,或将其配置为整库的同步或迁移实例。
若DTS实例包含增量任务,Binlog日志有如下要求:
源库需开启Binlog日志,并确保
binlog_row_image
的参数值为full
。否则,预检查阶段将提示报错,且无法成功启动DTS实例。说明若源库为自建MariaDB数据库,您还需确保
binlog_format
的参数值为row
。RDS MariaDB实例默认已开启Binlog。设置参数的方法,请参见设置实例参数。
RDS MariaDB实例的本地Binlog日志需保留3天及以上(建议保留7天),自建MariaDB数据库实例的本地Binlog日志需保留7天及以上。否则DTS可能会因无法获取Binlog而导致任务失败,极端情况下甚至可能会导致数据不一致或数据丢失。由于您所设置的Binlog日志保存时间低于DTS要求的时间而导致的问题,不在DTS的SLA保障范围内。
在全量任务和增量任务运行过程中,DTS会以Session级别暂时禁用约束检查以及外键级联操作。若任务运行时源库存在级联更新或删除操作,可能会导致数据不一致。
源库为自建MariaDB数据库时,若源库在DTS实例运行期间发生主备切换,将会导致DTS实例运行失败。
DTS会在源库定时执行CREATE DATABASE IF NOT EXISTS `test`命令创建
test
表,并写入心跳数据以推进Binlog位点。若在配置实例时,是否去除正反向任务的心跳表sql选择为是(或者DTS实例使用的源库账号没有建表权限),且源库长时间未执行DML操作,则可能会导致延迟信息不准确。说明若实例显示的延迟时间过大,您可以在源库执行一次DML操作来更新延迟信息。
由于全量任务会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量任务完成后目标库的表存储空间会大于源库的表存储空间。
在DTS实例运行期间,不记录Binlog的变更操作所产生的数据(例如通过物理备份功能恢复、级联操作等产生的数据),不会被同步或迁移到目标库。
说明若有该情况,您可以在业务允许的前提条件下,通过如下方式进行处理:
同步实例:通过修改同步对象功能,移除该数据所属的库表,然后将该数据所属的库表重新添加到待同步对象。更多信息,请参见修改同步对象。
迁移实例:重新迁移全量数据。
OceanBase(MySQL)
说明当前OceanBase(MySQL模式)数据库仅支持作为迁移实例的源库。
若源库为云数据库OceanBase版,则只支持集群实例,不支持租户实例。
待迁移的表需具备主键或唯一约束,且字段需具有唯一性,否则可能会导致目标数据库中出现重复数据。
若迁移对象为表级别且需要进行编辑(例如表或列名映射),则当单次迁移任务的表数量超过1000张时,建议您将待迁移的表分批配置为多个DTS实例,或将其配置为整库的迁移实例。
源库为云数据库OceanBase版和自建OceanBase数据库,均需手动添加IP白名单,以允许DTS的访问。更多信息,请参见设置白名单分组和DTS服务器的IP地址段。
GEOMETRY类型的数据仅支持全量迁移,不支持增量迁移。
若DTS实例包含增量任务,Binlog日志有如下要求:
源库需开启Binlog日志。否则,预检查阶段将提示报错,且无法成功启动DTS实例。
说明云数据库OceanBase版实例开启Binlog和设置参数的方法,请参见开通 Binlog 日志服务。
云数据库OceanBase版实例的本地Binlog日志需保留3天及以上(建议保留7天),自建OceanBase数据库的本地Binlog日志需保留7天及以上。否则DTS可能会因无法获取Binlog而导致任务失败,极端情况下甚至可能会导致数据不一致或数据丢失。由于您所设置的Binlog日志保存时间低于DTS要求的时间而导致的问题,不在DTS的SLA保障范围内。
说明云数据库OceanBase版实例的本地Binlog日志保留时长的设置方法,请参见管理 Binlog 日志。
在全量任务和增量任务运行过程中,DTS会以Session级别暂时禁用约束检查以及外键级联操作。若任务运行时源库存在级联更新或删除操作,可能会导致数据不一致。
由于全量任务会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量任务完成后目标库的表存储空间会大于源库的表存储空间。
在DTS实例运行期间,不记录Binlog的变更操作所产生的数据(例如通过物理备份功能恢复、级联操作等产生的数据),不会被同步或迁移到目标库。
说明若有该情况,您可以在业务允许的前提条件下,通过如下方式进行处理:
同步实例:通过修改同步对象功能,移除该数据所属的库表,然后将该数据所属的库表重新添加到待同步对象。更多信息,请参见修改同步对象。
迁移实例:重新迁移全量数据。
PostgreSQL系列数据库
PostgreSQL
待同步或迁移的表需具备主键或唯一约束,且字段需具有唯一性,否则可能会导致目标数据库中出现重复数据。
若同步或迁移对象为表级别且需要进行编辑(例如表或列名映射),则当单次同步或迁移任务的表数量超过1000张时,建议您将待同步或迁移的表分批配置为多个DTS实例,或将其配置为整库的同步或迁移实例。
若DTS实例包含增量任务,WAL日志有如下要求:
源库需开启WAL日志,即需将
wal_level
的参数值设置为logical
。否则,预检查阶段将提示报错,且无法成功启动DTS实例。说明设置参数的方法,请参见设置实例参数。
RDS PostgreSQL实例的WAL日志需保留3天及以上(建议保留7天),自建PostgreSQL数据库的WAL日志需保留7天及以上。否则DTS可能会因无法获取WAL日志而导致任务失败,极端情况下甚至可能会导致数据不一致或数据丢失。由于您所设置的WAL日志保存时间低于DTS要求的时间而导致的问题,不在DTS的SLA保障范围内。
在全量任务和增量任务运行过程中,DTS会以Session级别暂时禁用约束检查以及外键级联操作。若任务运行时源库存在级联更新或删除操作,可能会导致数据不一致。
若DTS实例包含增量任务:
为保障增量数据任务延迟时间展示的准确性,DTS会在源库中新增一个名为
dts_postgres_heartbeat
的心跳表。由于业务切换到目标库后,新写入的Sequence不会按照源库的Sequence最大值作为初始值去递增,您需要在业务切换前,更新目标库的Sequence值。更多信息,请参见更新目标库的Sequence值。
若DTS实例包含全量任务或增量任务,且源库中要迁移的表包含外键、触发器、事件触发器:
若目标库账号为具备高权限账号或者super权限账号,全量或增量任务运行时DTS会以Session级别暂时将
session_replication_role
的参数值设置为replica
。若目标库账号不具备该权限(高权限账号和super权限账号),您需要手动将目标数据库中
session_replication_role
的参数值设置为replica
。在此期间(session_replication_role
的参数值为replica
的全量或增量任务运行过程中),若源库存在级联更新、删除操作,则可能会导致数据不一致。在DTS实例释放后,您可以将session_replication_role
的参数值改回origin
。
若源库有长事务,且DTS实例包含增量任务,则可能会导致源库长事务提交前的预写日志WAL(Write-Ahead Logging)无法清理而堆积,从而造成源库磁盘空间不足。
单个DTS实例只能同步或迁移一个数据库,如需同步或迁移多个数据库,您需要为每个数据库配置数据同步或迁移实例。
DTS实例运行期间,若同步或迁移对象的选择粒度为Schema,在待同步或迁移的Schema中创建了新表或者对待同步或迁移的表使用了RENAME命令,您需要在该表写入数据前执行
ALTER TABLE schema.table REPLICA IDENTITY FULL;
命令,以保障该表数据的一致性。执行该命令期间,建议确保不要有锁表操作,否则会导致表锁死。说明需将上述命令中的
schema
和table
替换成真实的Schema名和表名。建议您在业务低峰期进行操作。
DTS会在源库中创建以下临时表,用于获取增量数据的DDL、增量表的结构、心跳信息等。在DTS实例运行期间,请勿删除源库中的临时表,否则会导致DTS实例异常。
public.dts_pg_class
、public.dts_pg_attribute
、public.dts_pg_type
、public.dts_pg_enum
、public.dts_postgres_heartbeat
、public.dts_ddl_command
、public.dts_args_session
。说明临时表会在DTS实例释放后自动删除。
DTS实例的增量任务运行期间,DTS会在源库中创建前缀为
dts_sync_
的replication slot用于复制数据。通过该replication slot,DTS可以获取源库15分钟内的增量日志。说明DTS实例释放后会主动删除该replication slot,若您在迁移期间修改了数据库密码,或者删除了DTS的访问IP白名单,则会导致该replication slot无法自动删除,此时需要您在源库手动删除,避免其持续累积占用磁盘空间导致RDS PostgreSQL实例不可用。
当DTS实例释放或失败时,DTS会主动清理该replication slot;若源库发生了主备切换,则需要您登录备库来手动清理。
若源库为RDS PostgreSQL实例:
为保障DTS实例的正常运行,避免主备切换导致的逻辑订阅中断,需要RDS PostgreSQL实例支持并开启Logical Replication Slot Failover。开启方式,请参见逻辑复制槽故障转移(Logical Replication Slot Failover)。
在DTS实例运行期间,请勿修改RDS PostgreSQL实例的连接地址和可用区,否则会导致DTS实例运行失败。
若源库为自建PostgreSQL数据库:
需要确保
max_wal_senders
和max_replication_slots
的参数值,均大于当前数据库复制槽已使用数与需要以该自建PostgreSQL为源创建的DTS实例数的总和。在DTS实例运行期间,若源库发生主备切换,将会导致DTS实例运行失败。
若源库为Google Cloud Platform Cloud SQL for PostgreSQL,源库的数据库账号需填入具有cloudsqlsuperuser权限的账号。在选择同步或迁移对象时需选择此账号有权限管理的对象,或者给此账号添加目标对象的Owner权限。
说明具有cloudsqlsuperuser权限的账号,无法管理Owner为其他cloudsqlsuperuser权限账号的数据。
DTS的校验对象为数据内容,暂不支持Sequence等元数据的校验,您需要自行校验。
PolarDB for PostgreSQL
待同步或迁移的表需具备主键或唯一约束,且字段需具有唯一性,否则可能会导致目标数据库中出现重复数据。
若同步或迁移对象为表级别且需要进行编辑(例如表或列名映射),则当单次同步或迁移任务的表数量超过1000张时,建议您将待同步或迁移的表分批配置为多个DTS实例,或将其配置为整库的同步或迁移实例。
若DTS实例包含增量任务,WAL日志有如下要求:
源库需开启WAL日志,即需将
wal_level
的参数值设置为logical
。否则,预检查阶段将提示报错,且无法成功启动DTS实例。说明设置参数的方法,请参见设置集群参数。
PolarDB PostgreSQL版集群的WAL日志需保留3天及以上(建议保留7天),自建PostgreSQL数据库的WAL日志需保留7天及以上。否则DTS可能会因无法获取WAL而导致任务失败,极端情况下甚至可能会导致数据不一致或数据丢失。由于您所设置的WAL日志保存时间低于DTS要求的时间而导致的问题,不在DTS的SLA保障范围内。
为保障DTS实例的正常运行,避免主备切换导致的逻辑订阅中断,需要PolarDB PostgreSQL版(兼容Oracle)集群支持并开启Logical Replication Slot Failover。开启方式,请参见逻辑复制槽故障转移(Logical Replication Slot Failover)。
在全量任务和增量任务运行过程中,DTS会以Session级别暂时禁用约束检查以及外键级联操作。若任务运行时源库存在级联更新或删除操作,可能会导致数据不一致。
若DTS实例包含增量任务:
为保障增量数据任务延迟时间展示的准确性,DTS会在源库中新增一个名为
dts_postgres_heartbeat
的心跳表。由于业务切换到目标库后,新写入的Sequence不会按照源库的Sequence最大值作为初始值去递增,您需要在业务切换前,更新目标库的Sequence值。更多信息,请参见更新目标库的Sequence值。
若DTS实例包含全量任务或增量任务,且源库中要迁移的表包含外键、触发器、事件触发器:
若目标库账号为具备高权限账号或者super权限账号,全量或增量任务运行时DTS会以Session级别暂时将
session_replication_role
的参数值设置为replica
。若目标库账号不具备该权限(高权限账号和super权限账号),您需要手动将目标数据库中
session_replication_role
的参数值设置为replica
。在此期间(session_replication_role
的参数值为replica
的全量或增量任务运行过程中),若源库存在级联更新、删除操作,则可能会导致数据不一致。在DTS实例释放后,您可以将session_replication_role
的参数值改回origin
。
若源库有长事务,且DTS实例包含增量任务,则可能会导致源库长事务提交前的预写日志WAL(Write-Ahead Logging)无法清理而堆积,从而造成源库磁盘空间不足。
单个DTS实例只能同步或迁移一个数据库,如需同步或迁移多个数据库,您需要为每个数据库配置数据同步或迁移实例。
DTS实例运行期间,若同步或迁移对象的选择粒度为Schema,在待同步或迁移的Schema中创建了新表或者对待同步或迁移的表使用了RENAME命令,您需要在该表写入数据前执行
ALTER TABLE schema.table REPLICA IDENTITY FULL;
命令,以保障该表数据的一致性。执行该命令期间,建议确保不要有锁表操作,否则会导致表锁死。说明需将上述命令中的
schema
和table
替换成真实的Schema名和表名。建议您在业务低峰期进行操作。
DTS会在源库中创建以下临时表,用于获取增量数据的DDL、增量表的结构、心跳信息等。在DTS实例运行期间,请勿删除源库中的临时表,否则会导致DTS实例异常。
public.dts_pg_class
、public.dts_pg_attribute
、public.dts_pg_type
、public.dts_pg_enum
、public.dts_postgres_heartbeat
、public.dts_ddl_command
、public.dts_args_session
。说明临时表会在DTS实例释放后自动删除。
DTS实例的增量任务运行期间,DTS会在源库中创建前缀为
dts_sync_
的replication slot用于复制数据。通过该replication slot,DTS可以获取源库15分钟内的增量日志。说明DTS实例释放后会主动删除该replication slot,若您在迁移期间修改了数据库密码,或者删除了DTS的访问IP白名单,则会导致该replication slot无法自动删除,此时需要您在源库手动删除,避免其持续累积占用磁盘空间导致RDS PostgreSQL实例不可用。
当DTS实例释放或失败时,DTS会主动清理该replication slot;若源库发生了主备切换,则需要您登录备库来手动清理。
DTS的校验对象为数据内容,暂不支持Sequence等元数据的校验,您需要自行校验。
PolarDB(兼容Oracle)
待同步或迁移的表需具备主键或唯一约束,且字段需具有唯一性,否则可能会导致目标数据库中出现重复数据。
若同步或迁移对象为表级别且需要进行编辑(例如表或列名映射),则当单次同步或迁移任务的表数量超过1000张时,建议您将待同步或迁移的表分批配置为多个DTS实例,或将其配置为整库的同步或迁移实例。
若DTS实例包含增量任务,WAL日志有如下要求:
源库需开启WAL日志,即需将
wal_level
的参数值设置为logical
。否则,预检查阶段将提示报错,且无法成功启动DTS实例。说明设置参数的方法,请参见设置集群参数。
PolarDB PostgreSQL版(兼容Oracle)集群的WAL日志需保留3天及以上(建议保留7天),自建PostgreSQL数据库的WAL日志需保留7天及以上。否则DTS可能会因无法获取WAL而导致任务失败,极端情况下甚至可能会导致数据不一致或数据丢失。由于您所设置的WAL日志保存时间低于DTS要求的时间而导致的问题,不在DTS的SLA保障范围内。
为保障DTS实例的正常运行,避免主备切换导致的逻辑订阅中断,需要PolarDB PostgreSQL版(兼容Oracle)集群支持并开启Logical Replication Slot Failover。开启方式,请参见逻辑复制槽故障转移(Logical Replication Slot Failover)。
在全量任务和增量任务运行过程中,DTS会以Session级别暂时禁用约束检查以及外键级联操作。若任务运行时源库存在级联更新或删除操作,可能会导致数据不一致。
若DTS实例包含增量任务:
为保障增量数据任务延迟时间展示的准确性,DTS会在源库中新增一个名为
dts_postgres_heartbeat
的心跳表。由于业务切换到目标库后,新写入的Sequence不会按照源库的Sequence最大值作为初始值去递增,您需要在业务切换前,更新目标库的Sequence值。更多信息,请参见更新目标库的Sequence值。
若DTS实例包含全量任务或增量任务,且源库中要迁移的表包含外键、触发器、事件触发器:
若目标库账号为具备高权限账号或者super权限账号,全量或增量任务运行时DTS会以Session级别暂时将
session_replication_role
的参数值设置为replica
。若目标库账号不具备该权限(高权限账号和super权限账号),您需要手动将目标数据库中
session_replication_role
的参数值设置为replica
。在此期间(session_replication_role
的参数值为replica
的全量或增量任务运行过程中),若源库存在级联更新、删除操作,则可能会导致数据不一致。在DTS实例释放后,您可以将session_replication_role
的参数值改回origin
。
若源库有长事务,且DTS实例包含增量任务,则可能会导致源库长事务提交前的预写日志WAL(Write-Ahead Logging)无法清理而堆积,从而造成源库磁盘空间不足。
单个DTS实例只能同步或迁移一个数据库,如需同步或迁移多个数据库,您需要为每个数据库配置数据同步或迁移实例。
DTS实例运行期间,若同步或迁移对象的选择粒度为Schema,在待同步或迁移的Schema中创建了新表或者对待同步或迁移的表使用了RENAME命令,您需要在该表写入数据前执行
ALTER TABLE schema.table REPLICA IDENTITY FULL;
命令,以保障该表数据的一致性。执行该命令期间,建议确保不要有锁表操作,否则会导致表锁死。说明需将上述命令中的
schema
和table
替换成真实的Schema名和表名。建议您在业务低峰期进行操作。
DTS会在源库中创建以下临时表,用于获取增量数据的DDL、增量表的结构、心跳信息等。在DTS实例运行期间,请勿删除源库中的临时表,否则会导致DTS实例异常。
public.dts_pg_class
、public.dts_pg_attribute
、public.dts_pg_type
、public.dts_pg_enum
、public.dts_postgres_heartbeat
、public.dts_ddl_command
、public.dts_args_session
。说明临时表会在DTS实例释放后自动删除。
DTS实例的增量任务运行期间,DTS会在源库中创建前缀为
dts_sync_
的replication slot用于复制数据。通过该replication slot,DTS可以获取源库15分钟内的增量日志。说明DTS实例释放后会主动删除该replication slot,若您在迁移期间修改了数据库密码,或者删除了DTS的访问IP白名单,则会导致该replication slot无法自动删除,此时需要您在源库手动删除,避免其持续累积占用磁盘空间导致RDS PostgreSQL实例不可用。
当DTS实例释放或失败时,DTS会主动清理该replication slot;若源库发生了主备切换,则需要您登录备库来手动清理。
DTS的校验对象为数据内容,暂不支持Sequence等元数据的校验,您需要自行校验。
NoSQL系列
Tair/Redis
源端需开启数据日志和本地AOF(Append Only File)日志。
若源端为2.8版本Redis实例,则不支持增量任务。
若源端为只读实例或者DTS账号没有写(SETEX)权限,上报的延迟可能不准确。
源端为存储介质是持久内存的Tair(企业版)时,需要开启appendonly参数。
为保障同步或迁移任务的质量,DTS会在源端插入一个前缀为
DTS_REDIS_TIMESTAMP_HEARTBEAT
的Key用于记录更新时间点,如果源端为集群架构,DTS会在各个shard上均插入该Key。同步过程中会过滤该Key,同步任务结束,该Key就会过期。为保障DTS实例的稳定性,建议将配置文件
redis.conf
中repl-backlog-size
参数的值适当调大。请勿在源端中执行
FLUSHDB
和FLUSHALL
命令,否则将导致源端和目标端的数据不一致。若源端中的某些Key使用了过期(expire)策略,由于可能存在Key已过期但未被及时删除的情况,所以在目标端中查看到的Key数量(例如通过info命令查看)会比源端的Key数量少。
源端单机版Redis同步到目标端集群版Redis的操作限制:由于集群cluster只允许单个命令操作单个slot,若在源端执行多Key操作时,Key不在同一个slot或涉及多个slot,则会出现报错
CROSSSLOT Keys in request don't hash to the same slot
,建议在DTS同步过程中仅执行单Key操作,以免导致链路中断。Redis实例变配后,需要暂停再启动DTS实例。
Redis实例扩缩容(如增加或者减少分片)后,需要重新配置DTS实例。
若源端为自建Redis:
且在同步期间该自建Redis的连接地址发生变化,则需要重新配置任务。
Slave和Master之间的复制超时时间参数repl-timeout建议使用
config set repl-timeout 600
命令设置为600秒。若源端数据量比较大,可以适当增大repl-timeout参数的值。
Redis社区版实例不支持双向同步。
部署在ECS实例的Redis集群,除了控制台选择的ECS实例,其他ECS实例均需要手动添加DTS服务的IP地址段。
在DTS实例运行过程中出现包括但不限于以下情况,可能会使全量数据重新同步或迁移至目标端,从而导致数据不一致。
源端Redis发生连接闪断,导致断点续传失败。
源端Redis发生主备切换或故障切换。
源端Redis的连接地址发生变化。
修改DTS实例的同步对象。
若源端为已开启TLS(Transport Layer Security)加密功能的云数据库Tair(兼容Redis)实例,则必须以SSL安全连接的方式接入到DTS(不支持TLSv1.3)。当前暂不支持已开启SSL的云数据库Tair(兼容Redis)实例,以云实例的方式接入DTS。
若源端已开启透明数据加密TDE功能,则暂不支持通过DTS同步或迁移数据。
MongoDB
待同步或迁移集合中的
_id
字段需具有唯一性,否则可能会导致数据不一致。若待同步或迁移的对象为集合级别,且需进行编辑(如集合的名称映射),则单次同步或迁移任务仅支持至多1000张集合。当超出数量限制,实例提交后会显示请求报错,此时建议您拆分待同步或迁移的集合,分批配置多个实例,或者配置整库的同步或迁移实例。
源库为MongoDB(单节点架构)时仅支持作为迁移实例的源库,且不支持增量迁移。
源库为Azure Cosmos DB for MongoDB或弹性集群的Amazon DocumentDB时,仅支持作为迁移实例的源库,且仅支持全量迁移。
不支持同步或迁移admin和local库中的数据。
暂不支持同步或迁移包含TTL(Time To Live)索引的集合。若待同步或迁移的数据库中包含TTL索引,则可能会导致数据不一致。
源库待同步或迁移的单条数据不能超过16 MB,否则会导致实例运行失败。
若DTS实例包含增量任务:
源库需开启Oplog日志,并确保Oplog日志至少保留7天以上;或者开启变更流(Change Streams),并确保DTS能够通过Change Streams订阅到源库最近7天内的数据变更。否则可能会因无法获取源库的数据变更而导致实例运行失败,极端情况下甚至可能会导致数据不一致或丢失。由此导致的问题,不在DTS的SLA保障范围内。
重要建议通过Oplog日志获取源库的数据变更。
仅4.0及以上版本的MongoDB支持通过Change Streams获取数据变更。
源库为Amazon DocumentDB(非弹性集群)时,需要手动开启Change Streams,并在配置实例时将迁移方式选择为ChangeStream,将架构类型选择为分片集群架构。
源库为分片集群架构的MongoDB时:
若源库的均衡器Balancer存在均衡数据的行为,则可能会导致实例产生延迟。
请确保分片集群架构的MongoDB实例中没有孤立文档,否则可能会导致数据不一致甚至任务失败。更多信息,请参见孤立文档和如何清理MongoDB(分片集群架构)的孤立文档。
不保留事务信息,即源库中的事务同步或迁移到目标库时会转变为单条的记录。
建议源库和目标库的MongoDB的数据库版本保持一致,或者从低版本迁移到高版本以保障兼容性。如为高版本迁移至低版本,可能存在数据库兼容性问题。
当源库为自建MongoDB时:
在DTS实例运行时,如果源库进行主备切换,将会导致DTS实例运行失败。
由于DTS的延迟时间是根据迁移到目标库最后一条数据的时间戳和当前时间戳对比得出,源库长时间未执行更新操作可能导致延迟信息不准确。如果DTS实例显示的延迟时间过大,您可以在源库执行一个更新操作来更新延迟信息。
说明如果迁移对象选择为整库,您还可以创建心跳表,心跳表每秒定期更新或者写入数据。
源库的操作限制:
在库表结构和全量任务阶段,请勿执行库或集合的结构变更(包含数组类型数据的更新),否则会导致DTS实例运行失败或源库与目标库的数据不一致。
若仅执行全量数据迁移,请勿向源实例中写入新的数据,否则会导致源库和目标数据不一致。
HBase
由于不支持增量任务,HBase仅支持作为迁移实例的源库。
待迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。
如迁移对象为表级别,且需进行编辑(如表列名映射),则单次迁移任务仅支持迁移至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待迁移的表,分批配置多个任务,或者配置整库的迁移任务。
迁移对象中的字符仅支持为字母数字[a-zA-Z_0-9],如包含其他类型的字符,则会导致库表结构迁移失败。
OLAP系列
AnalyticDB MySQL 3.0
待同步或迁移的表需具备主键,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。
若DTS实例包含增量任务,则一个DTS实例仅支持同步或迁移一张数据表。若您需要进行包含多张数据表的增量任务,请创建多个DTS实例。
在DTS实例运行期间,请勿关闭源AnalyticDB MySQL版 3.0集群的Binlog,否则会导致DTS实例失运行败且无法恢复。由于关闭源端Binlog导致的DTS实例运行失败问题,只能通过重新创建实例来解决。
若DTS实例暂停超过1天,源AnalyticDB MySQL版 3.0集群的Binlog可能会过期,从而可能会导致DTS实例无法恢复。
由于AnalyticDB MySQL版 3.0集群本身存在使用限制,当该集群中的节点磁盘空间使用量超过80%时,会导致DTS实例产生延迟。因此,请提前根据待迁移的对象评估所需的存储空间,以确保目标集群具备充足的存储空间。
若DTS实例包含增量任务,需为源AnalyticDB MySQL版 3.0集群开启CDC功能,并为待同步或迁移的表开启Binlog。
说明若AnalyticDB MySQL版 3.0集群的内核版本低于3.2.1,您需要先升级内核版本再开启CDC功能。查看和升级内核版本的方法,请参见升级版本。
开启CDC功能的方法,请提交工单联系云原生数据仓库 AnalyticDB MySQL 版集群的技术支持。
开启Binlog的方法,请参见开启Binlog功能。
分布式数据库
PolarDB-X 1.0
PolarDB-X 1.0中的数据库须基于RDS MySQL(5.x版本)创建,DTS暂不支持基于RDS MySQL(8.0版本)和PolarDB MySQL创建的数据库。
不支持为PolarDB-X 1.0计算资源只读实例。
仅支持PolarDB-X 1.0存储资源通过水平拆分(分库分表),不支持为垂直拆分。
源PolarDB-X 1.0实例的版本需为5.2及以上版本。查看版本的方法,请参见实例版本概览。
由于PolarDB-X 1.0为源的DTS实例为分布式实例,其下挂的一个RDS MySQL对应一个子任务。子任务运行情况,可在任务拓扑进行查询。
数据DTS实例运行期间,请勿对PolarDB-X 1.0实例中的数据库执行扩容或缩容操作。
不支持同步或迁移DDL语句(含Online DDL)。
待同步或迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。
DTS会在源库定时更新
`dts_health_check`.`ha_health_check`
表以推进Binlog位点。若同步或迁移对象为表级别且需要进行编辑(例如表或列名映射),则当单次同步或迁移任务的表数量超过1000张时,建议您将待同步或迁移的表分批配置为多个DTS实例,或将其配置为整库的同步或迁移实例。
DTS基于源PolarDB-X 1.0实例中XA事务的连续性,以确保增量任务数据的一致性。若XA事务的连续性遭到破坏(包括但不限于修改同步对象、增量数据采集模块容灾等场景),则未提交的XA事务可能会丢失。
若目标库为AnalyticDB PostgreSQL版实例,则不支持同步或迁移GEOMETRY、CURVE、SURFACE、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION类型的数据。
源库的操作限制:
数据同步或迁移期间,请勿执行扩容、缩容、迁移热点表、变更拆分键和变更DDL等操作,否则将导致DTS实例运行失败。
在全量任务和增量任务过程中,DTS会以Session级别暂时禁用约束检查以及外键级联操作。若任务运行时源库存在级联更新、删除操作,可能会导致数据不一致。
DTS实例运行期间如需切换PolarDB-X 1.0实例的网络类型,切换成功后,请调整同步或迁移链路的网络连接信息。
若DTS实例包含增量任务,Binlog日志:
需开启,并且binlog_row_image为full。否则预检查阶段提示报错,且无法成功启动DTS实例。
DTS要求源数据库的本地Binlog日志保存3天及以上(建议保留7天),否则DTS可能因无法获取Binlog而导致任务失败,极端情况下甚至可能会导致数据不一致或丢失。由于您所设置的Binlog日志保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。
若DTS实例包含增量任务,请确保待同步或迁移数据的字符集不是utf8mb3,否则DTS实例将在增量任务阶段失败。
PolarDB-X 2.0
PolarDB-X 2.0实例需兼容MySQL 5.7版本。
待同步或迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。
若同步或迁移对象为表级别且需要进行编辑(例如表或列名映射),则当单次同步或迁移任务的表数量超过1000张时,建议您将待同步或迁移的表分批配置为多个DTS实例,或将其配置为整库的同步或迁移实例。
若DTS实例包含增量任务,Binlog日志:
需开启,并且binlog_row_image为full。否则预检查阶段提示报错,且无法成功启动DTS实例。
DTS要求源数据库的本地Binlog日志保存需3天及以上(建议保留7天),否则DTS可能因无法获取Binlog而导致任务失败,极端情况下甚至可能会导致数据不一致或丢失。由于您所设置的Binlog日志保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。
若源端PolarDB-X 2.0待同步或迁移的表名中含大写字母,则仅支持库表结构任务。
DTS会在源库定时执行CREATE DATABASE IF NOT EXISTS `test`命令创建
test
表,并写入心跳数据以推进Binlog位点。若在配置实例时,是否去除正反向任务的心跳表sql选择为是(或者DTS实例使用的源库账号没有建表权限),且源库长时间未执行DML操作,则可能会导致延迟信息不准确。说明若实例显示的延迟时间过大,您可以在源库执行一次DML操作来更新延迟信息。
源库的操作限制:
在库表结构任务和全量任务阶段,请勿执行库或表结构变更的DDL操作,否则会导致DTS实例运行失败。
DTS实例运行期间如需切换PolarDB-X 2.0的网络类型,切换成功后,请调整同步或迁移链路的网络连接信息。
目标为AnalyticDB MySQL版 3.0时,暂不支持同步或迁移前缀索引,如果源库存在前缀索引可能导致DTS实例运行失败。
TiDB
待同步或迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。
若同步或迁移对象为表级别且需要进行编辑(例如表或列名映射),则当单次同步或迁移任务的表数量超过1000张时,建议您将待同步或迁移的表分批配置为多个DTS实例,或将其配置为整库的同步或迁移实例。
若DTS实例包含增量任务,您需要使用TiDB Binlog或TiDB CDC采集源库增量变更的数据。同时,在DTS实例成功创建并开始运行后,请务必及时在源库执行相应的变更或插入测试数据,以更新实例的位点信息。否则,实例可能会因为延迟过大而失败。
增量任务仅支持从目标Topic中ID为0的分区获取数据。
由于TiDB数据库的元数据中未保存前缀索引的长度,因此在数据迁移至目标库后,前缀索引的长度会丢失,从而可能会导致实例运行失败。若待迁移的表包含前缀索引,请自行手动修复前缀索引的长度。
目标为目标AnalyticDB MySQL版 3.0集群时:
暂不支持迁移前缀索引,如果源库存在前缀索引可能导致数据迁移失败。
由于AnalyticDB MySQL版 3.0集群本身存在使用限制,当该集群中的节点磁盘空间使用量超过80%时,会导致DTS实例产生延迟。因此,请提前根据待迁移的对象评估所需的存储空间,以确保目标集群具备充足的存储空间。
存储
日志服务SLS
待同步或迁移Logstore的数据保存时间为7天以上。
待同步或迁移的Logstore需要关闭自动分裂Shard功能。关闭方法,请参见修改Logstore配置。
DTS实例运行期间,请勿对Shard进行变更操作(如分裂Shard和合并Shard等),否则可能会导致数据丢失。
不支持DTS Serverless实例。
不支持库表结构任务。
不支持修改同步对象。
不支持同步或迁移以
__
开头并__
结尾的索引字段。若您需要将Logstore中所有Topic的数据同步或迁移到ClickHouse集群的同一张表,需要在配置任务对象时在表名文本框中填入.*,否则可能会因Topic被过滤而导致相应数据丢失。
重启任务可能会导致少量的数据重复。
若DTS实例同时包含全量任务和增量任务,在任务列表合并显示为增量任务。
待同步或迁移数据库的数量符合云数据库ClickHouse的限制,即不超过256个。
若您采用先购买再配置的方式配置实例,在购买实例时需正确选择分布式数据库节点数量。
说明分布式数据库节点数量必须与待同步数据所属Logstore的Shard数一致。Logstore中Shard数量的查看方法,请参见管理Shard。
大数据
MaxCompute
由于不支持增量任务,MaxCompute仅支持作为迁移实例的源库。
为保障数据一致性,在迁移期间请勿在源MaxCompute实例中写入新的数据。
已准备主账号的AccessKey信息(AccessKey Id和AccessKey Secret)。获取方式,请参见创建AccessKey。
需手动设置MaxCompute白名单,允许DTS访问MaxCompute。更多信息,请参见设置阿里云产品访问MaxCompute白名单。
由于源MaxCompute实例不支持主键约束,在一些异常情况下(如网络异常),DTS会进行任务重试,可能会导致目标RDS实例中该无主键表出现重复数据。
其他数据库
SQL Server
SQL Server on Azure Virtual Machines企业版需要2008或以上版本,标准版需要2016SP1或以上版本(不包含2017版本)。
源库支持的自建SQL Server需为Enterprise、Developer、Enterprise Evaluation、Standard、Web版本。
已支持SQL Server Cluster或SQL Server AlwaysOn High Availability Group。
若源库为Web版的RDS SQL Server,则在配置任务时SQLServer增量同步模式需选择为解析源库日志做增量同步(不支持堆表)。
若源库为只读实例,则不支持同步或迁移DDL操作。
不支持同步或迁移CURSOR、ROWVERSION、SQL_VARIANT、HIERARCHYID、POLYGON、GEOMETRY和GEOGRAPHY类型的数据。
若DTS实例包含增量任务,数据日志:
需开启,备份模式设置为Full,且已成功执行过全量物理备份。
SQL Server实例的数据日志需保留3天及以上(建议保留7天),自建SQL Server数据库的数据日志需保留7天及以上。否则DTS可能会因无法获取的数据日志而导致任务失败,极端情况下甚至可能会导致数据不一致或数据丢失。由于您所设置的数据日志保存时间低于DTS要求的时间而导致的问题,不在DTS的SLA保障范围内。
若同步或迁移对象为表级别且需要进行编辑(例如表或列名映射),则当单次同步或迁移任务的表数量超过1000张时,建议您将待同步或迁移的表分批配置为多个DTS实例,或将其配置为整库的同步或迁移实例。
单次同步或迁移任务仅支持迁移至多10个数据库。当超出数量限制,会出现稳定性和性能问题的风险,此时建议您拆分待同步或迁移的表,分批配置任务。
若单次同步或迁移任务中开启CDC的表数量大于1000,则预检查会失败。
若源库待同步或迁移的表需要开启CDC,则需满足以下条件,否则预检查将会失败。
sys.sysservers视图的srvname字段与SERVERPROPERTY函数返回值保持一致。
若源库是自建SQL Server,则数据库所有者需是sa;若源库是RDS SQL Server,则数据库所有者需是sqlsa。
若源库是企业版,则需为2008及以上版本。
若源库是标准版,则需为2016SP1及以上版本。
若源库是SQL Server 2017版(企业版),建议升级版本。
在混合式日志解析模式下(即SQLServer增量同步模式为非堆表用日志解析增量同步,堆表用CDC增量同步(混合式日志解析)的实例)
源库不支持连续执行(时间间隔小于10分钟)多个加减列操作。例如,连续执行如下SQL会导致任务报错。
ALTER TABLE test_table DROP COLUMN Flag; ALTER TABLE test_table ADD Remark nvarchar(50) not null default('');
支持的源库(包含RDS SQL Server和自建SQL Server)有:
Enterprise或Enterprise Evaluation版:2012、2014、2016、2019或2022版本。
Standard版:2016、2017、2019或2022版本。
若在对象配置阶段将SQLServer增量同步模式选择为轮询查询CDC实例做增量同步,则还有如下限制:
DTS实例使用的源库账号需具备开启CDC的权限。开启库级别CDC需要使用sysadmin角色权限的账号,开启表级别CDC需要高权限账号。
说明Azure SQL Database控制台提供的最高权限账号(服务器管理员)满足要求。其中基于vCore购买模型的数据库,所有规格均支持开启CDC;基于DTU购买模型的数据库,规格需要为S3及以上才支持开启CDC。
Amazon RDS for SQL Server的高权限账号满足要求,支持为存储过程开启库级别的CDC。
聚集列存储索引表不支持开启CDC。
DTS是通过轮询方式去源库查询每张表的CDC实例(CDC Instance)以获取增量数据,因此源库待迁移表的数量不能超过1000张,否则可能会导致任务延迟或不稳定。
不支持连续执行加减列操作(一分钟内执行超过两次加列或减列的DDL),否则可能会导致任务失败。
不支持对源库CDC实例(CDC Instance)做变更操作,否则可能会导致任务失败或数据丢失。
若在对象配置阶段将SQLServer增量同步模式选择为解析源库日志做增量同步(不支持堆表),则待迁移的表需具备聚集索引,且聚集索引中需包含主键列;待迁移的表不支持堆表、无主键表、压缩表、含计算列表。在混合式日志解析模式下,没有如上限制。
说明相关表信息的查看方法,请参见如何查看SQL Server中堆表、无主键表、压缩表、含计算列的表信息。
若在对象配置阶段将SQLServer增量同步模式选择为非堆表用日志解析增量同步,堆表用CDC增量同步(混合式日志解析),则DTS的增量迁移依赖CDC组件,因此请确保源库CDC作业正常运行,否则会导致DTS任务失败。
若DTS实例包含增量任务,且开启CDC的表需要写入的单字段数据超过64 KB,则必须提前使用
exec sp_configure 'max text repl size', -1;
命令调整源库的配置。若需跨版本同步或迁移,请提前确认兼容性。
若DTS实例包含增量任务,则不支持重建索引操作,否则可能造成DTS实例运行失败,甚至会导致数据丢失。
说明已开启CDC的表不支持进行主键相关的变更。
如需进行增量迁移,请禁用目标库中已启用的触发器和外键,否则会导致迁移任务失败。
为保障增量数据迁移延迟的准确性,解析源端日志做增量同步模式,DTS会在源库中创建触发器dts_cdc_sync_ddl、心跳表dts_sync_progress、DDL存储表dts_cdc_ddl_history;混合式增量同步模式,DTS会在源库中创建触发器dts_cdc_sync_ddl、心跳表dts_sync_progress、DDL存储表dts_cdc_ddl_history以及会开启库级别CDC和部分表CDC,建议源端开启CDC的表数据变更量不超过1000 RPS。
源实例为RDS SQL Server时,DTS会在源RDS SQL Server实例中创建一个
rdsdt_dtsacct
账号用于数据迁移,请勿在任务运行过程中对该账号进行删除或密码修改操作,否则可能会导致任务失败。若源库为自建SQL Server,且存在如下情况,建议使用RDS SQL Server数据库的备份功能进行迁移,详情请参见从自建数据库迁移至RDS。
数据库超过10个。
单个数据库执行日志备份操作的频率超过1次/小时。
单个数据库执行DDL操作的频率超过100条/小时。
单个数据库的日志量超过20 MB/s。
需要开启CDC(Change Data Capture,变更数据捕获)的表超过1000个。
源库日志存在堆表、无主键表、压缩表、含计算列表等场景。
若SQLServer增量同步模式选择为轮询查询CDC实例做增量同步或非堆表用日志解析增量同步,堆表用CDC增量同步(混合式日志解析),请确保CDC作业正常运行,否则DTS实例会异常。
建议在全量任务运行期间,确保源库的事务处理模式参数
READ_COMMITTED_SNAPSHOT
为启用状态,以避免因共享锁(Shared Lock)对数据写入产生影响。否则,可能会导致数据不一致、实例运行失败等异常情况。由此引发的异常情况,不在DTS的SLA保障范围内。
Oracle
待同步或迁移对象要求:
不支持同步或迁移外部表。
待同步或迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。您也可以使用Oracle中的ROWID作为无主键和唯一约束表的主键。
如果您的自建Oracle版本为12c及以上,待迁移表的名称长度需不超过30个字节。
若同步或迁移对象为表级别,且需进行编辑(如表列名映射),则单次迁移任务仅支持迁移至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待迁移的表,分批配置多个任务,或者配置整库的迁移任务。
自建Oracle数据库已开启ARCHIVELOG(归档模式),设置合理的归档日志保持周期且归档日志能够被访问,详情请参见ARCHIVELOG。
自建Oracle数据库已开启Supplemental Logging,且要求已开启supplemental_log_data_pk和supplemental_log_data_ui,详情请参见Supplemental Logging。
若自建Oracle为RAC架构,且用专线/VPN网关/智能接入网关、数据库网关DG、云企业网CEN和ECS的接入方式,则不支持配置ScanIP,仅支持将其中任意1个VIP配置到连接信息中,该方式配置后不支持RAC的节点切换。
若自建Oracle通过专线的方式接入,那么需要将其中任意1个VIP配置到连接信息中,实现Oracle RAC通过专线接入迁移任务。
若DTS实例包含增量任务,Redo Log、Archive Log:
需开启。
DTS要求源库的Redo Log、Archive Log保存7天及以上,否则DTS可能因无法获取Redo Log、Archive Log而导致任务失败,极端情况下甚至可能会导致数据不一致或丢失。由于您所设置的Redo Log、Archive Log保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。
需确保源库和目标库的字符集兼容,否则可能会导致数据不一致或实例运行失败。
源库和目标库的时区必须保持一致。
不支持单独更新大文本字段场景,否则会导致实例运行失败。
如果源库存在varchar2类型的空字符串(Oracle会将其处理为null)且对应的目标库字段有非空约束,将会导致迁移任务失败。
在增量迁移过程中,不支持使用Oracle Data Pump向源库导入数据,否则可能会导致数据丢失。
DTS的校验对象为数据内容,暂不支持Sequence等元数据的校验,您需要自行校验。
若目标库为PolarDB PostgreSQL版(兼容Oracle)集群:
由于目标PolarDB PostgreSQL版(兼容Oracle)集群会生成类似
pg_oid_1498503_index
的唯一索引,来对应源自建Oracle的ROWID,所以INDEX会比源自建Oracle多。由于目标PolarDB PostgreSQL版(兼容Oracle)集群不支持写入字符串的终止符('\0'),若待迁移的数据中包含该终止符,DTS不会将该终止符写入到目标库,从而会导致数据不一致。
源自建Oracle的CHECK约束迁移到目标PolarDB PostgreSQL版(兼容Oracle)集群后,会转换成NOT NULL约束。
您自定义的Type可以迁移到目标PolarDB PostgreSQL版(兼容Oracle)集群,Oracle自动生成的Type Object(即内置对象)不会被迁移。PolarDB PostgreSQL版(兼容Oracle)集群已经支持Oracle中的内置对象,您无需迁移。
若DTS实例包含全量任务或增量任务,且源库中要迁移的表包含外键、触发器、事件触发器:
若目标库账号为具备高权限账号或者super权限账号,全量或增量任务运行时DTS会以Session级别暂时将
session_replication_role
的参数值设置为replica
。若目标库账号不具备该权限(高权限账号和super权限账号),您需要手动将目标数据库中
session_replication_role
的参数值设置为replica
。在此期间(session_replication_role
的参数值为replica
的全量或增量任务运行过程中),若源库存在级联更新、删除操作,则可能会导致数据不一致。在DTS实例释放后,您可以将session_replication_role
的参数值改回origin
。
建议在执行数据同步或迁移前,使用ADAM(Advanced Database & Application Migration)进行数据库评估,以便您平滑地迁移上云。更多信息,请参见数据库评估概览。
源库为Oracle时的更多限制条件,请参见Oracle数据库的限制和准备工作。
DMS LogicDB
仅支持作为同步实例的源库。
待同步的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。
DMS逻辑库下各个物理分库所属的各个PolarDB MySQL实例,需位于同一地域,且需要有一个统一的账号和密码,并具有该物理分库的读权限。创建和授权方式,请参见创建和管理数据库账号。
如同步对象为表级别,且需进行编辑(如表列名映射),则单次同步任务仅支持同步至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待同步的表,分批配置多个任务,或者配置整库的同步任务。
Binlog日志:
需开启,并且loose_polar_log_bin为on。否则预检查阶段提示报错,且无法成功启动数据同步任务。
DTS要求源库的本地Binlog日志保存3天及以上(建议保留7天),否则DTS可能因无法获取Binlog而导致任务失败,极端情况下甚至可能会导致数据不一致或丢失。由于您所设置的Binlog日志保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。
同步期间,请勿执行添加注释的DDL操作(如
ALTER TABLE table_name COMMENT='表的注释';
),否则数据同步任务会失败。同步期间,请勿执行添加注释的DDL操作(如
ALTER TABLE table_name COMMENT='表的注释';
),否则数据同步任务会失败。
Teradata
由于不支持增量任务,Teradata仅支持作为迁移实例的源库。
待同步的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。
若迁移对象为表级别且需要进行编辑(例如表或列名映射),则当单次迁移任务的表数量超过1000张时,建议您将待迁移的表分批配置为多个DTS实例,或将其配置为整库的迁移实例。
目前仅支持在上海、青岛、张家口地域配置。
仅支持表级别的迁移。
DB2 LUW
待同步或迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。
若待同步或迁移对象为表级别,且需进行编辑(如表列名映射),则单次任务仅支持同步或迁移至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待同步或迁移的表,分批配置多个任务,或者配置整库的同步或迁移任务。
在全量任务阶段,请勿执行库或表结构变更的DDL操作,否则会导致DTS实例运行失败。
DTS实例运行时,若源库进行主备切换,会导致DTS实例运行失败。
源库长时间未执行DML操作可能导致延迟信息不准确。
若DTS实例包含增量任务,数据日志:
由于DTS基于Db2 for LUW的CDC复制技术,将Db2 for LUW数据库的增量更新数据同步或迁移到目标库中,但是CDC复制技术自身具有限制,请参见CDC复制技术所支持数据类型的限制。
DB2 iSeries(AS/400)
待同步或迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。
若待同步或迁移对象为表级别,且需进行编辑(如表列名映射),则单次任务仅支持同步或迁移至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待同步或迁移的表,分批配置多个任务,或者配置整库的同步或迁移任务。
在全量任务阶段,请勿执行库或表结构变更的DDL操作,否则会导致DTS实例运行失败。
DTS实例运行时,若源库进行主备切换,会导致DTS实例运行失败。
源库长时间未执行DML操作可能导致延迟信息不准确。
若DTS实例包含增量任务,数据日志:
需开启,否则预检查阶段提示报错,且无法成功启动DTS实例。
待同步或迁移的表需开启Journal Log。
DTS要求源数据库的数据日志保存7天及以上,否则DTS可能因无法获取数据日志而导致任务失败,极端情况下甚至可能会导致数据不一致或丢失。由于您所设置的数据日志保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。
数据投递
仅支持同步实例。
若源库的接入方式需选择为专线/VPN网关/智能网关,您需要允许DTS通过VPN网关访问您的数据库。操作方法,请参见通过VPN网关实现本地IDC与DTS云服务互通。
使用SDK将源端数据投递到DTS需要有一定的编码能力。
AnalyticDB PostgreSQL版实例中的Schema名称、投递数据对象配置阶段输入的数据库名称和SDK中配置的dbName需保持一致,否则目标端可能接收不到数据。
实例创建后不支持修改分片数。
数据投递实例创建成功后请及时使用SDK进行数据投递,否则实例会因采集不到增量数据而失败。
数据订阅实例
详情请参见订阅方案概览中的配置文档。
数据校验实例
详情请参见配置数据校验中的注意事项。