oradebug是Oracle提供的一个内部工具,可用于:
使用该命令需要dba权限,一般使用sys用户
sqlplus / as sysdba
SQL> oradebug help
可以看出他又很多选项,这节将SQL Trace相关的内容
Oradebug 使用events来捕获Oracle的各种事件
对于 SQL trace来说,使用的是10046事件
对于10046事件来说,它提供了不同等级来满足不同的需求
Level 1 - contains the basic level of trace information. For example, this trace level will display the bind variables in PL/SQL and SQL statements.
Level 8 - provides the trace details from Level 1 plus the wait events for elapsed times that are more than current CPU timings.
Level 12- adds in all the previous trace level information in addition to all wait event information
SQL> oradebug setmypid
Statement processed.
SQL>
这里为tracefile取一个便于记忆的名称
SQL> alter session set tracefile_identifier='mytrace';
Session altered.
默认位置在USER_DUMP_DESTINATION 中
SQL> oradebug tracefile_name
/u01/app/oracle/diag/rdbms/mesassy/mesassy/trace/mesassy_ora_23993_mytrace.trc
SQL>
SQL> oradebug unlimit
Statement processed.
SQL> oradebug event 10046 trace name context forever, level 12
Statement processed.
SQL>
SQL> select * from fwassy.fwcatns_stg_aolot where controllotid='321321';
no rows selected
SQL> oradebug event 10046 trace name context off
Statement processed.
这时我们可以直接打开文件查看原始数据也可以使用tkprof 命令格式化
explain表示格式化执行计划,如错误则会在文件中保持
sys=no代表不格式化sys用户下的语句
cd /u01/app/oracle/diag/rdbms/mesassy/mesassy/trace/
tkprof mesassy_ora_23993_mytrace.trc trace_sql.txt explain=system/oracle sys=no waits=yes
第一部分为Oracle 实例相关的信息
第二部分为执行的命令
第三部分为等待信息和执行计划
如果语句出错 会输出PARSE ERROR
这个基本上很容易理解,内容和上面相同,只是更易于阅读
更多信息请参考下面的参考资料