oracle实用工具:oradebug(二)
一个外部服务进程,且spid=v$process.pid
1) setmypid
[sql]
sys@ORCL> oradebug setmypid
Statement processed.
sys@ORCL> oradebug unlimit
Statement processed.
sys@ORCL> oradebug event 10046 trace name context forever,level 8
Statement processed.
sys@ORCL> select * from hr.departments where department_id=10;
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID
------------- ------------------------------ ---------- -----------
10 Administration 200 1700
sys@ORCL> oradebug tracefile_name
/u01/app/oracle/admin/orcl/udump/orcl_ora_5234.trc
sys@ORCL> oradebug event 10046 trace name context off
Statement processed.
2)setospid(spid操作)
[sql]
sys@ORCL> host top
www.2cto.com
top - 15:14:20 up 47 min, 2 users, load average: 0.22, 0.20, 0.26
Tasks: 171 total, 2 running, 168 sleeping, 0 stopped, 1 zombie
Cpu(s): 1.3%us, 1.3%sy, 0.0%ni, 97.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 678912k total, 671192k used, 7720k free, 16672k buffers
Swap: 0k total, 0k used, 0k free, 401584k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5874 oracle 15 0 2444 1084 828 R 1.6 0.2 0:00.47 top
4781 root 15 0 53900 11m 6076 S 0.7 1.7 1:00.13 Xorg
5168 oracle 16 0 491m 17m 15m S 0.3 2.6 0:02.41 oracle
sys@ORCL> oradebug setospid 5168
Oracle pid: 7, Unix process pid: 5168, image: oracle@localhost.localdomain (CKPT)
3)setorapid(pid操作)
[sql]
sys@ORCL> select sid from v$mystat where rownum=1;
SID
----------
159
sys@ORCL> select pid,spid from v$process p,v$session s where s.sid=159 and s.paddr=p.addr;
PID SPID
---------- ------------
15 5234
sys@ORCL> oradebug setorapid 15
Statement processed. www.2cto.com
sys@ORCL> oradebug tracefile_name
/u01/app/oracle/admin/orcl/udump/orcl_ora_5234.trc
sys@ORCL> oradebug event 10046 trace name context off
Statement processed.
注意,在OEM的top session也可以等价实现上述效果,即:确定哪些
数据库会话消耗了较多的资源
5 oradebug IPC
查看共享信息的内存的命令是ipcs [-m|-s|-q]。默认会列出共享内存、信号量,队列信息,-m列出共享内存,-s列出共享信号量,-q列出共享队列
[sql]
sys@ORCL> host ipcs -m | grep ora
0xbe3bb918 5439503 oracle 640 419438592 20
sys@ORCL> oradebug setmypid
Statement processed.
sys@ORCL> oradebug ipc
Information written to trace file.
sys@ORCL> oradebug tracefile_name
/u01/app/oracle/admin/orcl/udump/orcl_ora_5234.trc
sys@ORCL> oradebug event 10046 trace name context off
Statement processed.
当一台电脑的资源有限时,失败的实例占用共享内存和信号量会导致资源紧张,从而使得新的oracle实例无法启动。
清除命令是ipcrm [-m|-s|-q] id。
-m 删除共享内存,-s删除共享信号量,-q删除共享队列
如:ipcrm -m 5439503
6 oradebug SHORT_STACK
如果一个程序挂起,那么程序调用栈就可以显示它在调用路径中的哪一步挂起
[sql]
sys@ORCL> oradebug setospid 5180
Oracle pid: 13, Unix process pid: 5180, image: oracle@localhost.localdomain (D000)
sys@ORCL> oradebug short_stack www.2cto.com
ksdxfstk()+19<-ksdxcb()+1321<-sspuser()+81<-__kernel_vsyscall()+2<-ntevpque()+112<-ntevque()+606<-nsevwait()+821<-ksnwait()+111<-ksliwat()+770<-kslwaitns()+29<-
kskthbwt()+370<-kslwait()+57<-kmdmai()+1797<-kmmrdp()+432<-opirip()+1191<-opidrv()+864<-sou2o()+113<-opimai_real()+353<-main()+111<-__libc_start_main()+220
sys@ORCL> oradebug event 10046 tra