首页 > 数据库 > 国内数据库 > 达梦CORE文件分析方法
[dmdba@localhost log]$ cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
kernel.core_pattern = /home/dmdba/core.%p
--core文件配置的路径,意外崩溃的线程会在此路径下记录core文件。
--编辑完成后执行sysctl -p 使配置生效。
# kill -s SIGSEGV $$ ,执行命令,可以看到/var/core下生成了一个core文件,说明已经设置成功。
[dmdba@localhost ~]$ ll
总用量 1012044
drwxr-xr-x 2 dmdba dinstall 4096 6月 2 16:33 arch
drwxr-xr-x 2 dmdba dinstall 30 2月 27 22:43 BAKSET_COPY
-rw-r--r-- 1 dmdba dinstall 27501 6月 3 11:14 core-19-12.log
-rw------- 1 dmdba dinstall 2712518656 6月 3 11:01 core.9777
-rw-r--r-- 1 dmdba dinstall 197 6月 3 11:33 core_tmp.9777
-rw-r--r-- 1 dmdba dinstall 37234057 3月 27 09:48 DmcheckSysinfo.jar
-rw-r--r-- 1 dmdba dinstall 30923 4月 11 14:26 docx_debug.log
-rw-r--r-- 1 dmdba dinstall 30923 4月 11 14:26 docx.log
drwxr-xr-x 3 dmdba dinstall 78 4月 11 14:26 execResult
-rw-r--r-- 1 dmdba dinstall 1928 3月 27 10:06 systemcheck.setting
gdb是操作系统命令,使用前验证命令是否存在。
gdb /opt/dm8/bin/dmserver core.9777
Missing separate debuginfo for the main executable file
Try: yum --enablerepo='*debug*' install /usr/lib/debug/.build-id/93/76907d2002e9993905d04443cea07a63eb0bb8
Core was generated by `./dmserver /opt/dm8/test_database/DAMENG/dm.ini'.
Program terminated with signal 8, Arithmetic exception.
#0 0x00000000015495f7 in ?? () --注释的地址代表报错的线程地址
"/home/dmdba/core.9777" is a core file.
Please specify an executable to debug.
(gdb) info threads
4 LWP 9781 0x00007fc94ccb2a35 in ?? ()
3 LWP 9780 0x00007fc94ccb2a35 in ?? ()
2 LWP 9777 0x00007fc94c1bb9bd in ?? ()
* 1 LWP 10195 0x00000000015495f7 in ?? ()
--最后打印的标记为*线程代表是出问题的线程,PID为10195.
(gdb) set logging file /tmp/core-9777.log
(gdb) set logging on
Copying output to core-19-12.log.log.
(gdb) thread apply all bt
#一直enter直到所有线程打印退出
(gdb) set logging off
(gdb) quit
--通过GDB的操作将分析的结果打印到指定的文件。
--过滤线程确认PID
cat /tmp/core-9777.log|grep -C 10 95f7
Thread 1 (LWP 10195):
#0 0x00000000015495f7 in ?? ()
#1 0x00007fc92f32a7e8 in ?? ()
#2 0x000000000155f588 in ?? ()
#3 0x00007fc8000027d3 in ?? ()
#4 0x0000000000000000 in ?? ()
--我们可以通过找到的内存地址来过滤验证PID是否为10195.
--打印堆栈执行的语句
/opt/dm8/bin/dmrdc sfile=core.9777 dfile=/tmp/result.log
Analysing: 1352662524/2712518656
Analysing: 1384119792/2712518656
Analysing: 1415577060/2712518656
Analysing: 1447034328/2712518656
Analysing: 1478491596/2712518656
Analysing: 1509948864/2712518656
Analysing: 1541406132/2712518656
Analysing: 1572863400/2712518656
Analysing: 1604320668/2712518656
Analysing: 1635777936/2712518656
Analysing: 1667235204/2712518656
Analysing: 1698692472/2712518656
Analysing: 1730149740/2712518656
Analysing: 1761607008/2712518656
Analysing: 1793064276/2712518656
Analysing: 1824521544/2712518656
Analysing: 1855978812/2712518656
Analysing: 1887436080/2712518656
Analysing: 1918893348/2712518656
Analysing: 1950350616/2712518656
Analysing: 1981807884/2712518656
Analysing: 2013265152/2712518656
Analysing: 2044722420/2712518656
Analysing: 2076179688/2712518656
Analysing: 2107636956/2712518656
Analysing: 2139094224/2712518656
Analysing: 2170551492/2712518656
Analysing: 2202008760/2712518656
Analysing: 2233466028/2712518656
Analysing: 2264923296/2712518656
Analysing: 2296380564/2712518656
Analysing: 2327837832/2712518656
Analysing: 2359295100/2712518656
Analysing: 2390752368/2712518656
Analysing: 2422209636/2712518656
Analysing: 2453666904/2712518656
Analysing: 2485124172/2712518656
Analysing: 2516581440/2712518656
Analysing: 2548038708/2712518656
Analysing: 2579495976/2712518656
Analysing: 2610953244/2712518656
Analysing: 2642410512/2712518656
Analysing: 2673867780/2712518656
Analysing: 2705325048/2712518656
3.586
--使用达梦本身的工具/opt/dm8/bin/dmrdc分析后得到达梦线程的详细信息。
[dmdba@localhost ~]$ strings /tmp/result.log |grep -C 10 10195
!#%&*^$@[10195]:UPDATE test A SET C1 = B.C1 FROM Test A INNER JOIN T2 B ON A.ID = B.ID AND A.C2 LIKE 'A%';
!#%&*^$@[10194]:/***Manager***/drop table "SYSDBA"."T2" restrict;
--然后通过strings命令过滤进程号得到导致数据库宕机的具体命令。
(gdb) where
#0 0x00000000015495f7 in assert_fun ()
#1 0x000000000155f588 in sigterm_handler ()
#2 <signal handler called>
#3 0x0000000000ba5660 in nsel_add_rowid_in_selitem_lst ()
#4 0x0000000000cf8a1e in pha_delete_build_rowid ()
#5 0x0000000000cf8b2e in pha_delete_view_build_cpk_normal ()
#6 0x0000000000cf8d12 in pha_delete_view_build_cpk ()
#7 0x0000000000cf8e72 in pha_delete_build_sel_item ()
#8 0x0000000000d7d9ec in pha_upd_select ()
#9 0x0000000000d7ea7e in pha_update ()
#10 0x0000000000cd0fce in pha_single_sql ()
#11 0x0000000000cd1929 in pha_main_low ()
#12 0x0000000000cd1a9d in pha_main ()
#13 0x0000000001574686 in ntsk_pha_main ()
#14 0x0000000001575b1a in ntsk_process_prepare_low2 ()
#15 0x0000000001576c0d in ntsk_process_prepare_low ()
#16 0x0000000001576e30 in ntsk_process_prepare_and_exec ()
#17 0x0000000001586929 in ntsk_process_cop ()
#18 0x000000000147b1d6 in uthr_db_main_for_sess ()
#19 0x00007fc94ccaeea5 in start_thread () from /lib64/libpthread.so.0
#20 0x00007fc94c1ca8dd in clone () from /lib64/libc.so.6
--上述标记的位置就是数据库宕机的最后操作位置。
CREATE TABLE T1 (ID INT,C1 VARCHAR2(20),C2 VARCHAR2(20));
CREATE TABLE T2 (ID INT,C1 VARCHAR2(20),C2 VARCHAR2(20));
INSERT INTO T1 SELECT LEVEL ,DBMS_RANDOM.STRING('U',20),DBMS_RANDOM.STRING('U',20) FROM DUAL CONNECT BY LEVEL <=100;
INSERT INTO T2 SELECT LEVEL ,DBMS_RANDOM.STRING('U',20),DBMS_RANDOM.STRING('U',20) FROM DUAL CONNECT BY LEVEL <=100;
COMMIT;
create or replace view test as select * from t1;
UPDATE test A SET C1 = B.C1 FROM Test A INNER JOIN T2 B ON A.ID = B.ID AND A.C2 LIKE 'A%';
总共1个语句正依次执行...
[执行语句1]:
UPDATE test A SET C1 = B.C1 FROM Test A INNER JOIN T2 B ON A.ID = B.ID AND A.C2 LIKE 'A%';
执行失败(语句1)
网络通信异常(重连)
1条语句执行失败

--日志显示为sigterm_handler receive signal 11
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69978820/viewspace-3000823/ ,如需转载,请注明出处,否则将追究法律责任。