ITPub博客

首页 > 数据库 > 国内数据库 > 达梦CORE文件分析方法

达梦CORE文件分析方法

原创 国内数据库 作者:一鸣_x88 时间:2023-12-20 17:12:23 0 删除 编辑

1.配置 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



2.gdb调试

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

--上述标记的位置就是数据库宕机的最后操作位置。



3.实验案例

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/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2020-07-09

  • 博文量
    8
  • 访问量
    9455