首页 > 数据库 > Oracle > [20241115]gdb检查选择进程注意.txt
[20241115]gdb检查选择进程注意.txt
--//前一段时间写ext_kglob.sh脚本,选择ora_dbw0_<sid>进程有点不妥.
--//通过演示说明问题:
1.环境:
SCOTT@book01p> @ver2
==============================
PORT_STRING : x86_64/Linux 2.4.xx
VERSION : 21.0.0.0.0
BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID : 0
PL/SQL procedure successfully completed.
2.测试:
$ ps -ef| grep ora_dbw[0]
oracle 2761 1 0 08:13 ? 00:00:00 ora_dbw0_book
--//window 1:
$ rlgdb -f -p 2761
Loaded symbols for /u01/app/oracle/product/21.0.0/dbhome_1/lib/libshpkavx2.so
0x00007f90f45fcfca in semtimedop () at ../sysdeps/unix/syscall-template.S:81
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/src/debug/glibc-2.17-c758a686/sysdeps/unix/syscall-template.S:81:3374:beg:0x7f90f45fcfca
(gdb)
--//开始我一直没注意下划线内容.实际如果你使用gdb检查普通用户进程是看不见类似内容的.
--//以sys用户登录.执行:
--//session 1:
SYS@book> alter system checkpoint ;
--//挂起..
SYS@book> @ ashtop event,p1raw,p1,p3raw 1=1 &30s
Total Distinct Distinct Distinct
Seconds AAS %This EVENT P1RAW P1 P3RAW FIRST_SEEN LAST_SEEN Execs Seen Tstamps Execs Seen1
--------- ------- ------- ------------------------------ ---------------- --- ---------------- ------------------- ------------------- ---------- -------- -----------
30 1.0 77% | DLM cross inst call completion 0000000000000001 1 0000000000000008 2024-11-15 08:38:06 2024-11-15 08:38:35 1 30 30
4 .1 10% | 300 2024-11-15 08:38:12 2024-11-15 08:38:24 1 4 4
2 .1 5% | 3 2024-11-15 08:38:06 2024-11-15 08:38:13 1 2 2
2 .1 5% | 100 2024-11-15 08:38:12 2024-11-15 08:38:16 1 2 2
1 .0 3% | 20 2024-11-15 08:38:20 2024-11-15 08:38:20 1 1 1
--//window 1,按c继续:
(gdb) c
Continuing.
--//session 1:
SYS@book> alter system checkpoint ;
System altered.
--//也就是选择ora_dbw0_<sid>进程有点不妥,可能影响正常的业务.必须选择1个后台进程,不大可能影响正常的业务.
SYS@book> @ bgkill mmon
INDX KSUPRPNM PROCESS_FLAG KSUPRPID
---------- ------------------------------ ----------------- ------------------------
29 oracle@centtest (MMON) 2 2791
--//我也不知道该选择那个后台进程.最终选择mmon,kill该进程可以再次生成.
$ ps -ef | grep mmo[n]
oracle 2791 1 0 08:13 ? 00:00:03 ora_mmon_book
$ kill -9 2791
$ ps -ef | grep mmo[n]
--//等上一小会发现可以再次建立mmon进程.
$ ps -ef | grep mmo[n]
oracle 4177 1 6 08:52 ? 00:00:00 ora_mmon_book
--//进程号已经变化.
--//alert*.log出现如下信息:
Restarting dead background process MMON
Starting background process MMON
2024-11-15T08:52:02.740413+08:00
MMON started with pid=29, OS id=4177
3.附上bgkill.sql脚本:
$ cat bgkill.sql
column KSUPRPNM format a30
SELECT indx,ksuprpnm,TO_CHAR(ksuprflg,'XXXXXXXXXXXXXXXX') process_flag,KSUPRPID
FROM x$ksupr
WHERE BITAND(ksuprflg,4) != 4 and KSUPRPID is not null and ksuprpnm like upper('%&&1%')
ORDER BY indx ;
--//该脚本用来确定后台进程是否可以kill.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3050259/ ,如需转载,请注明出处,否则将追究法律责任。