华为云用户手册

  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 全量同步支持数据、表结构和普通索引(B-Tree索引)的同步。 目标数据库不支持唯一键表,同步过程中将忽略源数据库中的唯一键表。 不支持同步无主键表,如果选择同步的表中存在无主键表,则同步失败。 不支持唯一约束、唯一索引的同步。 不支持同步既是无主键表,又是分区表的自建表,可能会导致任务失败。 不支持 GaussDB (DWS)的无主键复制表,如果需要同步的表在GaussDB(DWS)为无主键复制表,会导致任务失败。 同步对象列名不能为CTID、XMIN、CMIN、XMAX、CMAX、TABLEOID、XC_NODE_ID、TID等GaussDB(DWS)禁止的字段,否则会导致任务失败。
  • 数据库账号权限要求 在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表2进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表2 数据库账号权限 类型名称 全量+增量同步 源数据库连接账号 源数据库DDM账户至少需要具备一个权限,例如:SELECT。 DDM物理分片数据库账号需要具备如下权限:SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。 目标数据库连接账号 提供的目标数据库账号必须具有每张表的如下权限:INSERT、SELECT、UPDATE、DELETE、CONNECT、CREATE。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请参考修改连接信息章节修改DRS任务的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 全量同步支持数据、表结构和索引的同步。 源数据库不允许存在拆分键为timestamp类型的表。 源表的分库分表键要加到目标表的主键和唯一键中(也就是目标表的主键和唯一键中的列应该包含源表的分片列),避免数据冲突出现数据不一致问题。
  • 数据库账号权限要求 在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表2进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表2 数据库账号权限 类型名称 全量同步、全量+增量同步、增量同步 源数据库连接账号 源数据库DDM账户至少需要具备一个权限,例如:SELECT。 DDM物理分片数据库账号需要具备如下权限:SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。 目标数据库连接账号 需要具备如下权限:SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE。 RDS for MySQ L实例 的root账户默认已具备上述权限。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请参考修改连接信息章节修改DRS任务的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 支持表、普通索引(B-Tree索引)、约束(主键、空、非空)的同步。 不支持视图、外键、存储过程、触发器、函数、事件、虚拟列、唯一约束、唯一索引、外键索引、Check约束的同步。 不支持GaussDB(DWS)的无主键复制表,如果需要同步的表在GaussDB(DWS)为无主键复制表,会导致任务失败。 增量同步LOB类型仅支持BasicFiles属性,不支持SecureFiles属性,全量和增量支持的LOB类型大小限10M以内。
  • 注意事项 为保证任务的正常运行,DRS提供了自动化的检查方法,在您启动DRS任务前,会针对源数据库和目标数据库的相关配置、条件进行检查。主要的检查项和对应的处理建议请参考预检查项。除了预检查项目之外,您还需要注意的事情参见表4。 表4 注意事项 类型名称 使用和操作限制 源数据库限制 不支持选择源数据库的空库进行同步。 使用限制 通用: 不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。 禁止对Oracle源库做resetlogs操作,否则会导致数据无法同步且任务无法恢复。 不支持LOB类型的rollback操作,否则会导致同步任务失败。 不支持修改源数据库Oracle用户名(SCHEMA名),包括11.2.0.2之前版本通过修改USER$字典表方式及11.2.0.2之后通过ALTER USER username RENAME TO new_username修改SCHEMA名称的场景。 全量同步阶段: 全量阶段不支持bfile、sdo_geometry、urowid、interval(精度大于6位)和自定义类型。 DRS全量同步表结构时,源库中的char、varchar2类型长度在目标库会按照字节长自动扩大(因为目标库为字节长),至少扩大1.5倍。扩大倍数和源库目标库的字符集有关,例如同为UTF8的情况下,默认扩大3倍,同为GBK的情况下,默认扩大2倍。 全量同步分区表的结构时会将该对象转为非分区的普通表,增量同步时,源库跟分区表相关的操作,可能无法同步到目标库或者在目标库执行失败。 增量同步阶段: 增量阶段不支持bfile、interval、sdo_geometry、urowid、timestamp(精度大于6位)和自定义类型。 增量阶段不支持Oracle字符集扩展的字符,标准字符集无法解析Oracle自定义扩展字符。 增量同步不支持Oracle上的分布式事务(XA事务)和PARALLEL DML。 增量同步时,BLOB末尾的0x00、CLOB末尾的空格会被截断。 增量同步时,不建议选择混合分区表,因为混合分区表中的外部分区数据变更不产生DML日志,DRS增量数据同步无法获取变更信息,会存在数据不一致的风险。 增量同步时,增量解析时间类型仅支持在Oracle时间类型合法范围内的数据,超范围的数据可能导致任务异常,例如年份大于9999时会出现数据截断。 增量同步过程中,支持部分DDL操作。异构数据库DDL转换需要分析语义,考虑语法兼容性,无法做到完美转换,所以目前仅支持部分DDL操作,仅在转换成功并在以下范围内时会进行同步。如果出现其余情况的DDL同步导致的任务异常,需要手动在目标库执行相应的DDL来规避。 表级同步支持alter table add column、alter table drop column、alter table rename column、alter table modify column以及truncate table的基本DDL,不支持默认值等的修改。 常见故障排查: 在任务创建、启动、全量同步、增量同步、结束等过程中,如有遇到问题,可先参考“故障排查”章节进行排查。 其他限制 对于TIMESTAMP WITH TIME ZONE类型,根据目标库时区做转换后不得大于“9999-12-31 23:59:59.999999”。 仅支持to_date和sys_guid函数作为默认值,将其他函数作为默认值时,需要目标库也有相同功能的函数。对于目标库不存在对应函数的情况,会出现以下情况: 默认值函数会被置空。 创建表失败,导致任务失败。 增量同步的DDL如果包含目标数据库不存在的系统函数,会导致同步任务失败。 如果表中只有LOB字段,可能出现数据不一致性或任务失败的情况。 如果Oracle中使用LOB类型各自的empty函数写入数据时,通过JDBC查询出来的值是空字符串,写入到目标库后是空字符串还是NULL取决于目标库对空字符串值的处理。 针对无主键且无索引的表,非大字段的列必须大于三列,否则会因为无法全列匹配导致增量异常。 不支持默认值含有表达式的函数的表的同步。 不支持同步源库中的临时表。 不支持同步源库表中的虚拟列。 不支持同步既是无主键表,又是分区表的自建表,可能会导致任务失败。 选择手动创建表结构时,目标库中的时间类型是否带有时区需要与源库中保持一致,否则可能会因为时区转换导致时间数据不一致。 源数据库Oracle中的物化视图同步到目标数据库会被转化为普通表。 目标数据库实例必须有足够的磁盘空间。 同步的表要禁用外键,因为DRS并行回放会使得不同表之间的写入顺序和源库不一致,可能会触发外键约束限制,造成同步失败。 相互关联的数据对象要确保同时同步,避免因关联对象缺失,导致同步失败。 表等对象名同步到目标库后会转换成小写,如ABC会转换为abc。因此增量同步阶段,选择的源库的表中不能存在仅大小写不同的表,可能会导致同步失败。 当Oracle字符集是WE8MSWIN1252时,CLOB列同步到目标库可能出现乱码,建议先修改源库字符集为AL32UTF8再同步数据。 当使用PDB数据库同步时,由于Oracle LogMiner组件的限制,增量同步时必须打开全部PDB。 Oracle 12.2及以上版本,由于Oracle LogMiner组件的限制,增量同步不支持表名或列名超过30个字符。 由于无主键表缺乏行的唯一性标志,网络不稳定时涉及少量重试,表数据存在少量不一致的可能性。 索引同步只同步普通索引,主键等约束在表结构中进行同步。 如有中文、日文等特殊字符,业务连接Oracle数据库使用的编码需和Oracle数据库服务端编码一致,否则目标库可能会出现乱码。 Oracle中表结构长度(所有列长字节数之和,char、varchar2等类型字节长度和编码有关)超过65535时,可能导致同步失败。 Oracle归档日志文件大小必须大于单条数据最大值,避免单条数据日志跨文件(超过2个日志文件)导致的增量数据解析异常。 对于Oracle RAC集群,建议使用SCAN IP+ SERVICE_NAMES方式创建任务,SCAN IP具有更强的容错性,更好的负载能力,更快的同步体验。 源库为Oracle RAC时,如果需要使用SCAN IP配置DRS任务,需要保证SCAN IP、DRS节点的IP同时能与源库的所有VIP互通(Oracle内部机制),否则无法通过连通性检查。如果不使用SCAN IP,可以使用某一节点的VIP,这种情况下DRS日志解析只会在VIP指定的RAC节点上进行。 如果源库为RAC,增量同步首次启动时所有RAC节点必须正常在线,否则增量启动会出现异常。 如果源库为RAC,增量同步时,不支持增加、减少节点数量,避免导致增量同步异常(为保证数据的强一致性)。 使用DRS同步表结构的场景下,同一个schema中,同步的表中,表、约束、索引等不能有忽略大小写后的同名对象,比如表"A"中有索引名"inx1", 表B中有索引名"a",表A和索引"a"忽略大小写重名了,会导致结构同步失败。多个schema映射到一个schema的场景,源库的多个schema中也不能包含同名但字母大小写不同的表、约束和索引。 支持源端多张表对GaussDB(DWS)一张表的映射。详细操作可参考创建Oracle到GaussDB(DWS)同步任务。 全量+增量或单增量任务场景,选择Logminer增量读取方式时不支持直接连PDB数据库,用户需要提供CDB的Service Name/SID、用户名和密码。 库级映射和表级映射均不区分大小写,例如映射为abc与映射为ABC,同步到目标库后均为abc。 lob类型及扩展字符类型(字节长度超过4000)不建议作为增量数据过滤条件,Oracle日志中可能出现不记录update旧值的情况。 任务再编辑增加新表时,请确保新增的表的事务都已提交,否则未提交的事务可能无法同步到目标库。建议在业务低峰期做增加表的操作。 在源数据库Oracle附加日志级别不为all的场景下,如果源数据库增量update操作的数据在目标库不存在,即使冲突策略选的是覆盖,也无法将源数据库完整数据写入目标库。如果要将数据写入目标库,需要源数据库附加日志级别设置为all。 Oracle更新唯一约束列且命中多行时可能出现互相冲突,极端场景下可能造成数据不一致。 XMLTYPE类型在Oracle内部存储方式为CLOB或BLOB,使用限制同CLOB和BLOB一致。 仅Oracle 11g及以上版本支持XMLTYPE类型同步。
  • 注意事项 为保证任务的正常运行,DRS提供了自动化的检查方法,在您启动DRS任务前,会针对源数据库和目标数据库的相关配置、条件进行检查。主要的检查项和对应的处理建议请参考预检查项。除了预检查项目之外,您还需要注意的事情参见表4。 表4 注意事项 类型名称 使用和操作限制 源数据库限制 Oracle单行记录不能超过8K(lob、long类型除外,会自动转换成MySQL的text、blob类型),原因是MySQL innodb引擎限制单行大小不能超过8K(text、blob类型除外)。 不建议以字符串类型作为主键或唯一键,因为Oracle的字符串作为主键、唯一键时区分空格,而MySQL不区分,可能导致数据不一致和死锁问题。 对于Oracle的binary_float或者binary_double类型,MySQL中不支持设置Nan、Inf、-Inf三种值,DRS默认会将这三种值转为0保存。 Oracle中建议列名不要取名AUTO_PK_ROW_ID,原因是这个列名在MySQL5.7中是保留列名,无法创建出来。 Oracle中number(p, s)字段的精度不要超过p: [1, 38], s:[p-65, min(p, 30)]的精度表示范围。其中,s取值依赖于p的取值变化,即下限为p-65, 上限为p或30中取最小值。例如:当p=1, s的取值范围是[-64, 1]。当p=38, s取值范围是[-27, 30]。 int字段的值不要超过(65,0)的精度表示范围。原因是MySQL数字的表示范围比Oracle小。 不支持表名包含除下划线外的其他特殊字符的表的同步。 不支持选择源数据库的空库进行同步。 使用限制 通用: 不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。 源库不能做DDL变更。 禁止对Oracle源库做resetlogs操作,否则会导致数据无法同步且任务无法恢复。 不支持LOB类型的rollback操作,否则会导致同步任务失败。 不支持修改源数据库Oracle用户名(SCHEMA名),包括11.2.0.2之前版本通过修改USER$字典表方式及11.2.0.2之后通过ALTER USER username RENAME TO new_username修改SCHEMA名称的场景。 对于同步中的数据库对象,在同步期间,目标库不能进行写入操作,否则会导致数据不一致。 全量同步阶段: 全量阶段不支持bfile、sdo_geometry、urowid、interval(精度大于6位)和自定义类型。 DRS全量同步表结构时,源库中的char、varchar2类型长度在目标库会按照字节长自动扩大(因为目标库为字节长),至少扩大1.5倍。扩大倍数和源库目标库的字符集有关,例如同为UTF8的情况下,默认扩大3倍,同为GBK的情况下,默认扩大2倍。 全量同步分区表的结构时会将该对象转为非分区的普通表,增量同步时,源库跟分区表相关的操作,可能无法同步到目标库或者在目标库执行失败。 增量同步阶段: 增量同步不支持DDL的同步。 增量阶段不支持bfile、interval、sdo_geometry、urowid、timestamp(精度大于6位)和自定义类型。 增量阶段不支持Oracle字符集扩展的字符,标准字符集无法解析Oracle自定义扩展字符。 增量同步时,BLOB末尾的0x00、CLOB末尾的空格会被截断。 增量同步不支持Oracle上的分布式事务(XA事务)和PARALLEL DML。 增量同步时,不建议选择混合分区表,因为混合分区表中的外部分区数据变更不产生DML日志,DRS增量数据同步无法获取变更信息,会存在数据不一致的风险。 增量同步时,增量解析时间类型仅支持在Oracle时间类型合法范围内的数据,超范围的数据可能导致任务异常,例如年份大于9999时会出现数据截断。 常见故障排查: 在任务创建、启动、全量同步、增量同步、结束等过程中,如有遇到问题,可先参考“故障排查”章节进行排查。 其他限制 用户需要在目标库根据源端逻辑库的表结构,自行在目标库创建对应的表结构及索引。未在目标库创建的对象,视为用户不选择这个对象进行同步。 同步时需要在目标库创建表结构,目标库表结构要包含源库所有列,且主键要一致。 源库支持to_date和sys_guid函数做默认值。将其他函数作为default值时,需要目标库也有相同功能的函数。对于目标库不存在对应函数的情况,可能会出现以下结果: 默认值函数可能会被置空。 创建表失败,导致对象对比不一致或者任务失败。 如果表中只有LOB字段,可能出现数据不一致性或任务失败的情况。 如果Oracle中使用LOB类型各自的empty函数写入数据时,通过JDBC查询出来的值是空字符串,写入到目标库后是空字符串还是NULL取决于目标库对空字符串值的处理。 针对无主键且无索引的表,非大字段的列必须大于三列,否则会因为无法全列匹配导致增量异常。 不支持默认值含有表达式的函数的表的同步。 不支持同步源库中的临时表。 不支持同步源库中有虚拟列的表。 同步前,目标数据库必须存在待同步数据库及表,且库名,表名,列名,索引名、约束名等必须为对应的小写名称。 DRS同步时会有大量数据写入目标库,目标库max_allowed_packet 参数过小会导致无法写入,建议将目标库max_allowed_packet参数值设置为大于100MB。 同步的表要禁用外键,因为DRS并行回放会使得不同表之间的写入顺序和源库不一致,可能会触发外键约束限制,造成同步失败。 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 目标端多的列要求非空且没有默认值,源端insert数据,同步到目标端后多的列为null,不符合目标端要求。 目标端多的列设置固定默认值,且有唯一约束。源端insert多条数据后,同步到目标端后多的列为固定默认值,不符合目标端要求。 表等对象名同步到目标库后会转换成小写,如ABC会转换为abc。因此增量同步阶段,选择的源库的表中不能存在仅大小写不同的表,可能会导致同步失败。 由于无主键表缺乏行的唯一性标志,网络不稳定时涉及少量重试,表数据存在少量不一致的可能性。 如有中文、日文等特殊字符,业务连接Oracle数据库使用的编码需和Oracle数据库服务端编码一致,否则目标库可能会出现乱码。 Oracle中表结构同步到DDM后表的字符集为utf8mb4。 Oracle中表结构长度(所有列长字节数之和,char、varchar2等类型字节长度和编码有关)超过65535时,可能导致同步失败。 Oracle归档日志文件大小必须大于单条数据最大值,避免单条数据日志跨文件(超过2个日志文件)导致的增量数据解析异常。 对于Oracle RAC集群,建议使用SCAN IP+ SERVICE_NAMES方式创建任务,SCAN IP具有更强的容错性,更好的负载能力,更快的同步体验。 源库为Oracle RAC时,如果需要使用SCAN IP配置DRS任务,需要保证SCAN IP、DRS节点的IP同时能与源库的所有VIP互通(Oracle内部机制),否则无法通过连通性检查。如果不使用SCAN IP,可以使用某一节点的VIP,这种情况下DRS日志解析只会在VIP指定的RAC节点上进行。 如果源库为RAC,增量同步首次启动时所有RAC节点必须正常在线,否则增量启动会出现异常。 如果源库为RAC,增量同步时,不支持增加、减少节点数量,避免导致增量同步异常(为保证数据的强一致性)。 当Oracle字符集是WE8MSWIN1252时,CLOB列同步到目标库可能出现乱码,建议先修改源库字符集为AL32UTF8再同步数据。 当使用PDB数据库同步时,由于Oracle LogMiner组件的限制,增量同步时必须打开全部PDB。 Oracle 12.2及以上版本,由于Oracle LogMiner组件的限制,增量同步不支持表名或列名超过30个字符。 全量+增量任务场景,选择Logminer增量读取方式时不支持直接连PDB数据库,用户需要提供CDB的Service Name/SID、用户名和密码。 选择表级对象同步时,增量同步过程中不建议对表进行重命名操作。 源库的用户对应目标库的数据库。 源库用户、表结构信息同步至目标库后全部转换为小写。如表Ab及表AB同步至目标库为ab。 不支持索引组织表的同步。 同步任务全量阶段开始前,如有长时间未提交的事务,有可能丢失数据。 任务再编辑增加新表时,请确保新增的表的事务都已提交,否则未提交的事务可能无法同步到目标库。建议在业务低峰期做增加表的操作。 在源数据库Oracle附加日志级别不为all的场景下,如果源数据库增量update操作的数据在目标库不存在,即使冲突策略选的是覆盖,也无法将源数据库完整数据写入目标库。如果要将数据写入目标库,需要源数据库附加日志级别设置为all。 Oracle更新唯一约束列且命中多行时可能出现互相冲突,极端场景下可能造成数据不一致。 XMLTYPE类型在Oracle内部存储方式为CLOB或BLOB,使用限制同CLOB和BLOB一致。 仅Oracle 11g及以上版本支持XMLTYPE类型同步。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 目前只支持同步源库的数据,不支持同步源库表结构及其他数据库对象。 增量同步LOB类型仅支持BasicFiles属性,不支持SecureFiles属性,全量和增量支持的LOB类型大小限10M以内。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 全量同步时支持表、普通索引、主键与唯一约束、数据的同步。增量同步时支持表的实时同步。 全量阶段不支持bfile、sdo_geometry、urowid和自定义类型。增量阶段不支持bfile、sdo_geometry、urowid、interval和自定义类型。 timestamp和interval day to second类型支持的最大精度是6。 全量同步结构不支持位图索引、倒排索引、函数索引。 增量同步LOB类型仅支持BasicFiles属性,不支持SecureFiles属性,全量和增量支持的LOB类型大小限10M以内。 对于TIMESTAMP WITH TIME ZONE类型,根据目标库时区做转换后不得大于“9999-12-31 23:59:59.999999”。 不支持默认值含有表达式的函数的表的同步。 不支持同步源库中的临时表。 不支持同步源库中有虚拟列的表。 不支持同步既是无主键表,又是分区表的自建表,可能会导致任务失败。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 支持库、表结构、主键、唯一键、普通索引、表数据的同步。 其他数据库对象暂不支持,例如存储过程、触发器、函数、序列、包、同义词、用户等。 全量阶段不支持bfile、sdo_geometry、urowid、interval(精度大于6位)和自定义类型。 增量阶段不支持bfile、interval、sdo_geometry、urowid、timestamp(精度大于6位)和自定义类型。 不支持默认值含有表达式的函数的表的同步。 不支持同步源库中的临时表。 不支持选择源数据库的空库进行同步。 不支持同步源库中有虚拟列的表。 增量同步LOB类型仅支持BasicFiles属性,不支持SecureFiles属性,全量和增量支持的LOB类型大小限10M以内。
  • 注意事项 为保证任务的正常运行,DRS提供了自动化的检查方法,在您启动DRS任务前,会针对源数据库和目标数据库的相关配置、条件进行检查。主要的检查项和对应的处理建议请参考预检查项。除了预检查项目之外,您还需要注意的事情参见表4。 表4 注意事项 类型名称 使用和操作限制 源数据库限制 Oracle单行记录不能超过8K(lob、long类型除外,会自动转换成MySQL的text、blob类型),原因是MySQL innodb引擎限制单行大小不能超过8K(text、blob类型除外)。 不建议以字符串类型作为主键或唯一键,因为Oracle的字符串作为主键、唯一键时区分空格,而MySQL不区分,可能导致数据不一致和死锁问题。 对于Oracle的binary_float或者binary_double类型,MySQL中不支持设置Nan、Inf、-Inf三种值,DRS默认会将这三种值转为0保存。 Oracle的check约束同步到MySQL会失效,原因是MySQL不支持check约束。 Oracle中建议列名不要取名AUTO_PK_ROW_ID,原因是这个列名在MySQL5.7中是保留列名,无法创建出来。 Oracle中number(p, s)字段的精度不要超过p: [1, 38], s:[p-65, min(p, 30)]的精度表示范围。其中,s取值依赖于p的取值变化,即下限为p-65, 上限为p或30中取最小值。例如:当p=1, s的取值范围是[-64, 1]。当p=38, s取值范围是[-27, 30]。 int字段的值不要超过(65,0)的精度表示范围。原因是MySQL数字的表示范围比Oracle小。 Oracle归档日志文件大小必须大于单条数据最大值,避免单条数据日志跨文件(超过2个日志文件)导致的增量数据解析异常。 源数据库不允许存在索引列的长度之和超过目标库索引列长度限制的索引,具体长度要求请参见索引长度说明。 默认值不支持default user,MySQL没有对应的语法。 不支持选择源数据库的空库进行同步。 使用限制 通用: 不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。 禁止对Oracle源库做resetlogs操作,否则会导致数据无法同步且任务无法恢复。 不支持LOB类型的rollback操作,否则会导致同步任务失败。 不支持修改源数据库Oracle用户名(SCHEMA名),包括11.2.0.2之前版本通过修改USER$字典表方式及11.2.0.2之后通过ALTER USER username RENAME TO new_username修改SCHEMA名称的场景。 请勿修改源库或目标库表中的char类型字段为varchar,由于Oracle和MySQL表现不同,产生的空格可能会导致数据对比不一致。 全量同步阶段: DRS全量同步表结构时,源库中的char、varchar2类型长度在目标库会按照字节长自动扩大(因为目标库为字节长),至少扩大1.5倍。扩大倍数和源库目标库的字符集有关,例如同为UTF8的情况下,默认扩大3倍,同为GBK的情况下,默认扩大2倍。 全量同步分区表的结构时会将该对象转为非分区的普通表,增量同步时,源库跟分区表相关的操作,可能无法同步到目标库或者在目标库执行失败。 增量同步阶段: 增量同步过程中,支持部分DDL操作。异构数据库DDL转换需要分析语义,考虑语法兼容性,无法做到完美转换,所以目前仅支持部分DDL操作,仅在转换成功并在以下范围内时会进行同步。如果出现其余情况的DDL同步导致的任务异常,需要手动在目标库执行相应的DDL来规避。 表级同步支持alter table add column、alter table drop column、alter table rename column、alter table modify column以及truncate table的基本DDL,不支持默认值等的修改。 库级同步支持create table(表内定义不能包含函数)。 DDL中的对象不能是目标库的关键字,比如index,where等。 增量DDL不支持全角、中文等特殊字符。 增量同步时,BLOB末尾的0x00、CLOB末尾的空格会被截断。 增量同步时,不建议选择混合分区表,因为混合分区表中的外部分区数据变更不产生DML日志,DRS增量数据同步无法获取变更信息,会存在数据不一致的风险。 增量同步时,增量解析时间类型仅支持在Oracle时间类型合法范围内的数据,超范围的数据可能导致任务异常,例如年份大于9999时会出现数据截断。 如果源库为RAC,增量同步首次启动时所有RAC节点必须正常在线,否则增量启动会出现异常。 如果源库为RAC,增量同步时,不支持增加、减少节点数量,避免导致增量同步异常(为保证数据的强一致性)。 表的对象名同步到目标库后会转换成小写,如ABC和abc。因此增量同步阶段,选择的源库的表中不能存在仅大小写不同的表,否则会导致同步失败。 增量阶段不支持Oracle字符集扩展的字符,标准字符集无法解析Oracle自定义扩展字符。 常见故障排查: 在任务创建、启动、全量同步、增量同步、结束等过程中,如有遇到问题,可先参考“故障排查”章节进行排查。 其他限制 选择同步表结构时,目标数据库不能存在待同步数据库。 DRS同步时会有大量数据写入目标库,目标库max_allowed_packet 参数过小会导致无法写入,建议将目标库max_allowed_packet参数值设置为大于100MB。 同步的表要禁用外键,因为DRS并行回放会使得不同表之间的写入顺序和源库不一致,可能会触发外键约束限制,造成同步失败。 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 目标端多的列要求非空且没有默认值,源端insert数据,同步到目标端后多的列为null,不符合目标端要求。 目标端多的列设置固定默认值,且有唯一约束。源端insert多条数据后,同步到目标端后多的列为固定默认值,不符合目标端要求。 相互关联的数据对象要确保同时同步,避免因关联对象缺失,导致同步失败。常见的关联关系:主外键关联表等。 源库和目标库时区设置必须一致。 由于无主键表缺乏行的唯一性标志,网络不稳定时涉及少量重试,表数据存在少量不一致的可能性。 对于同步中的数据库对象,在同步期间,目标库不能进行写入操作,否则会导致数据不一致。 如有中文、日文等特殊字符,业务连接Oracle数据库使用的编码需和Oracle数据库服务端编码一致,否则目标库会出现乱码。 在创建DRS任务之前,如果目标数据库实例开启并设置了SQL限流规则,可能会导致DRS任务失败。 Oracle中表结构长度(所有列长字节数之和,char、varchar2等类型字节长度和编码有关)超过65535时,可能导致同步失败。 Oracle中表结构同步到MySQL后表的字符集为UTF8MB4。 当Oracle字符集是WE8MSWIN1252时,CLOB列同步到目标库可能出现乱码,建议先修改源库字符集为AL32UTF8再同步数据。 当使用PDB数据库同步时,由于Oracle LogMiner组件的限制,增量同步时必须打开全部PDB。 Oracle 12.2及以上版本,由于Oracle LogMiner组件的限制,增量同步不支持表名或列名超过30个字符。 对于Oracle RAC集群,建议使用SCAN IP+ SERVICE_NAMES方式创建任务,SCAN IP具有更强的容错性,更好的负载能力,更快的同步体验。 源库为Oracle RAC时,如果需要使用SCAN IP配置DRS任务,需要保证SCAN IP、DRS节点的IP同时能与源库的所有VIP互通(Oracle内部机制),否则无法通过连通性检查。如果不使用SCAN IP,可以使用某一节点的VIP,这种情况下DRS日志解析只会在VIP指定的RAC节点上进行。 全量+增量任务场景,选择Logminer增量读取方式时不支持直接连PDB数据库,用户需要提供CDB的Service Name/SID、用户名和密码。 源库支持to_date和sys_guid函数做默认值。将其他函数作为default值时,需要目标库也有相同功能的函数。对于目标库不存在对应函数的情况,可能会出现以下结果: 默认值函数可能会被置空。 创建表失败,导致对象对比不一致或者任务失败。 增量同步不支持Oracle上的分布式事务(XA事务)和PARALLEL DML。 如果表中只有LOB字段,可能出现数据不一致性或任务失败的情况。 如果Oracle中使用LOB类型各自的empty函数写入数据时,通过JDBC查询出来的值是空字符串,写入到目标库后是空字符串还是NULL取决于目标库对空字符串值的处理。 针对无主键且无索引的表,非大字段的列必须大于三列,否则会因为无法全列匹配导致增量异常。 库级映射和表级映射均不区分大小写,例如映射为abc与映射为ABC,同步到目标库后均为abc。 任务再编辑增加新表时,请确保新增的表的事务都已提交,否则未提交的事务可能无法同步到目标库。建议在业务低峰期做增加表的操作。 lob类型及扩展字符类型(字节长度超过4000)不建议作为增量数据过滤条件,Oracle日志中可能出现不记录update旧值的情况。 在源数据库Oracle附加日志级别不为all的场景下,如果源数据库增量update操作的数据在目标库不存在,即使冲突策略选的是覆盖,也无法将源数据库完整数据写入目标库。如果要将数据写入目标库,需要源数据库附加日志级别设置为all。 Oracle更新唯一约束列且命中多行时可能出现互相冲突,极端场景下可能造成数据不一致。 XMLTYPE类型在Oracle内部存储方式为CLOB或BLOB,使用限制同CLOB和BLOB一致。 仅Oracle 11g及以上版本支持XMLTYPE类型同步。 Oracle中default值后跟以--开头的注释,--后面要有空格,否则迁移到TaurusDB会报语法错误,因为TaurusDB要求--后必须跟空格。 如果目标库开启过多租特性,不支持同步含有@符号的库。
  • 注意事项 为保证任务的正常运行,DRS提供了自动化的检查方法,在您启动DRS任务前,会针对源数据库和目标数据库的相关配置、条件进行检查。主要的检查项和对应的处理建议请参考预检查项。除了预检查项目之外,您还需要注意的事情参见表4。 表4 注意事项 类型名称 使用和操作限制 源数据库限制 源数据库支持to_date和sys_guid函数做默认值。将其他函数作为default值时,需要目标库也有相同功能的函数。对于目标库不存在对应函数的情况,可能会出现以下结果: 默认值函数可能会被置空。 创建表失败,导致对象对比不一致或者任务失败。 Oracle单行记录不能超过8K(lob、long类型除外,会自动转换成MySQL的text、blob类型),原因是MySQL innodb引擎限制单行大小不能超过8K(text、blob类型除外)。 不建议以字符串类型作为主键或唯一键,因为Oracle的字符串作为主键、唯一键时区分空格,而MySQL不区分,可能导致数据不一致和死锁问题。 对于Oracle的binary_float或者binary_double类型,MySQL中不支持设置Nan、Inf、-Inf三种值,DRS默认会将这三种值转为0保存。 Oracle的check约束同步到MySQL会失效,原因是MySQL不支持check约束。 Oracle中建议列名不要取名AUTO_PK_ROW_ID,原因是这个列名在MySQL5.7中是保留列名,无法创建出来。 Oracle中number(p, s)字段的精度不要超过p: [1, 38], s:[p-65, min(p, 30)]的精度表示范围。其中,s取值依赖于p的取值变化,即下限为p-65, 上限为p或30中取最小值。例如:当p=1, s的取值范围是[-64, 1]。当p=38, s取值范围是[-27, 30]。int字段的值不要超过(65,0)的精度表示范围。原因是MySQL数字的表示范围比Oracle小。 Oracle中float(p)字段的精度不要超过p: [1, 32]的精度表示范围。原因是MySQL float类型的表示范围比Oracle小。 Oracle归档日志文件大小必须大于单条数据最大值,避免单条数据日志跨文件(超过2个日志文件)导致的增量数据解析异常。 源数据库不允许存在索引列的长度之和超过目标库索引列长度限制的索引,具体长度要求请参见索引长度说明。 默认值不支持default user,MySQL没有对应的语法。 使用限制 通用: 不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。 不允许对正在同步中的目标数据库进行修改操作(包括但不限于DDL、DML操作)。 不允许对Oracle源库做resetlogs操作,否则会导致数据无法同步且任务无法恢复。 不支持LOB类型的rollback操作,否则会导致同步任务失败。 不支持修改源数据库Oracle用户名(SCHEMA名),包括11.2.0.2之前版本通过修改USER$字典表方式及11.2.0.2之后通过ALTER USER username RENAME TO new_username修改SCHEMA名称的场景。 全量同步阶段: 任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 DRS全量同步表结构时,源库中的char、varchar2类型长度在目标库会按照字节长自动扩大(因为目标库为字节长),至少扩大1.5倍。扩大倍数和源库目标库的字符集有关,例如同为UTF8的情况下,默认扩大3倍,同为GBK的情况下,默认扩大2倍。 全量同步分区表的结构时会将该对象转为非分区的普通表,增量同步时,源库跟分区表相关的操作,可能无法同步到目标库或者在目标库执行失败。 增量同步阶段: 请勿修改源库或目标库表中的char类型字段为varchar,由于Oracle和MySQL表现不同,产生的空格可能会导致数据对比不一致。 增量同步过程中,支持部分DDL操作。异构数据库DDL转换需要分析语义,考虑语法兼容性,无法做到完美转换,所以目前仅支持部分DDL操作,仅在转换成功并在以下范围内时会进行同步。如果出现其余情况的DDL同步导致的任务异常,需要手动在目标库执行相应的DDL来规避。 表级同步支持ALTER TABLE ADD COLUMN、ALTER TABLE DROP COLUMN、ALTER TABLE RENAME COLUMN、ALTER TABLE MODIFY COLUMN以及TRUNCATE TABLE的基本DDL,不支持默认值等的修改。 库级同步支持CREATE TABLE(表内定义不能包含函数)。 DDL中的对象不能是目标库的关键字,比如index,where等。目标库MySQL关键字可参考MySQL官网文档。 目标库为8.0以下版本时,不支持alter table rename column。 增量DDL不支持全角、中文等特殊字符。 增量同步时,BLOB末尾的0x00、CLOB末尾的空格会被截断。 增量同步时,不建议选择混合分区表,因为混合分区表中的外部分区数据变更不产生DML日志,DRS增量数据同步无法获取变更信息,会存在数据不一致的风险。 增量同步时,增量解析时间类型仅支持在Oracle时间类型合法范围内的数据,超范围的数据可能导致任务异常,例如年份大于9999时会出现数据截断。 如果源库为RAC,增量同步首次启动时所有RAC节点必须正常在线,否则增量启动会出现异常。 如果源库为RAC,增量同步时,不支持增加、减少节点数量,避免导致增量同步异常(为保证数据的强一致性)。 表的对象名同步到目标库后会转换成小写,如ABC和abc。因此增量同步阶段,选择的源库的表中不能存在仅大小写不同的表,否则会导致同步失败。 任务再编辑增加新表时,请确保新增的表的事务都已提交,否则未提交的事务可能无法同步到目标库。建议在业务低峰期做增加表的操作。 常见故障排查: 在任务创建、启动、全量同步、增量同步、结束等过程中,如有遇到问题,可先参考“故障排查”章节进行排查。 其他限制 DRS同步时会有大量数据写入目标库,目标库max_allowed_packet 参数过小会导致无法写入,建议将目标库max_allowed_packet参数值设置为大于100MB。 源库和目标库时区设置必须一致。 选择同步表结构时,目标数据库不能存在待同步数据库。 目标数据库需要有足够的磁盘空间,约为源库空间大小的1.5倍。 目标数据库版本小于5.7.7时,源库单个索引的全部列的长度不得超过767,反之则不得超过3072。 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 目标端多的列要求非空且没有默认值,源端insert数据,同步到目标端后多的列为null,不符合目标端要求。 目标端多的列设置固定默认值,且有唯一约束。源端insert多条数据后,同步到目标端后多的列为固定默认值,不符合目标端要求。 由于无主键表缺乏行的唯一性标志,网络不稳定时涉及少量重试,表数据存在少量不一致的可能性。 如有中文、日文等特殊字符,业务连接Oracle数据库使用的编码需和Oracle数据库服务端编码一致,否则目标库会出现乱码。 在创建DRS任务之前,如果目标数据库实例开启并设置了SQL限流规则,可能会导致DRS任务失败。 Oracle中表结构长度(所有列长字节数之和,char、varchar2等类型字节长度和编码有关)超过65535时,可能导致同步失败。 Oracle中表结构同步到MySQL后表的字符集为UTF8MB4。 当Oracle字符集是WE8MSWIN1252时,CLOB列同步到目标库可能出现乱码,建议先修改源库字符集为AL32UTF8再同步数据。 当使用PDB数据库同步时,由于Oracle LogMiner组件的限制,增量同步时必须打开全部PDB。 Oracle 12.2及以上版本,由于Oracle LogMiner组件的限制,增量同步不支持表名或列名超过30个字符。 对于Oracle RAC集群,建议使用SCAN IP+ SERVICE_NAMES方式创建任务,SCAN IP具有更强的容错性,更好的负载能力,更快的同步体验。 源库为Oracle RAC时,如果需要使用SCAN IP配置DRS任务,需要保证SCAN IP、DRS节点的IP同时能与源库的所有VIP互通(Oracle内部机制),否则无法通过连通性检查。如果不使用SCAN IP,可以使用某一节点的VIP,这种情况下DRS日志解析只会在VIP指定的RAC节点上进行。 由于Oracle与MySQL的部分语法有明显区别,结构同步无法完全保证支持全部语法的转换,包括但不限于函数,表达式,依赖的系统表等。所以在同步过程中,会有在Oracle上存在,在MySQL中没有直接对应的语法,或者MySQL中有对应的语法,但当前还未适配转换的情况,这样会导致结构同步失败。这时,需要手工在目标数据库创建表结构。 同步对象支持设置事务的强一致性(事务同步到目标库的提交顺序和原子性与源库保持一致),性能相比默认模式有较大幅度降低。 打开事务强一致性开关,如果一次提交事务过大(大于256M),可能会导致内存溢出。 全量+增量或单增量任务场景,选择Logminer增量读取方式时不支持直接连PDB数据库,用户需要提供CDB的Service Name/SID、用户名和密码。 lob类型及扩展字符类型(字节长度超过4000)不建议作为增量数据过滤条件,Oracle日志中可能出现不记录update旧值的情况。 在源数据库Oracle附加日志级别不为all的场景下,如果源数据库增量update操作的数据在目标库不存在,即使冲突策略选的是覆盖,也无法将源数据库完整数据写入目标库。如果要将数据写入目标库,需要源数据库附加日志级别设置为all。 Oracle更新唯一约束列且命中多行时可能出现互相冲突,极端场景下可能造成数据不一致。 增量阶段不支持Oracle字符集扩展的字符,标准字符集无法解析Oracle自定义扩展字符。 相互关联的数据对象要确保同时同步,避免因关联对象缺失,导致同步失败。常见的关联关系:主外键关联表等。 增量同步不支持Oracle上的分布式事务(XA事务)和PARALLEL DML。 如果表中只有LOB字段,可能出现数据不一致性或任务失败的情况。 如果Oracle中使用LOB类型各自的empty函数写入数据时,通过JDBC查询出来的值是空字符串,写入到目标库后是空字符串还是NULL取决于目标库对空字符串值的处理。 针对无主键且无索引的表,非大字段的列必须大于三列,否则会因为无法全列匹配导致增量异常。 XMLTYPE类型在Oracle内部存储方式为CLOB或BLOB,使用限制同CLOB和BLOB一致。 仅Oracle 11g及以上版本支持XMLTYPE类型同步。 Oracle中default值后跟以--开头的注释,--后面要有空格,否则迁移到MySQL会报语法错误,因为MySQL要求--后必须跟空格。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 支持表级同步,或者通过文件导入对象。 支持库、表结构、主键、唯一键、普通索引、表数据的同步。 其他数据库对象暂不支持,例如存储过程、触发器、函数、序列、包、同义词、用户等。 全量阶段不支持bfile、sdo_geometry、urowid、interval(精度大于6位)和自定义类型。 增量阶段不支持bfile、interval、sdo_geometry、urowid、timestamp(精度大于6位)和自定义类型。 不支持同步表结构中的partition,分区表在目的库同步为非分区表。 不支持默认值含有表达式的函数的表的同步。 不支持同步源库中的临时表。 不支持选择源数据库的空库进行同步。 不支持同步源库中有虚拟列的表。 增量同步LOB类型仅支持BasicFiles属性,不支持SecureFiles属性,全量和增量支持的LOB类型大小限10M以内。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 全量同步的范围: 库级同步支持:模式、表、索引、约束、视图、物化视图、序列、存储过程、规则、触发器、外键、排序规则、插件、编码转换信息、聚合函数、操作符、统计扩展、转换信息、文本搜索配置、函数、数据类型、类型转换、用户、事件触发器、文本搜索解析器、文本搜索模板的同步。 表级同步时,仅支持表、视图、物化视图、序列、用户、普通索引的同步。 文件导入时,支持表的同步。 不支持系统模式(“pg_”开头的任何模式、“information_schema”、“sys”、“utl_raw”、“dbms_lob”、“dbms_output”和“dbms_random”)、系统表、系统用户、表空间、外部数据包装器、外部服务器、用户映射、发布、订阅等其他对象。 不支持实例级同步: 每次至多同步一个库(database),同步多个库需要使用多个DRS任务
  • 支持的源和目标数据库 表1 支持的数据库 源数据库 目标数据库 本地自建数据库(PostgreSQL 9.4、9.5、9.6、10、11、12、13、14、15、16版本) E CS 自建数据库(PostgreSQL 9.4、9.5、9.6、10、11、12、13、14、15、16版本) 其他云上数据库(PostgreSQL 9.4、9.5、9.6、10、11、12、13、14、15、16版本) RDS for PostgreSQL(9.5、9.6、10、11、12、13、14、15、16版本) RDS for PostgreSQL(9.5、9.6、10、11、12、13、14、15、16版本) 说明: 仅支持目标库大版本等于或高于源库大版本。
  • 支持的源和目标数据库 表1 支持的数据库 源数据库 目标数据库 本地自建MySQL数据库(MySQL 5.5、5.6、5.7、8.0版本) ECS自建MySQL数据库(MySQL 5.5、5.6、5.7、8.0版本) 其他云上MySQL数据库(MySQL 5.5、5.6、5.7、8.0版本) RDS for MySQL(5.5、5.6、5.7、8.0版本) TaurusDB标准版(5.7、8.0版本) GaussDB(DWS)(8.1.3、8.2.0版本) 目前仅支持白名单用户使用。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 支持同步表、普通索引(B-Tree索引)、约束(主键、空、非空)。 支持同步MyISAM和InnoDB表。 全量同步支持comment,增量同步不支持。 不支持同步视图、外键、存储过程、触发器、函数、事件、虚拟列、唯一约束和唯一索引。 不支持同步既是无主键表,又是分区表的自建表。 不支持GaussDB(DWS)的无主键复制表,如果需要同步的表在GaussDB(DWS)为无主键复制表,会导致任务失败。 同步对象列名不能为CTID、XMIN、CMIN、XMAX、CMAX、TABLEOID、XC_NODE_ID、TID等GaussDB(DWS)禁止的字段,否则会导致任务失败。 全量和增量同步不支持隐藏列(INVISIBLE),隐藏列是MySQL 8.0.23开始支持的特性,例如: CREATE TABLE `test11` ( `id` int NOT NULL, `c1` int DEFAULT NULL /*!80023 INVISIBLE */, PRIMARY KEY (`id`));
  • 数据库账号权限要求 在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表2进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表2 数据库账号权限 类型名称 全量同步、增量同步、全量+增量同步 源数据库连接账号 需要具备如下最小权限: SELECT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。 目标数据库连接账号 目标数据库的每张表必须具有如下权限:INSERT、SELECT、UPDATE、DELETE、CONNECT、CREATE。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请参考修改连接信息章节修改DRS任务的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。
  • 支持的源和目标数据库 表1 支持的数据库 源数据库 目标数据库 本地自建MySQL数据库(MySQL 5.5、5.6、5.7、8.0版本) ECS自建MySQL数据库(MySQL 5.5、5.6、5.7、8.0版本) 其他云上MySQL数据库(MySQL 5.5、5.6、5.7、8.0版本) RDS for MySQL(5.5、5.6、5.7、8.0版本) TaurusDB标准版(5.7、8.0版本) GaussDB分布式版(MySQL兼容模式)(版本数据库内核版本为505.2及以下版本,内核版本与数据库引擎版本的关系请参考云数据库GaussDB的数据库引擎版本说明。)
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 仅支持同步表结构、表数据、索引信息。 仅支持同步MyISAM和InnoDB表。 不支持同步存储过程等其他数据库对象。 全量和增量同步不支持隐藏列(INVISIBLE),隐藏列是MySQL 8.0.23开始支持的特性,例如: CREATE TABLE `test11` ( `id` int NOT NULL, `c1` int DEFAULT NULL /*!80023 INVISIBLE */, PRIMARY KEY (`id`));
  • 数据库账号权限要求 在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表2进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表2 数据库账号权限 类型名称 全量同步 全量+增量同步 源数据库连接账号 需要具备如下最小权限: SELECT 需要具备如下最小权限: SELECT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。全量+增量任务,当源数据库为8.0.2及以上版本时,还需要授予XA_RECOVER_ADMIN权限,以防启动或编辑时未提交的XA事务导致数据有损。 目标数据库连接账号 需要具备如下最小权限: SELECT、INSERT、UPDATE、DELETE 需要具备如下最小权限: 需要有表的OWNER权限或USERSUPER权限。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请参考修改连接信息章节修改DRS任务的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。
  • 支持的源和目标数据库 表1 支持的数据库 源数据库 目标数据库 本地自建MySQL数据库(MySQL 5.5、5.6、5.7、8.0版本) ECS自建MySQL数据库(MySQL 5.5、5.6、5.7、8.0版本) 其他云上MySQL数据库(MySQL 5.5、5.6、5.7、8.0版本) RDS for MySQL(5.5、5.6、5.7、8.0版本) TaurusDB标准版(5.7、8.0版本) RDS for PostgreSQL(9.5、9.6、10、11、12、13、14、15、16版本)
  • 源数据库账号权限要求 表2 源数据库账号权限 类型 全量同步 全量+增量同步、增量同步 源数据库连接账号 需要具备如下最小权限: SELECT、SHOW VIEW。 需要具备如下最小权限: SELECT、SHOW VIEW、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。全量+增量任务,当源数据库为8.0.2及以上版本时,还需要授予XA_RECOVER_ADMIN权限,以防启动或编辑时未提交的XA事务导致数据有损。 赋权示例SQL SELECT、SHOW VIEW、EVENT、LOCK TABLES是非全局权限,参考语句如下: GRANT SELECT, SHOW VIEW, EVENT, LOCK TABLES ON [待迁移数据库].* TO 'user1'; REPLICATION SLAVE、REPLICATION CLIENT是全局权限,必须单独开启。参考语句如下: GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'user1'; 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请参考修改连接信息章节修改DRS任务的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。
  • 支持的源和目标数据库 表1 支持的数据库 源数据库 目标数据库 本地自建MySQL数据库(MySQL 5.5、5.6、5.7、8.0版本) ECS自建MySQL数据库(MySQL 5.5、5.6、5.7、8.0版本) 其他云上MySQL数据库(MySQL 5.5、5.6、5.7、8.0版本) RDS for MySQL(5.5、5.6、5.7、8.0版本) TaurusDB标准版(5.7、8.0版本) RDS for MySQL(5.5、5.6、5.7、8.0版本) TaurusDB标准版(5.7、8.0版本) 说明: 仅支持目标库版本等于或高于源库版本。
  • 目标数据库账号权限要求 表3 目标数据库账号权限 类型 所需权限 目标数据库连接账号 需要具备如下最小权限: SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、ALTER、CREATE VIEW、CREATE ROUTINE、REFEREN CES 。 RDS for MySQL实例的root账户默认已具备上述权限。当目标库为8.0.14-8.0.18版本时,还需要有SESSION_VARIABLES_ADMIN权限。 赋权示例SQL SELECT、SHOW VIEW、EVENT、LOCK TABLES是非全局权限,参考语句如下: GRANT SELECT, SHOW VIEW, EVENT, LOCK TABLES ON [待迁移数据库].* TO 'user1'; REPLICATION SLAVE、REPLICATION CLIENT是全局权限,必须单独开启。参考语句如下: GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'user1'; 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请参考修改连接信息章节修改DRS任务的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表4。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表4 支持的同步对象 类型名称 使用须知 同步对象范围 支持表、主键索引、唯一索引、普通索引、存储过程、视图、函数的同步。 仅支持MyISAM和InnoDB表的同步。 不支持事件(EVENT)和触发器(TRIGGER)的同步。 全量和增量同步不支持隐藏列(INVISIBLE),隐藏列是MySQL 8.0.23开始支持的特性,例如: CREATE TABLE `test11` ( `id` int NOT NULL, `c1` int DEFAULT NULL /*!80023 INVISIBLE */, PRIMARY KEY (`id`));
  • 操作步骤 DRS使用的复制槽名可在DRS任务同步日志页面查看“create replication slot[复制槽名] successfully by replication connection.”日志找到。 使用DRS同步任务测试连接时的用户登录GaussDB集中式版实例。 执行如下语句,查询同步任务选择的database对应的所有复制槽信息。 select slot_name from pg_replication_slots where database = 'database'; 其中database为DRS同步任务中选择同步的database。 如果查询结果中包含该DRS任务使用的复制槽名,并且复制槽状态为未使用(查询结果中active='f'),执行如下语句,删除对应的逻辑复制槽。 select * from pg_drop_replication_slot('slot_name'); 其中slot_name为1中查询的复制槽名称。 执行如下语句,查询逻辑复制槽是否成功删除。 select slot_name from pg_replication_slots where slot_name = 'slot_name'; 查询结果为空表示DRS同步任务对应的逻辑复制槽已成功删除。
  • 操作步骤 DRS使用的复制槽名可在DRS任务同步日志页面查看“create replication slot[复制槽名] successfully by replication connection.”日志找到。 分布式多任务模式使用DRS同步任务测试连接时的用户登录GaussDB分布式版的每个主DN节点,分布式单任务模式使用DRS同步任务测试连接时的用户登录GaussDB分布式版的CN节点。 执行如下语句,查询同步任务选择的database对应的所有复制槽信息。 select slot_name from pg_replication_slots where database = 'database'; 其中database为DRS同步任务中选择同步的database。 如果查询结果中包含该DRS任务使用的复制槽名,并且复制槽状态为未使用(查询结果中active='f'),执行如下语句,删除对应的逻辑复制槽。 select * from pg_drop_replication_slot('slot_name'); 其中slot_name为1中查询的复制槽名称。 分布式多任务模式在DN节点执行如下语句,查询逻辑复制槽是否成功删除;分布式单任务模式在CN和DN节点均执行如下语句,查询所有逻辑复制槽是否成功删除; select slot_name from pg_replication_slots where slot_name = 'slot_name'; 查询结果为空表示DRS同步任务对应的逻辑复制槽已成功删除。 重复执行以上操作,确保所有节点都删除成功。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 全量同步时支持表、普通索引、主键与唯一约束、数据的同步。增量同步时支持表的实时同步。 全量阶段不支持bfile、sdo_geometry、urowid和自定义类型。增量阶段不支持bfile、sdo_geometry、urowid、interval year to month、interval day to second和自定义类型。 timestamp和interval day to second类型支持的最大精度是6。 全量同步结构不支持位图索引、倒排索引、函数索引。 增量同步LOB类型仅支持BasicFiles属性,不支持SecureFiles属性,全量和增量支持的LOB类型大小限10M以内。 对于TIMESTAMP WITH TIME ZONE类型,根据目标库时区做转换后不得大于“9999-12-31 23:59:59.999999”。 不支持默认值含有表达式的函数的表的同步。 不支持同步源库中的临时表。 不支持同步源库中有虚拟列的表。 不支持同步既是无主键表,又是分区表的自建表,可能会导致任务失败。 不支持GaussDB的无主键复制表,如果需要同步的表在GaussDB为无主键复制表,会导致任务失败。
  • 支持的源和目标数据库 表1 支持的数据库 源数据库 目标数据库 本地自建数据库(Oracle 10g、11g、12c、18c、19c、21c版本) ECS自建数据库(Oracle 10g、11g、12c、18c、19c、21c版本) GaussDB分布式版(支持ORA兼容模式。版本数据库内核版本为505.2及以下版本,内核版本与数据库引擎版本的关系请参考云数据库GaussDB的数据库引擎版本说明。)
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全