问题现场

比如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》中均有提及,用于在进程疑似挂起或出现特定等待事件时收集诊断数据。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐