Oracle DBA内部秘籍:用oradebug让Oracle错误“开口说话”,精准诊断性能瓶颈
·
问题现场
比如Oracle报错ORA-06550,你可以用errorstack跟踪后查阅,便于分析复杂问题。
操作指南
$ps -ef |grep LOCAL=NO
sqlplus / as sysdba
SQL> oradebug setospid 963269
SQL> oradebug event 6550 trace name errorstack forever,level 12
oradebug setospid 963269
ps -ef |grep LOCAL=NO
找到PID
- 作用:将 oradebug 调试工具连接到指定的操作系统进程。
- 含义: 963269 是目标 Oracle 服务器进程在操作系统层面的进程 ID。执行此命令后,后续的 oradebug 命令将作用于这个特定的进程。这在需要诊断一个已经存在的、正在运行的会话或后台进程时使用。
- 文档依据:
- 《oradebug.pdf》中明确说明: oradebug setospid 用于 “Set OS process id of process to debug”。
- 《How to Collect Errorstacks for use in Diagnosing Performance Issues. (Doc ID 1364257.1).pdf》文档中,在收集跟踪信息前,第一步都是使用 oradebug setospid 或 oradebug setorapid 连接到目标进程。
oradebug event 6550 trace name errorstack forever,level 12
- 作用:在目标进程上设置一个跟踪事件,使其在遇到特定的内部错误时,自动将详细的诊断信息转储到跟踪文件中。
- 含义分解:
event 6550:这是一个 Oracle 内部事件号。 6550 对应的是 ORA-06550 错误(PL/SQL 编译错误)。设置此事件意味着,当该进程即将抛出 ORA-06550 错误时,会触发后续的跟踪动作。trace name errorstack:指定跟踪的类型为 “错误堆栈”。它会捕获进程在错误发生时的调用堆栈、函数调用序列、进程状态等核心内存信息。forever:表示此设置一直有效,直到被显式关闭或进程结束。level 12:指定错误堆栈转储的详细级别。根据《Oracle DBA手记 - 数据库诊断案例与性能优化实践.pdf》的说明, errorstack 的级别通常为:1:转储错误堆栈和函数调用堆栈。2:Level 1 + 进程状态对象。3:Level 2 + 上下文区域(显示所有游标,着重显示当前游标)。
level 12可能是一个更高级别或特定组合,旨在收集比 level 3 更详尽的信息(可能包括更深的堆栈、更多的内存结构等),用于深度诊断复杂的性能问题或程序错误。这在《Troubleshooting ‘cursor pin S wait on X’ waits. (Doc ID 1349387.1).pdf》和《How to Collect Errorstacks for use in Diagnosing Performance Issues. (Doc ID 1364257.1).pdf》中均有提及,用于在进程疑似挂起或出现特定等待事件时收集诊断数据。
更多推荐

所有评论(0)