为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8 目标端数据库版本是dm8
【dmhs版本】dmhsV4.3.02
【操作系统】:centos7.9
【CPU】:1
【问题描述】*:start exec初始化执行器被卡住,日志无报错,提示“在加载执行模块…”
【dmhs】安装的是精简版,不是web完全版安装
导致问题原因:精简版本BUG,希望软件能够改进:
1 dmhs精简版本安装时,libdmdpi.so 可以使用bin/stat/下面的
2 dmhs精简版本安装时,libdmoci.so 需要使用bin/stat/下面的
3 dmhs精简版本安装时,需要额外准备一份dm7使用的libdodbc.so(dmhs内置资料库)
4 dmhs精简版本安装时,需要额外准备一份dm7使用的libdmfldr.so(dmhs内置资料库)
替代解决方案:
需要另外准备内置数据库下的两个文件libdodbc.so、libdmfldr.so
cd $DMHS_HOME/bin;ldd libdmhs_exec.so
cp -f /tmp/dmhs_web/db/bin/libdodbc.so $DMHS_HOME/bin/
cp -f /tmp/dmhs_web/db/bin/libdmfldr.so $DMHS_HOME/bin/
cp -f $DMHS_HOME/bin/stat/libdmdpi.so $DMHS_HOME/bin/
cp -f $DMHS_HOME/bin/stat/libdmoci.so $DMHS_HOME/bin/
后台日志:
启动exec被卡住
目标端dmhs.hs XML配置:
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>ch</lang>
<mgr_port>5345</mgr_port>
<ckpt_interval>45</ckpt_interval>
<siteid>91</siteid>
<version>2.0</version>
<mem_check>0</mem_check>
<log_policy>2</log_policy>
<pwd_encipher>0</pwd_encipher>
</base>
<exec>
<recv>
<data_port>5565</data_port>
</recv>
<db_type>dm8</db_type>
<db_server>1.1.1.71</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<db_name></db_name>
<exec_thr>1</exec_thr>
<exec_sql>512</exec_sql>
<exec_trx>5000</exec_trx>
<exec_rows>250</exec_rows>
<msg_col_size>8000</msg_col_size>
<level>0</level>
</exec>
</dmhs>
libdmhs_exec.so;libdodbc.so是目标端数据库的,不是dmhs自带的odbc
[dmdba@dmdb bin]$ ldd libdmhs_exec.so
linux-vdso.so.1 => (0x00007ffc48730000)
libc.so.6 => /lib64/libc.so.6 (0x00002b0311ada000)
libm.so.6 => /lib64/libm.so.6 (0x00002b0311ea8000)
librt.so.1 => /lib64/librt.so.1 (0x00002b03121aa000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b03123b2000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002b03125ce000)
libdmhs_pub.so => ./libdmhs_pub.so (0x00002b03127d2000)
libdmhs_ucvt.so => ./libdmhs_ucvt.so (0x00002b0312adc000)
libdmhs_dm_obj.so => ./libdmhs_dm_obj.so (0x00002b0313034000)
libdmhs_cvt.so => ./libdmhs_cvt.so (0x00002b0313245000)
libdodbc.so => /dm8/db/bin/libdodbc.so (0x00002b03134b2000)
/lib64/ld-linux-x86-64.so.2 (0x00002b0311546000)
libdmhs_exp.so => ./libdmhs_exp.so (0x00002b03136df000)
libdmhs_xml.so => ./libdmhs_xml.so (0x00002b0313a6e000)
libdmoci.so => /dm8/dmhs/bin/stat/libdmoci.so (0x00002b0313c7b000)
libdmdpi.so => /dm8/db/bin/libdmdpi.so (0x00002b0314880000)
libdmfldr.so => /dm8/db/bin/libdmfldr.so (0x00002b0315595000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00002b03158af000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002b0315bb7000)
分析思路:
替换成内置dm7版本的链接文件,启动执行器正常
dmhs_web版本完全安装,dmhs带的内置数据库是dm7版本,替换成内置dm7的链接文件
export LD_LIBRARY_PATH=$DMHS_HOME/db/bin:$DMHS_HOME/bin/lib
-- dmhs安装好之后,几个文件关联的是dm8数据库中的文件
[dmdba@dmdb bin]$ldd libdmhs_exec.so
libdodbc.so => /dm8/db/bin/libdodbc.so (0x00002af6e08b6000)
libdmdpi.so => /dm8/db/bin/libdmdpi.so (0x00002af6e1c84000)
libdmfldr.so => /dm8/db/bin/libdmfldr.so (0x00002af6e2999000)
-- 手动修改dmhs关联的
[dmdba@dmdb bin]$export LD_LIBRARY_PATH=$DMHS_HOME/db/bin:$DMHS_HOME/bin/lib
[dmdba@dmdb bin]$ldd libdmhs_exec.so
libdodbc.so => /tmp/dmhs/db/bin/libdodbc.so (0x00002b44b68ec000)
libdmdpi.so => /tmp/dmhs/db/bin/libdmdpi.so (0x00002b44b7d21000)
libdmfldr.so => /tmp/dmhs/db/bin/libdmfldr.so (0x00002b44b88ab000)
[dmdba@dmdb bin]$export LD_LIBRARY_PATH=$DMHS_HOME/db/bin:$DMHS_HOME/bin/lib
[dmdba@dmdb bin]$dmhs
DMHS console tool: V4.3.02-Build(2022.12.08-120188trunc)_64_2212
Copyright (c) 2020, DMHS. All rights reserved.
Type ? or "help" for help, type "quit" to quit console.
连接到DMHS:127.0.0.1:5345
执行成功
Dameng HS Server V4.3.02-Build(2022.12.08-120188trunc)_64_2212
DMHS> start exec
执行成功
比较这3个库文件差异:
[root@dmdb ~]# find / -name libdodbc.so | xargs ls -l
-rwxr-xr-x. 1 dmdba dinstall 195649 Feb 1 10:17 /dm8/db/bin/libdodbc.so
-rwxr-xr-x. 1 dmdba dinstall 195649 Feb 1 10:17 /dm8/db/drivers/odbc/libdodbc.so
-rwxr-xr-x 1 dmdba dinstall 655430 Feb 24 20:49 /tmp/dmhs/db/bin/libdodbc.so -- 能使用dmhs的
[root@dmdb ~]# find / -name libdmdpi.so | xargs ls -l
-rwxr-xr-x. 1 dmdba dinstall 10443130 Feb 1 10:17 /dm8/db/bin/libdmdpi.so -- dm8安装的
-rwxr-xr-x. 1 dmdba dinstall 10443130 Feb 1 10:17 /dm8/db/drivers/dci/libdmdpi.so
-rwxr-xr-x. 1 dmdba dinstall 10443130 Feb 1 10:17 /dm8/db/drivers/dpi/libdmdpi.so
-rwxr-xr-x. 1 dmdba dinstall 10443130 Feb 1 10:17 /dm8/db/drivers/fldr/libdmdpi.so
-rwxr-xr-x. 1 dmdba dinstall 10443130 Feb 1 10:17 /dm8/db/drivers/logmnr/libdmdpi.so
-rwxr-xr-x. 1 dmdba dinstall 10443130 Feb 1 10:17 /dm8/db/drivers/odbc/libdmdpi.so
-rwxr-xr-x 1 dmdba dinstall 8798405 Feb 21 23:25 /tmp/dmhs_bak/bin/stat/libdmdpi.so -- dmhs精简安装的
-rwxr-xr-x 1 dmdba dinstall 8798405 Feb 21 23:25 /tmp/dmhs_bak/hs_agent/libdmdpi.so
-rwxr-xr-x 1 dmdba dinstall 8798405 Feb 24 20:49 /tmp/dmhs/bin/stat/libdmdpi.so -- dmhs_web版安装的(内置dm7的)
-rwxr-xr-x 1 dmdba dinstall 8798405 Feb 24 20:49 /tmp/dmhs/db/bin/libdmdpi.so
-rwxr-xr-x 1 dmdba dinstall 8798405 Feb 24 20:49 /tmp/dmhs/hs_agent/libdmdpi.so
[root@dmdb ~]# find / -name libdmfldr.so | xargs ls -l
-rwxr-xr-x. 1 dmdba dinstall 1210282 Feb 1 10:17 /dm8/db/bin/libdmfldr.so
-rwxr-xr-x. 1 dmdba dinstall 1210282 Feb 1 10:17 /dm8/db/drivers/dci/libdmfldr.so
-rwxr-xr-x. 1 dmdba dinstall 1210282 Feb 1 10:17 /dm8/db/drivers/fldr/libdmfldr.so
-rwxr-xr-x. 1 dmdba dinstall 1210282 Feb 1 10:17 /dm8/db/drivers/odbc/libdmfldr.so
-rwxr-xr-x 1 dmdba dinstall 9252474 Feb 24 20:49 /tmp/dmhs/db/bin/libdmfldr.so -- dmhs_web版安装的(内置dm7的)
[root@dmdb ~]# find / -name libdmoci.so | xargs ls -l
-rwxr-xr-x 1 dmdba dinstall 9335298 Feb 21 23:25 /tmp/dmhs_bak/bin/stat/libdmoci.so -- libdmoci.so是一致的
-rwxr-xr-x 1 dmdba dinstall 9335298 Feb 21 23:25 /tmp/dmhs_bak/hs_agent/libdmoci.so -- 但是精简版dmhs下没有这个文件
-rwxr-xr-x 1 dmdba dinstall 9335298 Feb 24 20:49 /tmp/dmhs/bin/stat/libdmoci.so
-rwxr-xr-x 1 dmdba dinstall 9335298 Feb 24 20:49 /tmp/dmhs/db/bin/libdmoci.so
-rwxr-xr-x 1 dmdba dinstall 9335298 Feb 24 20:49 /tmp/dmhs/hs_agent/libdmoci.so
结论:
1 dmhs精简版本安装时,libdmdpi.so 可以使用bin/stat/下面的
2 dmhs精简版本安装时,libdmoci.so 需要使用bin/stat/下面的
3 dmhs精简版本安装时,需要额外准备一份dm7使用的libdodbc.so(dmhs内置资料库)
4 dmhs精简版本安装时,需要额外准备一份dm7使用的libdmfldr.so(dmhs内置资料库)
重新安装dmhs精简版,替换上面的4个文件,进行测试
cd $DMHS_HOME/bin;ldd libdmhs_exec.so
cp -f /tmp/dmhs_web/db/bin/libdodbc.so $DMHS_HOME/bin/
cp -f /tmp/dmhs_web/db/bin/libdmfldr.so $DMHS_HOME/bin/
cp -f $DMHS_HOME/bin/stat/libdmdpi.so $DMHS_HOME/bin/
cp -f $DMHS_HOME/bin/stat/libdmoci.so $DMHS_HOME/bin/
# 再次检查ldd,全部都是同一路径下面的了
[dmdba@dmdb ~]$cd $DMHS_HOME/bin;ldd libdmhs_exec.so
linux-vdso.so.1 => (0x00007ffd05df2000)
libc.so.6 => /lib64/libc.so.6 (0x00002b0e6049a000)
libm.so.6 => /lib64/libm.so.6 (0x00002b0e60868000)
librt.so.1 => /lib64/librt.so.1 (0x00002b0e60b6a000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b0e60d72000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002b0e60f8e000)
libdmhs_pub.so => ./libdmhs_pub.so (0x00002b0e61192000)
libdmhs_ucvt.so => ./libdmhs_ucvt.so (0x00002b0e6149c000)
libdmhs_dm_obj.so => ./libdmhs_dm_obj.so (0x00002b0e619f4000)
libdmhs_cvt.so => ./libdmhs_cvt.so (0x00002b0e61c05000)
libdodbc.so => ./libdodbc.so (0x00002b0e61e72000)
/lib64/ld-linux-x86-64.so.2 (0x00002b0e5ff06000)
libdmhs_exp.so => ./libdmhs_exp.so (0x00002b0e62106000)
libdmhs_xml.so => ./libdmhs_xml.so (0x00002b0e62495000)
libdmoci.so => ./libdmoci.so (0x00002b0e626a2000)
libdmdpi.so => ./libdmdpi.so (0x00002b0e632a7000)
libdmfldr.so => ./libdmfldr.so (0x00002b0e63e31000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00002b0e64a22000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002b0e64d2a000)
进行测试:启动后台
MGR[INFO]: DMHS start up, current version: V4.3.02-Build(2022.12.08-120188trunc)_64_2212(Enterprise Edition)
MGR[WARN]: License will expire on 2023-12-25
MGR[INFO]: 成功加载配置文件,站点号:91, 管理端口:5345, 轮询间隔:3, 最大内存设置:64(GB)
MGR[INFO]: 管理 服务正在监听管理端口:5345
MGR[INFO]: 监控到来自 127.0.0.1(dmhs_console) 的登录
MGR[INFO]: 正在加载执行模块...
error in load libodbcinst.so!!: No such file or directory
EXE[INFO]: CONNECT: SERVER=127.0.0.1;DRIVER=DM8 ODBC DRIVER;UID=SYSDBA;PWD=******;TCP_PORT=5236;
EXE[INFO]: DM8的dm.ini中配置SAVEPOINT_LIMIT值为512, 开启保存点优化。
EXE[INFO]: EXEC_V4.3.02_64
EXE[INFO]: 执行线程 1 已经创建,事务合并:TRUE
EXE[INFO]: 执行线程 2 已经创建,事务合并:TRUE
REV[INFO]: 执行 服务数据接收端正在监听数据端口: 5565
[dmdba@dmdb ~]$dmhs
DMHS console tool: V4.3.02-Build(2022.12.08-120188trunc)_64_2212
Copyright (c) 2020, DMHS. All rights reserved.
Type ? or "help" for help, type "quit" to quit console.
连接到DMHS:127.0.0.1:5345
执行成功
Dameng HS Server V4.3.02-Build(2022.12.08-120188trunc)_64_2212
DMHS> start exec
执行成功
DMHS>
libdmoci.so必须是和数据库版本匹配的包,并且位置是放在数据库安装的bin目录位置。
就是oci用错了 不匹配,换个oci就行了
ldd libdmhs_exec.so
看下是不是缺包呢?大概率是缺libdmoci.so这个包