
oradebug的前身是在ORACLE 7时的ORADBX,它可以启动用停止跟踪任何会话dump SGA和其它内存结构唤醒ORACLE进程如SMON、PMON进程也可以通过进程号使进程挂起和恢复等还有很多功能实际上这些功能都不常用但是我们在看别人做问题诊断时常看到别人在使用oradebug命令其实我感觉最好用的就是他可以直接通过命令输出生成trace文件的名称带路径的哦省去不少麻烦系统HANG住用它做分析也比较好用和大家分享一下它最常用的方法1 oradebug有哪些可用命令以sysdba身份登陆数据库通过oradebug help可以看到oradebug常用命令sqlplus / as sysdbaoradebug help2 跟踪当前会话信息oradebug setmypid --跟踪当前会话oradebug setospid 7819 --跟踪系统进程oradebug setorapid --跟踪ORACLE进程oradebug unlimit --取消trace文件大小限制oradebug tracefile_name --查看trace文件名及位置3 用oradebug做session级10046或10053oradebug setmypidoradebug unlimitoradebug session_event 10046 trace name context forever ,level 4 --启用会话级10046oradebug event 10046 trace name context off --关闭10046事件oradebug tracefile_name --查看tracefile文件位置及文件名4 用oradebug做oracle process级10046oradebug setospid 391118oradebug unlimitoradebug event 10046 trace name context forever ,level 12oradebug event 10046 trace name context offoradebug tracefile_nameoradebug setmypidoradebug setospid 177636oradebug unlimitalter session set events 10053 trace name context forever, level 1;ALTER SYSTEM SET EVENTS 10053 trace name context off;oradebug tracefile_name5 oradebug系统hang住原因分析如果系统HANG住只要sys用户可以登陆那么用oradebug做原因分析是非常有用的oradebug setmypidoradebug unlimitoradebug setinst all --RAC环境oradebug hanganalyze 3 -- 级别一般指定为3足够了oradebug -g def dump systemstate 10 --RAC环境oradebug tracefile_name6 获取某进程的状态信息oradebug setospid 25241oradebug dump processstate 10oradebug tracefile_name7 获取进程错误信息状态oradebug setospid 10515oradebug dump errorstack 38 追踪造成错误信息的原因如ORA-04031oradebug event 4031 trace name errorstack level 3oradebug event 4031 trace name errorstack level 3设置trace 文件名字alter session set tracefile_identifierSTACK_10224;alter system set events 24247 trace name errorstack forever,level 3;alter system set events 24247 trace name errorstack off;alter system set events12537 trace name errorstack forever,level 10;alter system set events 12537 trace name errorstack off;alter system set events 1658 trace name context forever, level 12;alter system set events 1658 trace name context off;alter system set events 10053 trace name context forever, level 1;alter system set events 10053 trace name context off;oradebug tracefile_nameoradebug setospid 345932oradebug unlimitoradebug session_event 10046 trace name context forever ,level 12 ;oradebug event 10046 trace name context off ;oradebug tracefile_nameoradebug setorapid 5342oradebug unlimitoradebug session_event 10046 trace name context forever ,level 12 --启用会话级10046oradebug event 10046 trace name context off --关闭10046事件oradebug tracefile_nameoradebug setospid 3976oradebug unlimitalter session set events 10053 trace name context forever, level 1;ALTER SYSTEM SET EVENTS 10053 trace name context off;oradebug tracefile_namesqlplus / as sysdbaoradebug setmypidoradebug unlimitoradebug hanganalyze 3-- Wait one minute before getting the second hanganalyzeoradebug hanganalyze 3oradebug tracefile_nameexitSystemstatesqlplus -prelim / as sysdbasqlplus /nologset _prelim onconnect / as sysdbasqlplus / as sysdbaoradebug setmypidoradebug unlimitoradebug dump systemstate 266oradebug dump systemstate 266oradebug tracefile_nameexitawk -f ass109.awk /data/oracle/diag/rdbms/XXXXX/trace/t03mes_ora_128468.trc/data/oracle/diag/rdbms/XXXXX/trace/gmes01_ora_11912.trcsqlplus / as sysdbaoradebug setorapname recooradebug unlimitoradebug -g all hanganalyze 3oradebug -g all hanganalyze 3oradebug -g all dump systemstate 266oradebug -g all dump systemstate 266exitsqlplus / as sysdbaoradebug setorapname recooradebug unlimitoradebug -g all hanganalyze 3oradebug -g all hanganalyze 3oradebug -g all dump systemstate 258oradebug -g all dump systemstate 258exit--systemstate dumpsqlplus -prelim / as sysdbaoradebug setmypidoradebug unlimit;oradebug dump systemstate 266;--wait for 1 minoradebug dump systemstate 266;--wait for 1 minoradebug dump systemstate 266;oradebug tracefile_name;--hanganalyzeoradebug setmypidoradebug unlimit;oradebug dump hanganalyze 3--wait for 1 minoradebug dump hanganalyze 3--wait for 1 minoradebug dump hanganalyze 3oradebug tracefile_name跟踪某个特定的SQL IDOracle 11g以后的版本可以通过以下的方法来跟踪某个特定的SQL ID。--启用10046Tracealter system set events sql_trace[sql: sql_id | sql_id | sql_id ];--禁用10046Tracealter system set events sql_trace[sql: sql_id | sql_id | sql_id ] off;具体取得方法对某个SQL_IDsql:gcaxax8tgmjvt进行跟踪SQL alter session set tracefile_identifier10046;SQL alter session set max_dump_file_size unlimited;---启用TraceSQL ALTER SESSION SET EVENTS sql_trace [sql:gcaxax8tgmjvt] bindtrue,waittrue;SQL --操作执行 -----停止TraceSQL ALTER SESSION SET EVENTS sql_trace [sql:gcaxax8tgmjvt] off;对多个SQL ID如SQL_IDsql:gcaxax8tgmjvt进行跟踪SQL alter session set tracefile_identifier10046;SQL alter session set max_dump_file_size unlimited;---启用TraceSQL ALTER SESSION SET EVENTS sql_trace [sql:gcaxax8tgmjvt| g2mjrzx0w5ysv ];SQL --操作执行 -----停止TraceSQL ALTER SESSION SET EVENTS sql_trace[sql:gcaxax8tgmjvt| g2mjrzx0w5ysv ] off;取得特定SQL ID的Optimizer Trace10053在11gR1以后的版本中可以针对某个特定SQL ID硬解析时取得Optimizer Trace10053 Trace。具体取得方法如下。对某个硬解析SQL进行跟踪对某个硬解析SQL进行跟踪的方法如下。SQL alter session set tracefile_identifier10053;SQL alter session set max_dump_file_size unlimited;---启用TraceSQL ALTER SESSION SET EVENTS trace[rdbms.SQL_Optimizer.*][sql:SQL_ID];SQL --执行分析对象的SQL文 -----停止TraceSQL ALTER SESSION SET EVENTS trace[rdbms.SQL_Optimizer.*] off;对多个硬解析SQL进行跟踪对多个硬解析SQL进行跟踪的方法如下。SQL alter session set tracefile_identifier10053; SQL alter session set max_dump_file_size unlimited;---启用TraceSQL ALTER SESSION SET EVENTS trace[rdbms.SQL_Optimizer.*][sql:SQL_ID1|SQL_ID2];SQL --分析对象的SQL文 -----停止TraceSQL ALTER SESSION SET EVENTS trace[rdbms.SQL_Optimizer.*] off;其中的SQL_ID1替换为相应的SQL ID。例如SQL alter system set events trace[sql_optimizer.*] [sql: gcaxax8tgmjvt];SQL alter system set events trace[sql_optimizer.*] [sql: gcaxax8tgmjvt | g2mjrzx0w5ysv ];select * from table(DBMS_XPLAN.DISPLAY_CURSOR(SQL_IDsqlid, cursor_child_no 0,formatALL));--3.生成Optimizer Trace10053SQLexec DBMS_SQLDIAG.DUMP_TRACE( P_SQL_ID 426928qu93cf4, P_CHILD_NUMBER 0, P_COMPONENT Compiler, P_FILE_ID TRACE_10053);user_dump_dest