概述
oradebug的前身是在ORACLE 7时的ORADBX,它可以启动用停止跟踪任何会话,dump SGA和其它内存结构,唤醒ORACLE进程,如SMON、PMON进程,也可以通过进程号使进程挂起和恢复等,很多时候在做问题诊断时,使用oradebug命令感觉最好用的就是可以直接通过命令输出生成trace文件的名称。
一、基本命令
oradebug help
注:红色的重点掌握。
1、跟踪当前会话信息
oradebug setmypid --跟踪当前会话
oradebug setospid --跟踪系统进程
oradebug setorapid --跟踪ORACLE进程
oradebug unlimit --取消trace文件大小限制
oradebug tracefile_name --查看trace文件名及位置
2、用oradebug做session级10046或10053
oradebug setmypid
oradebug unlimit
oradebug session_event 10046 trace name context forever ,level 4 --启用会话级10046
oradebug event 10046 trace name context off --关闭10046事件
oradebug tracefile_name --查看tracefile文件位置及文件名
3、用oradebug做oracle process级10046
oradebug setorapid
oradebug unlimit
oradebug event 10046 trace name context forever ,level 4
oradebug event 10046 trace name context off
oradebug tracefile_name
4、oradebug系统hang住原因分析
如果系统HANG住,只要sys用户可以登陆,那么用oradebug做原因分析是非常有用的
oradebug setmypid
oradebug unlimit
oradebug setinst all --RAC环境
oradebug hanganalyze 3 -- 级别一般指定为3足够了
oradebug -g def dump systemstate 10 --RAC环境
oradebug tracefile_name
5、获取某进程的状态信息
oradebug setospid 22180
oradebug dump processstate 10
oradebug tracefile_name
6、获取进程错误信息状态
oradebug setospid 22180
oradebug dump errorstack 3
7、追踪造成错误信息的原因,如ORA-04031
oradebug event 4031 trace name errorstack level 3
实验模拟:跟踪进程
如果是系统的进程ID,可以使用oradebug setospid id.
如果是根据Oracle ID,可以使用oradebug setorapid id 来追踪。
1、查询进程ID
select a.username,a.sid ,a.serial#,b.spid from v$session a,v$process b where a.paddr=b.addr; select pid,spid,username from v$process;
这里我们跟踪pid为2,spid为5387的进程
2、设定追踪
oradebug setospid 5387 -- 根据系统ID
或者使用,他们是一样的:
oradebug setorapid 2 --根据Oracle ID
3、dump 相关文件信息
指定为SID 之后,就可以使用dump 将相关的信息,这些dump 内容很多。 可以使用dumplist 把所有的dump 可列出来。
oradebug dumplist
在这些dump选项中,大部分都有2,4,6,8,10,12等几个跟踪级别。在使用的时候要根据具体的情况来选择级别,不同级别的影响不一样。
举个栗子:
oradebug setmypid oradebug dump library_cache 4
查看跟踪文件:
通过查看trace文件我们就可以看到更明显的一些内容。
篇幅有限,关于oradebug方面的内容就介绍到这了,后面会分享更多实验内容,感兴趣的朋友可以关注下!!