disql连接数据库报错Segmentation fault (core dumped) 。
(1)disql依赖分析
主要通过ldd disql查看是否有依赖包缺失,和正常机器的ldd disql进行对比。对比发现没有缺依赖,看不出问题。
linux-vdso.so.1 => (0x00007fff973fe000)
libdisql_dll.so => /home/dmdba/dmdbms/bin/libdisql_dll.so (0x00007fa7607aa000)
librt.so.1 => /lib64/librt.so.1 (0x00007fa76058a000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa76036e000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fa760169000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fa75fe62000)
libm.so.6 => /lib64/libm.so.6 (0x00007fa75fb60000)
libc.so.6 => /lib64/libc.so.6 (0x00007fa75f79e000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fa75f588000)
libdmdpi.so => /home/dmdba/dmdbms/bin/libdmdpi.so (0x00007fa75e857000)
libdmclientlex.so => /home/dmdba/dmdbms/bin/libdmclientlex.so (0x00007fa75e623000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa760a16000)
libdmutl.so => /home/dmdba/dmdbms/bin/libdmutl.so (0x00007fa75e40d000)
libdmos.so => /home/dmdba/dmdbms/bin/libdmos.so (0x00007fa75e1da000)
libdmelog.so => /home/dmdba/dmdbms/bin/libdmelog.so (0x00007fa75dfd1000)
libdmmem.so => /home/dmdba/dmdbms/bin/libdmmem.so (0x00007fa75ddc0000)
(2)通过strace命令追踪程序调用,并将结果输出到文件,分析文件里面是否有报错。
[dmdba@dm bin]$ strace -f -s 1000 -o strace.txt ./disql SYSDBA/SYSDBA
[dmdba@dm bin]$ more strace.txt
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=95712, ...}) = 0
mmap(NULL, 95712, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fed7b9ec000
close(3) = 0
open("/lib64/tls/libcrypto.so.1.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib64/libcrypto.so.1.1", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)
open("/usr/lib64/tls/libcrypto.so.1.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib64/libcrypto.so.1.1", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)
munmap(0x7fed7b9ec000, 95712) = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x1d896} ---
+++ killed by SIGSEGV (core dumped) +++
Segmentation fault (core dumped)
从上面可以看到调用/usr/lib64/libcrypto.so.1.1报错权限拒绝。
后面,授权755后,disql就可以正常登录数据库了。询问得知有升级过主机的ssh,估计是这时候这个文件的权限发生过变更导致故障。
[root@dm ~]# chmod 755 /usr/lib64/libcrypto.so.1.1
[root@dm ~]# su - dmdba
[dmdba@dm ~]$ cd dmdbms/bin
[dmdba@dm bin]$ ./disql sysdba
密码:
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 3.016(ms)
disql V8
SQL>
此次故障能比较快速的解决,得益于strace命令工具,它是一个集诊断、调试、统计于一体的工具,我们要善于使用这种工具来分析这类问题。其实我之前还遇到过dblink和odbc不通的相关问题,也是通过这个工具去排查,比较顺利的解决了问题。
文章
阅读量
获赞