DMDRS常见问题

本章节主要介绍 DMDRS 常见问题,为用户提供达梦数据复制软件 DMDRS 常见问题的分析和解决思路。除此之外,用户还可前往达梦技术社区参与更多问题讨论。

目录


正文

DMDFM 配置 MySQL8.0.41 数据源时连接失败

【问题描述】

DMDFM 配置 MySQL8.0.41 数据源时报错,连接失败:“java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password'”,如下所示:

image.png

【问题分析】

MySQL 5.7 及以上版本中引入的新的默认认证插件 caching_sha2_password,如果遇到该报错一般是内置驱动兼容性问题导致,可通过将 MySQL 用户的认证插件改回旧的 mysql_native_password 来解决。

【问题解决】

  1. 检查用户认证插件。
use mysql;
select host,user,plugin from mysql.user;

image.png

  1. 将用户认证插件改回旧的 mysql_native_password,例如 DMDRS 用户:
ALTER USER 'dmdrs'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Dameng@123';
FLUSH PRIVILEGES;

image.png

  1. 检查用户认证插件是否修改完成。
select host,user,plugin from mysql.user;

image.png

  1. 修改登录 IP 限制,允许所有 IP 登录。
update user set host = '%' where user = 'dmdrs';
FLUSH PRIVILEGES;

image.png

  1. 授予 mysql.user 表的查询权限,授予待同步数据库 dmdrs 所有权限。
GRANT SELECT ON mysql.user TO 'dmdrs'@'%';
GRANT ALL PRIVILEGES ON dmdrs.* TO 'dmdrs'@'%';
FLUSH PRIVILEGES;

image.png

  1. DMDFM 测试连接

数据库已经可以下拉选择,选择 dmdrs 进行连接。

image.png

连接测试成功。

image.png

Oracle19c 到 DM8 通过 DMDVS 进行数据校验时报错:动态库文件加载失败

【问题描述】

DMDRS 数据同步 Oracle19c 到 DM8 通过 DMDVS 进行数据校验时报错“[ERROR]: DRS-3009 动态库文件加载失败 file: libdvora.so or libdvdm.so,code: 0”

【问题分析】

在部署 DMDVS 时需配置动态库依赖路径,该报错一般都是需要的数据库驱动路径没加到环境变量里面导致,通过 ldd 检查动态库文件 libdvora.so 和 libdvdm.so 发现存在缺失。

【问题解决】

  1. 使用 DMDVS 启动用户在动态库依赖路径下通过 ldd 命令检查动态库文件 libdvora.so 和 libdvdm.so 是否存在缺失。
[oracle@hellodba ~]$ cd /data/dmdrs5/INST_DRS/node1/
[oracle@hellodba node1]$ ldd libdvora.so

image.png

[oracle@hellodba node1]$ ldd libdvdm.so

image.png

  1. 查找缺失的依赖路径。
[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
  1. 配置 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
  1. 在服务器端重启 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 ]
  1. 服务器端重启 DMDVS 后 DMDFM 平台可以正常使用校验功能。

image.png

使用 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 的数据同步时,目的端需要打印字段数据类型。

【问题解决】

  1. 默认 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}
}

此时,后续数据同步到目的端输出格式只有字段名,无字段类型。

  1. 在源端 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 同步过程中,源端日志报文件写入失败,源端服务宕掉。

image.png

【问题分析】

排查发现,源端有查询建表操作导致 DDL 缓存文件过大,且软件安装在根目录,根目录被撑满,导致源端服务宕掉。

【问题解决】

在源端配置文件中配置 <dict_dir> </dict_dir> 将存在本地的字典、约束、DDL、事务和缓存库等存放至磁盘充足的路径。

参数说明: <dict_dir>

含义:离线字典的路径。

解释:

  1. 默认值为程序的当前工作目录。
  2. 此路径指保存在本地的字典、约束、DDL、事务和缓存库的总路径。
  3. 当源 DMDRS 配置为离线日志解析时,该参数配置为离线日志解析中字典文件的存储路径。

参数示例:

<dict_dir>/data/dmdrs/dmdrs5/bin</dict_dir>

DMDRS 源端日志报错:ora-12154

【问题描述】

发起 Oracle rac 到 DM 的 DMDRS cp 装载时,源端 DMDRS 日志报错: ora-12154。

image.png

【问题分析】

如果源端 Oracle 为 RAC 环境,且装载使用的 DMDRS 客户端代理与源端数据库不处于同一个服务器下,则不只需要在 DMDRS 配置文件中配置源端 Oracle 的 ip、端口、服务名和参数,还需要在 DMDRS 客户端代理机器上安装 oci,并且配置 tns,写清参数中的 asm 服务名的连接方式。

【问题解决】

在源端代理 DMDRS 客户端上配置了 tns 后,DMDRS 可以正常连接到源端,例如下面的 ASM1 的配置。

image.png

装载数据时源端 DMDRS 日志报错:装载获取 lsn 失败

【问题描述】

Oracle 到 DM 使用 cp 命令装载数据库时,源端 oracle 的 DMDRS 日志报错:装载获取 lsn 失败。且导致较多的表装载失败需要重装。

image.png

【问题分析】

排查源端的数据库配置,发现源端在 sqlnet 配置了 sqlnet.expire_time=30,导致 DMDRS 的 oci 连接会频繁断开,导致装载失败。

image.png

【问题解决】

  1. 如果源端可以修改 sqlnet 配置,可以去掉此 sqlnet.expire_time 参数,不需要重启 oracle 生效。
  2. 如果源端不可以修改 sqlnet 配置,则推荐装载命令后加上 FAST 掩码,此掩码的作用为在 drs 中开启了 fldr 功能,提升装载性能,可以避免上述问题再次发生。
微信扫码
分享文档
扫一扫
联系客服