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命令介绍

  1. sys@ORCL> oradebug help
  2. HELP           [command]                 Describe one or all commands
  3. SETMYPID                                 Debug current process
  4. SETOSPID       <ospid>                   Set OS pid of process to debug
  5. SETORAPID      <orapid> ['force']        Set Oracle pid of process to debug
  6. SHORT_STACK                              Dump abridged OS stack
  7. DUMP           <dump_name> <lvl> [addr]  Invoke named dump
  8. DUMPSGA        [bytes]                   Dump fixed SGA
  9. DUMPLIST                                 Print a list of available dumps
  10. EVENT          <text>                    Set trace event in process
  11. SESSION_EVENT  <text>                    Set trace event in session
  12. DUMPVAR        <p|s|uga> <name> [level]  Print/dump a fixed PGA/SGA/UGA variable
  13. DUMPTYPE       <address> <type> <count>  Print/dump an address with type info
  14. SETVAR         <p|s|uga> <name> <value>  Modify a fixed PGA/SGA/UGA variable
  15. PEEK           <addr> <len> [level]      Print/Dump memory
  16. POKE           <addr> <len> <value>      Modify memory
  17. WAKEUP         <orapid>                  Wake up Oracle process
  18. SUSPEND                                  Suspend execution
  19. RESUME                                   Resume execution
  20. FLUSH                                    Flush pending writes to trace file
  21. CLOSE_TRACE                              Close trace file
  22. TRACEFILE_NAME                           Get name of trace file
  23. LKDEBUG                                  Invoke global enqueue service debugger
  24. NSDBX                                    Invoke CGS name-service debugger
  25. -G             <Inst-List | def | all>   Parallel oradebug command prefix
  26. -R             <Inst-List | def | all>   Parallel oradebug prefix (return output
  27. SETINST        <instance# .. | all>      Set instance list in double quotes
  28. SGATOFILE      <SGA dump dir>         Dump SGA to file; dirname in double quotes
  29. DMPCOWSGA      <SGA dump dir> Dump & map SGA as COW; dirname in double quotes
  30. MAPCOWSGA      <SGA dump dir>         Map SGA as COW; dirname in double quotes
  31. HANGANALYZE    [level] [syslevel]        Analyze system hang
  32. FFBEGIN                                  Flash Freeze the Instance
  33. FFDEREGISTER                             FF deregister instance from cluster
  34. FFTERMINST                               Call exit and terminate instance
  35. FFRESUMEINST                             Resume the flash frozen instance
  36. FFSTATUS                                 Flash freeze status of instance
  37. SKDSTTPCS      <ifname>  <ofname>        Helps translate PCs to names
  38. WATCH          <address> <len> <self|exist|all|target>  Watch a region of memory
  39. DELETE         <local|global|target> watchpoint <id>    Delete a watchpoint
  40. SHOW           <local|global|target> watchpoints        Show  watchpoints
  41. CORE                                     Dump core without crashing process
  42. IPC                                      Dump ipc information
  43. UNLIMIT                                  Unlimit the size of the trace file
  44. PROCSTAT                                 Dump process statistics
  45. 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

  1. sys@ORCL> oradebug setmypid
  2. Statement processed.
  3. sys@ORCL> oradebug unlimit
  4. Statement processed.
  5. sys@ORCL> oradebug event 10046 trace name context forever,level 8
  6. Statement processed.
  7. sys@ORCL> select * from hr.departments where department_id=10;
  8. DEPARTMENT_ID DEPARTMENT_NAME                MANAGER_ID LOCATION_ID
  9. ------------- ------------------------------ ---------- -----------
  10. 10 Administration                        200        1700
  11. sys@ORCL> oradebug tracefile_name
  12. /u01/app/oracle/admin/orcl/udump/orcl_ora_5234.trc
  13. sys@ORCL> oradebug event 10046 trace name context off
  14. Statement processed.

2)setospid(spid操作)

  1. sys@ORCL> host top
  2. top - 15:14:20 up 47 min,  2 users,  load average: 0.22, 0.20, 0.26
  3. Tasks: 171 total,   2 running, 168 sleeping,   0 stopped,   1 zombie
  4. 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
  5. Mem:    678912k total,   671192k used,     7720k free,    16672k buffers
  6. Swap:        0k total,        0k used,        0k free,   401584k cached
  7. PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  8. 5874 oracle    15   0  2444 1084  828 R  1.6  0.2   0:00.47 top
  9. 4781 root      15   0 53900  11m 6076 S  0.7  1.7   1:00.13 Xorg
  10. 5168 oracle    16   0  491m  17m  15m S  0.3  2.6   0:02.41 oracle
  11. sys@ORCL> oradebug setospid 5168
  12. Oracle pid: 7, Unix process pid: 5168, image: oracle@localhost.localdomain (CKPT)

3)setorapid(pid操作)

  1. sys@ORCL> select sid from v$mystat where rownum=1;
  2. SID
  3. ----------
  4. 159
  5. sys@ORCL> select pid,spid from v$process p,v$session s where s.sid=159 and s.paddr=p.addr;
  6. PID SPID
  7. ---------- ------------
  8. 15 5234
  9. sys@ORCL> oradebug setorapid 15
  10. Statement processed.
  11. sys@ORCL> oradebug tracefile_name
  12. /u01/app/oracle/admin/orcl/udump/orcl_ora_5234.trc
  13. sys@ORCL> oradebug event 10046 trace name context off
  14. Statement processed.

注意,在OEM的top session也可以等价实现上述效果,即:确定哪些数据库会话消耗了较多的资源

5 oradebug IPC

查看共享信息的内存的命令是ipcs [-m|-s|-q]。默认会列出共享内存、信号量,队列信息,-m列出共享内存,-s列出共享信号量,-q列出共享队列

  1. sys@ORCL> host ipcs -m | grep ora
  2. 0xbe3bb918 5439503    oracle    640        419438592  20
  3. sys@ORCL> oradebug setmypid
  4. Statement processed.
  5. sys@ORCL> oradebug ipc
  6. Information written to trace file.
  7. sys@ORCL> oradebug tracefile_name
  8. /u01/app/oracle/admin/orcl/udump/orcl_ora_5234.trc
  9. sys@ORCL> oradebug event 10046 trace name context off
  10. Statement processed.

当一台电脑的资源有限时,失败的实例占用共享内存和信号量会导致资源紧张,从而使得新的oracle实例无法启动。

清除命令是ipcrm [-m|-s|-q] id。
                  -m 删除共享内存,-s删除共享信号量,-q删除共享队列
                  如:ipcrm -m 5439503

6 oradebug SHORT_STACK

如果一个程序挂起,那么程序调用栈就可以显示它在调用路径中的哪一步挂起

  1. sys@ORCL> oradebug setospid 5180
  2. Oracle pid: 13, Unix process pid: 5180, image: oracle@localhost.localdomain (D000)
  3. sys@ORCL> oradebug short_stack
  4. ksdxfstk()+19<-ksdxcb()+1321<-sspuser()+81<-__kernel_vsyscall()+2<-ntevpque()+112<-ntevque()+606<-nsevwait()+821<-ksnwait()+111<-ksliwat()+770<-kslwaitns()+29<-
  5. kskthbwt()+370<-kslwait()+57<-kmdmai()+1797<-kmmrdp()+432<-opirip()+1191<-opidrv()+864<-sou2o()+113<-opimai_real()+353<-main()+111<-__libc_start_main()+220
  6. sys@ORCL> oradebug event 10046 trace name context off
  7. Statement processed.

当前的调用步骤在输出的顶部

7 诊断转储

可转储类型如下:

  1. sys@ORCL> oradebug dumplist
  2. EVENTS
  3. TRACE_BUFFER_ON
  4. TRACE_BUFFER_OFF
  5. HANGANALYZE
  6. LATCHES
  7. PROCESSSTATE
  8. SYSTEMSTATE
  9. INSTANTIATIONSTATE
  10. .........

下面举例两个:

1)controlf

  1. sys@ORCL> oradebug setmypid
  2. Statement processed.
  3. sys@ORCL> oradebug dump controlf 10
  4. Statement processed.
  5. sys@ORCL> oradebug tracefile_name
  6. /u01/app/oracle/admin/orcl/udump/orcl_ora_5234.trc

2)events

这不是真正的转储,events只是将激活的事件写入trc文件。如果你不能确定一个会话、进程或者实例中哪个事件是活动的,下面有一种很好的方式去查询:

  1. sys@ORCL> alter session set events '10046 trace name context forever,level 8';
  2. Session altered.
  3. sys@ORCL> alter session set events '4031 trace name heapdump level 3';
  4. Session altered.
  5. sys@ORCL> oradebug setmypid
  6. Statement processed.
  7. sys@ORCL> oradebug dump events 1
  8. Statement processed.
  9. sys@ORCL> oradebug tracefile_name
  10. /u01/app/oracle/admin/orcl/udump/orcl_ora_5234.trc
  11. sys@ORCL> oradebug event 10046  trace name context off
  12. Statement processed.

oradebug dump events的级别和范围

级别 事件范围 使用的命令
1 会话 alter session
2 进程 oradebug  event
4 实例 alter system

8 小结

oradebug对于解决问题和诊断性能是必不可少的工具。本文只是讲述了一些最常见的命令,还有更多的功能,比如RAC环境下调用全局队列服务调试器的

oradebug lkdebug命令。

版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/linwaterbin/article/details/7874558

oradebug工具使用3(转载)的更多相关文章

  1. oradebug工具使用(转载)

    在之前的HangAnalyze 中有使用oradebug命令,在这篇文章里,我们主要是重点看一下这个oradebug命令: Oracle HANGANALYZE 功能诊断 DB hanging htt ...

  2. oradebug工具使用2(转载)

    oradebug的前身是在ORACLE 7时的ORADBX,它可以启动用停止跟踪任何会话,dump SGA和其它内存结构,唤醒ORACLE进程,如SMON.PMON进程,也可以通过进程号使进程挂起和恢 ...

  3. smartctl工具应用(转载整理)

    转载:https://linux.cn/article-4682-1.html Smartctl(S.M.A.R.T 自监控,分析和报告技术)是类Unix系统下实施SMART任务命令行套件或工具,它用 ...

  4. Java线程Dump分析工具--jstack【转载】

    jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...

  5. JMeter(二十二)与其它工具对比(转载)

    转载自 http://www.cnblogs.com/yangxia-test JMeter工具的扩展性非常好. JMeter工具是开源的.开源不仅仅意味着免费,更重要的是意味着用户可以通过开放的源代 ...

  6. linux中awk工具的使用(转载)

    awk是一个非常好用的数据处理工具.相较于sed常常一整行处理,awk则比较倾向于一行当中分成数个“字段”处理,awk处理方式如下: $ awk '条件类型1{动作1} 条件类型2{动作2} ...' ...

  7. Greenplum 6 新功能 在线扩容工具GPExpand (转载)

    Gpexpand是Greenplum数据库的扩容工具,可以为集群增加新节点从而可以存储更多的数据,提供更高的计算能力.Greenplum 5及之前,集群扩容需要停机增加新节点,然后对表数据做重分布.因 ...

  8. json、javaBean、xml互转的几种工具介绍 (转载)

    工作中经常要用到Json.JavaBean.Xml之间的相互转换,用到了很多种方式,这里做下总结,以供参考. 现在主流的转换工具有json-lib.jackson.fastjson等,我为大家一一做简 ...

  9. Fiddler 抓包工具总结【转载】

    原博主连接在文章底部 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲, ...

随机推荐

  1. jqgrid删除多行数据,删不全的解决方案

    功能实现: 删除选中的多条数据 bug: 总是删不干净,比如选中5条执行删除操作,后台全删掉了,可是前台仍然有剩余的几条,再次刷新会不见 错误代码: var ids = $("#grid-t ...

  2. VM虚拟机不能上网的问题解决

    VM虚拟机不能上网的问题解决 说在前面的话:很多网友看了我的文章后,虚拟机还是不能上网,就联系我帮忙,结果帮他们给弄好后,都说怪自己太粗心,没有仔细看文章.我不是怕网友麻烦我,我是真诚的希望各位要首先 ...

  3. JS对象序列化为JSON对象的方法

    var $ = $ || {}; /** * 将JS对象序列化为JSON字符串 * @param {Mixed} o The variable to decode * @return {String} ...

  4. YAML 语法小结

    专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便. 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 # 表示注 ...

  5. css3动画4

    效果: 代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head&g ...

  6. 2018 ACM ICPC 南京赛区 酱油记

    Day 1: 早上6点起床打车去车站,似乎好久没有这么早起床过了,困到不行,在火车上睡啊睡就睡到了南京.南航离南京南站很近,地铁一站就到了,在学校里看到了体验坐直升机的活动,感觉很强.报道完之后去吃了 ...

  7. java网络编程5-SSL

    服务器端 System.out.println("等待客户端连接..."); File keyFile=new File("C:/Users/mu/Desktop/mu. ...

  8. poj 1659(havel算法)

    题目链接:http://poj.org/problem?id=1659 思路:  havel算法的应用: (1)对序列从大到小进行排序. (2)设最大的度数为 t ,把最大的度数置0,然后把最大度数后 ...

  9. CSS:层叠样式表的冲突处理

    前言 重叠样式表的冲突是通过重叠过程排序,最终确定文档的显示方式的,也就是是说通过重叠排序来处理冲突问题.这过程起决定性作用的是选择器及其相关申明的特殊性,以及继承机制. 基本流程 1.找出所有相关规 ...

  10. c++新特性---引用变量

    一.定义 引用变量是已定义变量的别名,如将ra设置为a的引用变量,则可以使用ra和a交替使用该变量. 表示: int a = 5; int & ra = a; 其中&不是地址运算符,而 ...