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

    [sql] view plain copy
     
    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

    [sql] view plain copy
     
    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.   
    9. DEPARTMENT_ID DEPARTMENT_NAME                MANAGER_ID LOCATION_ID  
    10. ------------- ------------------------------ ---------- -----------  
    11.            10 Administration                        200        1700  
    12.   
    13. sys@ORCL> oradebug tracefile_name  
    14. /u01/app/oracle/admin/orcl/udump/orcl_ora_5234.trc  
    15. sys@ORCL> oradebug event 10046 trace name context off  
    16. Statement processed.  


     

                              2)setospid(spid操作)

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


                           3)setorapid(pid操作)

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


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

        5 oradebug IPC

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

    [sql] view plain copy
     
    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

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

    [sql] view plain copy
     
    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.   
    6. kskthbwt()+370<-kslwait()+57<-kmdmai()+1797<-kmmrdp()+432<-opirip()+1191<-opidrv()+864<-sou2o()+113<-opimai_real()+353<-main()+111<-__libc_start_main()+220  
    7. sys@ORCL> oradebug event 10046 trace name context off  
    8. Statement processed.  


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

        7 诊断转储

                    可转储类型如下:

    [sql] view plain copy
     
    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

    [sql] view plain copy
     
    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文件。如果你不能确定一个会话、进程或者实例中哪个事件是活动的,下面有一种很好的方式去查询:

    [sql] view plain copy
     
    1. sys@ORCL> alter session set events '10046 trace name context forever,level 8';  
    2.   
    3. Session altered.  
    4.   
    5. sys@ORCL> alter session set events '4031 trace name heapdump level 3';  
    6.   
    7. Session altered.  
    8.   
    9. sys@ORCL> oradebug setmypid  
    10. Statement processed.  
    11. sys@ORCL> oradebug dump events 1  
    12. Statement processed.  
    13. sys@ORCL> oradebug tracefile_name  
    14. /u01/app/oracle/admin/orcl/udump/orcl_ora_5234.trc  
    15. sys@ORCL> oradebug event 10046  trace name context off  
    16. 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
  • 相关阅读:
    Linux的内存管理之道
    Ramdisk根文件系统启动Linux(单独的ramdisk镜像)
    详解 ARM Linux启动过程
    晒晒我的vimrc配置【不定期更新】
    [Python入门及进阶笔记]Pythondecorator装饰器小结
    谷歌10个用户体验设计原则
    用busybox创建基于Linux2.6.24内核的nfs根文件系统
    [Python入门及进阶笔记]Python魔术方法小结(方法运算符重载)
    mysql慢查询
    关于android的各种disk images(看过的讲android image比较细致的好文)
  • 原文地址:https://www.cnblogs.com/youngerger/p/8538773.html
Copyright © 2020-2023  润新知