关键词:DMDRS操作限制、DMDRS部署要求、DMDRS搭建条件、数据同步限制、归档日志部署、远程日志读
操作限制
-
不支持仅含大对象列的表的同步。
-
以"DRS_$"开头的表是DMDRS内部系统表,不支持表名为"DRS_$"开头的表同步。
-
装载和同步带外键的表时,与外键相关联的表需要在同一个分组中。
-
装载表结构之前,需要先装载序列,防止有些表默认值为序列导致表结构装载失败。
-
装载和同步删除表操作时,若目标数据库不存在对象表,目标DMDRS不会打印报错信息。
-
在源数据库为DM数据库的情况下同步创建模式操作时,创建模式的SQL中需带上模式所属的用户信息。例如:CREATE SCHEMA "DMDRS" AUTHORIZATION "DMDRS"。
-
支持装载表的最大列数为各数据库支持查询的最大列数减去1。
-
级联同步和环形同步建议使用系统表方式配置DDL同步。如果使用触发器方式配置DDL同步,ddl_mask参数不能配置SQL掩码,且不支持如下DDL操作同步:
- 创建函数、包、存储过程、同义词、触发器、类、视图和物化视图。
- 修改函数、包、存储过程、触发器和视图。
- 删除包、同义词、触发器、类。
-
仅支持模式名、对象名和列名长度在127(含)以内的对象的装载和同步。
-
如果DMDRS所在服务器操作系统需要重启网络服务,DMDRS也需要重启,否则会阻塞在网络上。
-
当目标数据库为Kafka时,DMDRS仅支持不超过1GB的大对象装载和同步。
-
对于异构数据库的Hash表,不支持分区TRUNCATE同步,否则会造成数据不一致。
-
以"SYS_EXPORT_SCHEMA_"、"SYS_IMPORT_SCHEMA_"、"SYS_EXPORT_TABLE_"、"SYS_IMPORT_TABLE_"、"SYS_EXPORT_TABLESPACE_"、"SYS_IMPORT_TABLESPACE_"、"SYS_EXPORT_FULL_"、"SYS_IMPORT_FULL_"和"ET$"开头的表是Oracle数据库的导入导出系统表,上述表的CREATE建表操作同步已屏蔽。
-
当更新的条件列相同,更新值是大对象时,仅能同步更新到第一行,故不支持"当有两行及以上的非大对象列相同时,更新大对象列"情况的同步。
-
如果需要在原有同步链路基础上重新搭建数据分发链路,需要手动清理目标数据库中的辅助表,若不清理辅助表,开启增量同步后存在数据不一致的风险。
DM8到GBase 8s的数据类型范围限制
当源数据库为DM8,目标数据库为GBase 8s时,由于DECIMAL、NUMERIC、BIGINT、INT、SMALLINT数据类型范围不一致,需要注意装载与同步时数据的溢出。
| DM8 |
GBase 8s |
| DECIMAL(38) |
DECIMAL(32) |
| NUMERIC(38) |
NUMERIC(32) |
| BIGINT(-9223372036854775808, 9223372036854775807) |
INT8(-9223372036854775807, 9223372036854775807) |
| INT(-2147483648, 2147483647) |
INT(-2147483647, 2147483647)映射升级为DECIMAL(10,0) |
| SMALLINT(-32768, 32767) |
SMALLINT(-32767, 32767)映射升级为DECIMAL(5,0) |
其他数据库特定限制
- 源数据库为DM7/DM8时,DMDRS不支持BFILE数据类型列带默认值的同步。
- 当源数据库为DM8,目标数据库为PostgreSQL 9.6/10/11版本时,不支持虚拟列相关操作同步。
- 当源数据库为DM8,目标数据库为GBase 8s版本时,必须开启数据库的日志参数(is_logging=1)以支持事务。
- 当源数据库为DM8,目标数据库为GBase 8s版本时,目标DMDRS会话将采用Oracle模式进行数据装载和同步,同时目标数据库的同步用户需要和映射的模式名及目标数据库名保持一致。
- 当源数据库为DM8,目标数据库为GBase 8s版本时,暂不支持表名含特殊符号(除字母、数字和下划线以外)的表的装载和同步。
SQL Server相关限制
- 当源数据库为SQL Server,由于采用查询方式获取日志,当装载查询数据时并发查询日志可能导致获取日志失败报错,推荐仅在DMDRS为STOP状态时进行装载操作。
- 当源数据库为SQL Server,由于数据库存储特性,DATETIME类型数据的第三个毫秒位精度会丢失。当DATETIME列数据精度到最后一位时,含DATETIME类型的表进行更新和删除操作可能会失败。
- 当目标数据库为SQL Server,由于数据库接口不支持并发的特性,推荐分组配置中使用提交策略进行同步,否则可能会导致目标DMDRS执行报错。
- 不支持含SQL Server数据库的双向同步。
- 当目标库为SQL Server,LOB类型数据以最大长度绑定后插入实际长度小于最大长度的数据时会在末尾填充空格;DATETIMEOFFSET类型数据在插入时会将时区值自动转换成时区信息为'00:00'的真实时间;REAL类型会由于日志中记录的真实精度丢失问题导致更新和删除时可能定位不到行,建议该场景下配置Rowid映射。
其他限制
- 无主键表的并行操作delete/update,在GBase 8s中可能会导致死锁。建议该场景配置exec_policy为1或者配置Rowid映射。
- 源数据库为DM7/DM8时,表级同步不支持系统表方式同步DDL。
- 当目标数据库为openGauss,不支持主键约束和唯一约束的启用操作的同步。List分区表的分区值不能为NULL。
- 当目标数据库为DM8,不支持位图索引的同步。位图索引会导致表不能并发,影响同步效率。
- 当目标数据库为Doris时,必须配置源DM8数据库的RLOG_APPEND_LOGIC参数值为2,且必须配置源DMDRS的n2c参数值为1。
- 当源数据库为DM数据库时,对于间隔分区表,DMDRS对于由DML操作产生的子分区不会保存字典,因此存在由DML生成的子分区后,需更新字典后才能同步新增子分区的相关操作,否则相关操作会被过滤。
- 当源数据库为PostgreSQL或Kingbase时,不支持使用导入方式同步。
- 当源数据库为DMDPC时,不支持会引发数据所在的分区发生改变的更新操作。
- 当源数据库为DMDPC时,不支持添加列带sys_guid、rand此类会填充新列值的默认值的同步。
- 当源数据库为DM8,目标数据库为SQL Server时,源数据库的NUMBER数据类型若不带精度和标度信息,会被默认映射为NUMBER(38,10)。
- 当源数据库为DM8,ALTER_TABLE_OPT=3时,不支持添加列带sys_guid默认值的真实值同步。
搭建部署要求
在数据同步、数据分发和数据订阅应用场景中,源DMDRS需要本地或远程读取源数据库的归档日志,因此源DMDRS搭建部署需满足如下要求。
本地部署(源DMDRS与源数据库在同一服务器)
当源数据库为以下类型时,源DMDRS必须与源数据库部署在同一服务器,本地读取源数据库的归档日志:
- DM6单机
- DM7
- DM8(单机、DMDPC)
- Oracle 10g及以上版本(单机)
- DB2 9.7/10.5/11.5
- PostgreSQL 9.6/10/11/12/13
- Kingbase V6/V8(Oracle模式)/V9(Oracle模式)版本
远程部署(源DMDRS可远程读取归档日志)
当源数据库为以下类型时,源DMDRS服务既可以与源数据库部署在同一服务器(本地读取归档日志),也可以与源数据库部署在不同的服务器(通过远程日志读功能实现远程读取源数据库的归档日志):
- DMDSC
- Oracle RAC
- MySQL/MariaDB 5.6/5.7/8
- Microsoft SQL Server 2008 R2/2016/2019版本
当源数据库为DMDSC时,DMDSC必须处于ASM模式才能使用远程日志读功能。
参考
如果你在使用AI助手时想了解DMDRS的操作限制和部署要求,这篇文章可以作为参考。