热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

oracle实用工具:oradebug

oracle实用工具:oradebug1oradebug介绍oradebug主要是给oracle支持人员使用的,尽管很早便有,但oracle官网很少有记载。他是个sql*plus命令行工具,有sysdba的权限就可以登入,无需特别设置。他...SyntaxHighlighter.

oracle实用工具:oradebug
 
1 oradebug介绍
               oradebug主要是给oracle支持人员使用的,尽管很早便有,但oracle官网很少有记载。他是个sql*plus命令行工具,有sysdba的权限就可以登入,无需特别设置。他可以被用于:
                           1)追踪进程,或者是你的,或者是外部的
                           2)确定进程往哪个trc文件写
                           3)转储:数据文件头、内部oracle结构等
                           4)挂起进程,暂时的  www.2cto.com  
                           5)确定实例使用了哪些共享内存块和信号量
                           6)找出RAC实例使用了哪些互联地址和协议
                           7)修改SGA中的数据结构
    2 oradebug使用步骤
 
                  1)启动sql*plus并以sysdba身份登入
                  2)连接到一个进程
                  3)设置一个事件或者进行诊断转储
                  4)检索trc文件名
                  5)与连接到的进程断开
 
    3 oradebug命令介绍
[sql] 
sys@ORCL> oradebug help  
HELP           [command]                 Describe one or all commands  
SETMYPID                                 Debug current process  
SETOSPID                         Set OS pid of process to debug  
SETORAPID       ['force']        Set Oracle pid of process to debug  
SHORT_STACK                              Dump abridged OS stack  
DUMP           [addr]  Invoke named dump  
DUMPSGA        [bytes]                   Dump fixed SGA    www.2cto.com  
DUMPLIST                                 Print a list of available dumps  
EVENT                              Set trace event in process  
SESSION_EVENT                      Set trace event in session  
DUMPVAR         [level]  Print/dump a fixed PGA/SGA/UGA variable  
DUMPTYPE      
 Print/dump an address with type info  
SETVAR          Modify a fixed PGA/SGA/UGA variable  
PEEK           [level]      Print/Dump memory  
POKE                Modify memory  
WAKEUP                          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               Parallel oradebug command prefix  
-R               Parallel oradebug prefix (return output  
SETINST              Set instance list in double quotes  
SGATOFILE               Dump SGA to file; dirname in double quotes  
DMPCOWSGA       Dump & map SGA as COW; dirname in double quotes  
MAPCOWSGA               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                Helps translate PCs to names  
WATCH          
 Watch a region of memory  
DELETE         watchpoint    Delete a watchpoint  
SHOW           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           [arg1] ... [argn]  Invoke function with arguments  
 
    4 连接到一个进程
 
在oradebug命令执行之前,你必须加入一个目标进程。这个目标进程有如下3种情况:
命令
目的  www.2cto.com  
oradebug   setmypid
连接到为你的sql*plus提供服务的进程
oradebug  setorapid   pid
连接到一个外部服务进程,且pid=v$process.pid
oradebug  setospid  spid
连接到一个外部服务进程,且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 trace name context off  
Statement processed.  
 
当前的调用步骤在输出的顶部
    7 诊断转储
 
可转储类型如下:
[sql] 
sys@ORCL> oradebug dumplist  
EVENTS  
TRACE_BUFFER_ON  
TRACE_BUFFER_OFF  
HANGANALYZE  
LATCHES  
PROCESSSTATE  
SYSTEMSTATE  
INSTANTIATIONSTATE  
.........    www.2cto.com  
               下面举例两个:
                 1)controlf
[sql] 
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文件。如果你不能确定一个会话、进程或者实例中哪个事件是活动的,下面有一种很好的方式去查询:
[sql] 
sys@ORCL> alter session set events &#39;10046 trace name context forever,level 8&#39;;  
  
Session altered.  
  
sys@ORCL> alter session set events &#39;4031 trace name heapdump level 3&#39;;  
  
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.  
  www.2cto.com  
oradebug dump events的级别和范围
级别 事件范围 使用的命令
1 会话 alter session
2 进程 oradebug  event
4 实例 alter system
    8 小结
                   oradebug对于解决问题和诊断性能是必不可少的工具。本文只是讲述了一些最常见的命令,还有更多的功能,比如RAC环境下调用全局队列服务调试器的
    oradebug lkdebug命令。
 
 
作者 linwaterbin

推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了通过mysql命令查看mysql的安装路径的方法,提供了相应的sql语句,并希望对读者有参考价值。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
author-avatar
谢绝沟通
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有