本章节主要介绍 DMDRS 常见问题,为用户提供达梦数据复制软件 DMDRS 常见问题的分析和解决思路。除此之外,用户还可前往达梦技术社区参与更多问题讨论。
目录
- DMDFM 配置 MySQL8.0.41 数据源时连接失败
- Oracle19c 到 DM8 通过 DMDVS 进行数据校验时报错:动态库文件加载失败
- 使用 DMDRS 装载时目的端报错:字符串截断
- 使用 DMDRS 进行数据装载时报错:执行端内存不足
- DMDRS 进行数据同步时,目的端如何打印字段数据类型
- DMDRS 装载报错:装载未能锁定待装载表
- 使用 DMDRS 同步时,源端日志报文件写入失败
- DMDRS 源端日志报错:ora-12154
- 装载数据时源端 DMDRS 日志报错:装载获取 lsn 失败
正文
DMDFM 配置 MySQL8.0.41 数据源时连接失败
【问题描述】
DMDFM 配置 MySQL8.0.41 数据源时报错,连接失败:“java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password'”,如下所示:
【问题分析】
MySQL 5.7 及以上版本中引入的新的默认认证插件 caching_sha2_password,如果遇到该报错一般是内置驱动兼容性问题导致,可通过将 MySQL 用户的认证插件改回旧的 mysql_native_password 来解决。
【问题解决】
- 检查用户认证插件。
use mysql;
select host,user,plugin from mysql.user;
- 将用户认证插件改回旧的 mysql_native_password,例如 DMDRS 用户:
ALTER USER 'dmdrs'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Dameng@123';
FLUSH PRIVILEGES;
- 检查用户认证插件是否修改完成。
select host,user,plugin from mysql.user;
- 修改登录 IP 限制,允许所有 IP 登录。
update user set host = '%' where user = 'dmdrs';
FLUSH PRIVILEGES;
- 授予 mysql.user 表的查询权限,授予待同步数据库 dmdrs 所有权限。
GRANT SELECT ON mysql.user TO 'dmdrs'@'%';
GRANT ALL PRIVILEGES ON dmdrs.* TO 'dmdrs'@'%';
FLUSH PRIVILEGES;
- DMDFM 测试连接
数据库已经可以下拉选择,选择 dmdrs 进行连接。
连接测试成功。
Oracle19c 到 DM8 通过 DMDVS 进行数据校验时报错:动态库文件加载失败
【问题描述】
DMDRS 数据同步 Oracle19c 到 DM8 通过 DMDVS 进行数据校验时报错“[ERROR]: DRS-3009 动态库文件加载失败 file: libdvora.so or libdvdm.so,code: 0”
【问题分析】
在部署 DMDVS 时需配置动态库依赖路径,该报错一般都是需要的数据库驱动路径没加到环境变量里面导致,通过 ldd 检查动态库文件 libdvora.so 和 libdvdm.so 发现存在缺失。
【问题解决】
- 使用 DMDVS 启动用户在动态库依赖路径下通过 ldd 命令检查动态库文件 libdvora.so 和 libdvdm.so 是否存在缺失。
[oracle@hellodba ~]$ cd /data/dmdrs5/INST_DRS/node1/
[oracle@hellodba node1]$ ldd libdvora.so
[oracle@hellodba node1]$ ldd libdvdm.so
- 查找缺失的依赖路径。
[root@hellodba ~]# find / -name libclntsh.so.11.1
/u01/app/oracle/product/19.0.0/dbhome_1/lib/libclntsh.so.11.1
[root@localhost ~]# find / -name libdmdpi.so
/home/oracle/oracledbms/drivers/dpi/libdmdpi.so
[root@localhost ~]# find / -name libdmfldr.so
/home/oracle/oracledbms/drivers/odbc/libdmfldr.so
/home/oracle/oracledbms/bin/libdmfldr.so
- 配置 DMDVS 启动用户环境变量。
[oracle@localhost ~]$ vi .bash_profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/bin:/home/oracle/oracledbms/bin/:/home/oracle/oracledbms/drivers/odbc/
##使环境变量生效。
[oracle@localhost ~]$ source ~/.bash_profile
##检查依赖文件是否完整
[oracle@hellodba node1]$ ldd libdvora.so
[oracle@hellodba node1]$ ldd libdvdm.so
- 在服务器端重启 DMDVS。
[oracle@localhost ~]$ cd /data/dmdvs/dmdvs_V5.0.4.3_rev176693_x86_rh6_64_20241206_sp15/bin
[oracle@localhost bin]$ ./DvsService stop
Stopping DvsService: [ OK ]
[oracle@localhost bin]$ ./DvsService start
Starting DvsService: [ OK ]
- 服务器端重启 DMDVS 后 DMDFM 平台可以正常使用校验功能。
使用 DMDRS 装载时目的端报错:字符串截断
【问题描述】
使用 DMDRS 进行 DM 到 DM 装载数据时,目的端报错:字符串截断。
【问题解决】
修改目的端配置文件 drs.xml 添加参数。
<char_length_expand>4</char_length_expand>
含义:同步表列精度需要扩大的倍数,取值范围为 0~10,默认值为 0。
说明:在同步表 DDL 操作过程中,针对数据库字符集,执行数据入库时,存储的空间需要增加,为保障数据入库的正确性,需要在创建/修改表结构时,扩大字符类型字段的精度。该参数仅影响 CHAR、VARCHAR 和 VARCHAR2 类型字段。
使用 DMDRS 进行数据装载时报错:执行端内存不足
【问题描述】
配置 Oracle 到 DM 的 DRS,进行数据装载时报错:执行端内存不足。
【问题解决】
目的端 drs.xml 配置文件中调整参数 。
<mem_size>8</mem_size>
参数含义:服务程序运行时可以申请的最大内存。取值范围:0~255,单位:GB,默认值为 16。
参数说明:当服务程序运行时申请的内存超过该参数值时,服务程序会报错。
DMDRS 进行数据同步时,目的端如何打印字段数据类型
【问题描述】
使用 DMDRS 进行 dm 到 kafka 的数据同步时,目的端需要打印字段数据类型。
【问题解决】
- 默认 kafka 端 json_format.ini 配置文件格式记录如下:
//默认格式
JSON_FORMAT_INS = {
"table":"#SCHEMA.#TABLE",
"op_type":"#OP_TYPE",
"op_ts":"#OP_TIME",
"current_ts":"#TIME",
"pos":"#POS",
"primary_keys":[#PRIMARY_KEY],
"after":{#NEW_VALUES}
}
此时,后续数据同步到目的端输出格式只有字段名,无字段类型。
- 在源端 drs.xml 文件中添加
<dml_with_coldef>1</dml_with_coldef>
,目的端 json_format.ini 中添加"COLUMN":[#NAME_TYPE]
。
//添加"COLUMN":[#NAME_TYPE]后格式
JSON_FORMAT_INS = {
"table":"#SCHEMA.#TABLE",
"op_type":"#OP_TYPE",
"op_ts":"#OP_TIME",
"current_ts":"#TIME",
"pos":"#POS",
"primary_keys":[#PRIMARY_KEY],
"after":{#NEW_VALUES},
"COLUMN":[#NAME_TYPE]
}
在初始数据装载时目的端字段数据类型会统一显示为 char,后续数据同步按照源端对应的数据类型显示。以上以 insert 为例,update、delete 配置相同。
DMDRS 装载报错:装载未能锁定待装载表
【问题描述】
Oracle 到 DM 在 DRS 装载数据过程中报错:DRS-2430 装载未能锁定待装载表。
【问题分析】
源端 Oracle 有大量的业务操作 如 update,delete 等,导致装载时无法给表上 S 锁,这种情况下可以使用闪回查询的方式进行装载。
【问题解决】
以闪回查询的方式装载,在装载掩码中添加 FLASHBACK。
使用 DMDRS 同步时,源端日志报文件写入失败
【问题描述】
在 DRS 同步过程中,源端日志报文件写入失败,源端服务宕掉。
【问题分析】
排查发现,源端有查询建表操作导致 DDL 缓存文件过大,且软件安装在根目录,根目录被撑满,导致源端服务宕掉。
【问题解决】
在源端配置文件中配置 <dict_dir> </dict_dir>
将存在本地的字典、约束、DDL、事务和缓存库等存放至磁盘充足的路径。
参数说明: <dict_dir>
含义:离线字典的路径。
解释:
- 默认值为程序的当前工作目录。
- 此路径指保存在本地的字典、约束、DDL、事务和缓存库的总路径。
- 当源 DMDRS 配置为离线日志解析时,该参数配置为离线日志解析中字典文件的存储路径。
参数示例:
<dict_dir>/data/dmdrs/dmdrs5/bin</dict_dir>
DMDRS 源端日志报错:ora-12154
【问题描述】
发起 Oracle rac 到 DM 的 DMDRS cp 装载时,源端 DMDRS 日志报错: ora-12154。
【问题分析】
如果源端 Oracle 为 RAC 环境,且装载使用的 DMDRS 客户端代理与源端数据库不处于同一个服务器下,则不只需要在 DMDRS 配置文件中配置源端 Oracle 的 ip、端口、服务名和参数,还需要在 DMDRS 客户端代理机器上安装 oci,并且配置 tns,写清参数中的 asm 服务名的连接方式。
【问题解决】
在源端代理 DMDRS 客户端上配置了 tns 后,DMDRS 可以正常连接到源端,例如下面的 ASM1 的配置。
装载数据时源端 DMDRS 日志报错:装载获取 lsn 失败
【问题描述】
Oracle 到 DM 使用 cp 命令装载数据库时,源端 oracle 的 DMDRS 日志报错:装载获取 lsn 失败。且导致较多的表装载失败需要重装。
【问题分析】
排查源端的数据库配置,发现源端在 sqlnet 配置了 sqlnet.expire_time=30,导致 DMDRS 的 oci 连接会频繁断开,导致装载失败。
【问题解决】
- 如果源端可以修改 sqlnet 配置,可以去掉此 sqlnet.expire_time 参数,不需要重启 oracle 生效。
- 如果源端不可以修改 sqlnet 配置,则推荐装载命令后加上 FAST 掩码,此掩码的作用为在 drs 中开启了 fldr 功能,提升装载性能,可以避免上述问题再次发生。