oradebug工具使用3(转载)
1 oradebug介绍
oradebug主要是给oracle支持人员使用的,尽管很早便有,但oracle官网很少有记载。他是个sql*plus命令行工具,有sysdba的权限就可以登入,无需特别设置。他可以被用于:
1)追踪进程,或者是你的,或者是外部的
2)确定进程往哪个trc文件写
3)转储:数据文件头、内部oracle结构等
4)挂起进程,暂时的
5)确定实例使用了哪些共享内存块和信号量
6)找出RAC实例使用了哪些互联地址和协议
7)修改SGA中的数据结构
2 oradebug使用步骤
1)启动sql*plus并以sysdba身份登入
2)连接到一个进程
3)设置一个事件或者进行诊断转储
4)检索trc文件名
5)与连接到的进程断开
3 oradebug命令介绍
- sys@ORCL> oradebug help
- HELP [command] Describe one or all commands
- SETMYPID Debug current process
- SETOSPID <ospid> Set OS pid of process to debug
- SETORAPID <orapid> ['force'] Set Oracle pid of process to debug
- SHORT_STACK Dump abridged OS stack
- DUMP <dump_name> <lvl> [addr] Invoke named dump
- DUMPSGA [bytes] Dump fixed SGA
- DUMPLIST Print a list of available dumps
- EVENT <text> Set trace event in process
- SESSION_EVENT <text> Set trace event in session
- DUMPVAR <p|s|uga> <name> [level] Print/dump a fixed PGA/SGA/UGA variable
- DUMPTYPE <address> <type> <count> Print/dump an address with type info
- SETVAR <p|s|uga> <name> <value> Modify a fixed PGA/SGA/UGA variable
- PEEK <addr> <len> [level] Print/Dump memory
- POKE <addr> <len> <value> Modify memory
- WAKEUP <orapid> Wake up Oracle process
- SUSPEND Suspend execution
- RESUME Resume execution
- FLUSH Flush pending writes to trace file
- CLOSE_TRACE Close trace file
- TRACEFILE_NAME Get name of trace file
- LKDEBUG Invoke global enqueue service debugger
- NSDBX Invoke CGS name-service debugger
- -G <Inst-List | def | all> Parallel oradebug command prefix
- -R <Inst-List | def | all> Parallel oradebug prefix (return output
- SETINST <instance# .. | all> Set instance list in double quotes
- SGATOFILE <SGA dump dir> Dump SGA to file; dirname in double quotes
- DMPCOWSGA <SGA dump dir> Dump & map SGA as COW; dirname in double quotes
- MAPCOWSGA <SGA dump dir> Map SGA as COW; dirname in double quotes
- HANGANALYZE [level] [syslevel] Analyze system hang
- FFBEGIN Flash Freeze the Instance
- FFDEREGISTER FF deregister instance from cluster
- FFTERMINST Call exit and terminate instance
- FFRESUMEINST Resume the flash frozen instance
- FFSTATUS Flash freeze status of instance
- SKDSTTPCS <ifname> <ofname> Helps translate PCs to names
- WATCH <address> <len> <self|exist|all|target> Watch a region of memory
- DELETE <local|global|target> watchpoint <id> Delete a watchpoint
- SHOW <local|global|target> watchpoints Show watchpoints
- CORE Dump core without crashing process
- IPC Dump ipc information
- UNLIMIT Unlimit the size of the trace file
- PROCSTAT Dump process statistics
- CALL <func> [arg1] ... [argn] Invoke function with arguments
4 连接到一个进程
在oradebug命令执行之前,你必须加入一个目标进程。这个目标进程有如下3种情况:
|
命令 |
目的 |
|
oradebug setmypid |
连接到为你的sql*plus提供服务的进程 |
|
oradebug setorapid pid |
连接到一个外部服务进程,且pid=v$process.pid |
|
oradebug setospid spid |
连接到一个外部服务进程,且spid=v$process.pid |
1) setmypid
- 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操作)
- sys@ORCL> host top
- 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操作)
- 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.
- 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列出共享队列
- 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
如果一个程序挂起,那么程序调用栈就可以显示它在调用路径中的哪一步挂起
- sys@ORCL> oradebug setospid 5180
- Oracle pid: 13, Unix process pid: 5180, image: oracle@localhost.localdomain (D000)
- sys@ORCL> oradebug short_stack
- 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 trace name context off
- Statement processed.
当前的调用步骤在输出的顶部
7 诊断转储
可转储类型如下:
- sys@ORCL> oradebug dumplist
- EVENTS
- TRACE_BUFFER_ON
- TRACE_BUFFER_OFF
- HANGANALYZE
- LATCHES
- PROCESSSTATE
- SYSTEMSTATE
- INSTANTIATIONSTATE
- .........
下面举例两个:
1)controlf
- sys@ORCL> oradebug setmypid
- Statement processed.
- sys@ORCL> oradebug dump controlf 10
- Statement processed.
- sys@ORCL> oradebug tracefile_name
- /u01/app/oracle/admin/orcl/udump/orcl_ora_5234.trc
2)events
这不是真正的转储,events只是将激活的事件写入trc文件。如果你不能确定一个会话、进程或者实例中哪个事件是活动的,下面有一种很好的方式去查询:
- sys@ORCL> alter session set events '10046 trace name context forever,level 8';
- Session altered.
- sys@ORCL> alter session set events '4031 trace name heapdump level 3';
- Session altered.
- sys@ORCL> oradebug setmypid
- Statement processed.
- sys@ORCL> oradebug dump events 1
- Statement processed.
- 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.
oradebug dump events的级别和范围
| 级别 | 事件范围 | 使用的命令 |
| 1 | 会话 | alter session |
| 2 | 进程 | oradebug event |
| 4 | 实例 | alter system |
8 小结
oradebug对于解决问题和诊断性能是必不可少的工具。本文只是讲述了一些最常见的命令,还有更多的功能,比如RAC环境下调用全局队列服务调试器的
oradebug lkdebug命令。
oradebug工具使用3(转载)的更多相关文章
- oradebug工具使用(转载)
在之前的HangAnalyze 中有使用oradebug命令,在这篇文章里,我们主要是重点看一下这个oradebug命令: Oracle HANGANALYZE 功能诊断 DB hanging htt ...
- oradebug工具使用2(转载)
oradebug的前身是在ORACLE 7时的ORADBX,它可以启动用停止跟踪任何会话,dump SGA和其它内存结构,唤醒ORACLE进程,如SMON.PMON进程,也可以通过进程号使进程挂起和恢 ...
- smartctl工具应用(转载整理)
转载:https://linux.cn/article-4682-1.html Smartctl(S.M.A.R.T 自监控,分析和报告技术)是类Unix系统下实施SMART任务命令行套件或工具,它用 ...
- Java线程Dump分析工具--jstack【转载】
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...
- JMeter(二十二)与其它工具对比(转载)
转载自 http://www.cnblogs.com/yangxia-test JMeter工具的扩展性非常好. JMeter工具是开源的.开源不仅仅意味着免费,更重要的是意味着用户可以通过开放的源代 ...
- linux中awk工具的使用(转载)
awk是一个非常好用的数据处理工具.相较于sed常常一整行处理,awk则比较倾向于一行当中分成数个“字段”处理,awk处理方式如下: $ awk '条件类型1{动作1} 条件类型2{动作2} ...' ...
- Greenplum 6 新功能 在线扩容工具GPExpand (转载)
Gpexpand是Greenplum数据库的扩容工具,可以为集群增加新节点从而可以存储更多的数据,提供更高的计算能力.Greenplum 5及之前,集群扩容需要停机增加新节点,然后对表数据做重分布.因 ...
- json、javaBean、xml互转的几种工具介绍 (转载)
工作中经常要用到Json.JavaBean.Xml之间的相互转换,用到了很多种方式,这里做下总结,以供参考. 现在主流的转换工具有json-lib.jackson.fastjson等,我为大家一一做简 ...
- Fiddler 抓包工具总结【转载】
原博主连接在文章底部 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲, ...
随机推荐
- jqgrid删除多行数据,删不全的解决方案
功能实现: 删除选中的多条数据 bug: 总是删不干净,比如选中5条执行删除操作,后台全删掉了,可是前台仍然有剩余的几条,再次刷新会不见 错误代码: var ids = $("#grid-t ...
- VM虚拟机不能上网的问题解决
VM虚拟机不能上网的问题解决 说在前面的话:很多网友看了我的文章后,虚拟机还是不能上网,就联系我帮忙,结果帮他们给弄好后,都说怪自己太粗心,没有仔细看文章.我不是怕网友麻烦我,我是真诚的希望各位要首先 ...
- JS对象序列化为JSON对象的方法
var $ = $ || {}; /** * 将JS对象序列化为JSON字符串 * @param {Mixed} o The variable to decode * @return {String} ...
- YAML 语法小结
专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便. 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 # 表示注 ...
- css3动画4
效果: 代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head&g ...
- 2018 ACM ICPC 南京赛区 酱油记
Day 1: 早上6点起床打车去车站,似乎好久没有这么早起床过了,困到不行,在火车上睡啊睡就睡到了南京.南航离南京南站很近,地铁一站就到了,在学校里看到了体验坐直升机的活动,感觉很强.报道完之后去吃了 ...
- java网络编程5-SSL
服务器端 System.out.println("等待客户端连接..."); File keyFile=new File("C:/Users/mu/Desktop/mu. ...
- poj 1659(havel算法)
题目链接:http://poj.org/problem?id=1659 思路: havel算法的应用: (1)对序列从大到小进行排序. (2)设最大的度数为 t ,把最大的度数置0,然后把最大度数后 ...
- CSS:层叠样式表的冲突处理
前言 重叠样式表的冲突是通过重叠过程排序,最终确定文档的显示方式的,也就是是说通过重叠排序来处理冲突问题.这过程起决定性作用的是选择器及其相关申明的特殊性,以及继承机制. 基本流程 1.找出所有相关规 ...
- c++新特性---引用变量
一.定义 引用变量是已定义变量的别名,如将ra设置为a的引用变量,则可以使用ra和a交替使用该变量. 表示: int a = 5; int & ra = a; 其中&不是地址运算符,而 ...