> 历史信息查看请查看个人网页www.zhaibibei.cn
> 这是一个坚持Oracle,Python原创内容的公众号,欢迎关注

------


这节讲oradebug的一个用途

[TOC]

##1. oradebug介绍


oradebug是Oracle提供的一个内部工具,可用于:

- debug Oracle错误
- trace  Oracle错误
- 跟踪SQL 语句并使用tkprof工具格式化分析
- 分析Oracle Hang和Crash
- SQL性能优化

----------

##2. 进入oradebug

使用该命令需要dba权限,一般使用sys用户

```
sqlplus / as sysdba
```

```
SQL> oradebug help
```

[image:266 size:orig]



可以看出他又很多选项,这节将SQL Trace相关的内容

----------

##3. Oracle 10046 事件

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

--------

##4. 使用oradebug

###4.1 使用oradebug 追踪当前会话

```
SQL> oradebug setmypid
Statement processed.
SQL>
```

###4.2 设置tracefile名称

这里为tracefile取一个便于记忆的名称
```
 SQL> alter session set tracefile_identifier='mytrace';
 Session altered.
```

###4.3 查看tracefile存储位置

默认位置在USER_DUMP_DESTINATION 中

```
SQL> oradebug tracefile_name
/u01/app/oracle/diag/rdbms/mesassy/mesassy/trace/mesassy_ora_23993_mytrace.trc
SQL> 
```

###4.4  不限制tracefile文件大小
```
SQL> oradebug unlimit
Statement processed.
```

###4.5 指定10046事件
```
SQL> oradebug event 10046 trace name context forever, level 12
Statement processed.
SQL> 
```
###4.6 执行一些语句
```
SQL> select * from fwassy.fwcatns_stg_aolot where controllotid='321321';

no rows selected
```

###4.7 关闭10046事件
```
SQL> oradebug event 10046 trace name context off
Statement processed.
```



###4.8 tkprof 命令

这时我们可以直接打开文件查看原始数据也可以使用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
```

-----------

##5. 分析trace 文件

###5.1 原始文件

  第一部分为Oracle 实例相关的信息

[image:267 size:orig]

第二部分为执行的命令

[image:268 size:orig]

第三部分为等待信息和执行计划

如果语句出错 会输出**PARSE ERROR**

[image:269 size:orig]

###5.2 格式化后文件

这个基本上很容易理解,内容和上面相同,只是更易于阅读

[image:270 size:orig]

[image:271 size:orig]

更多信息请参考下面的参考资料


---------

##6.参考资料


[http://www.dba-oracle.com/t_oradebug_tips.htm](http://www.dba-oracle.com/t_oradebug_tips.htm)

[SQL跟踪方法介绍 & TKPROF 语句分析工具](https://my.oschina.net/u/2320648/blog/392068)

[Tkprof工具详解](https://www.cnblogs.com/haoxiaoyu/p/3556814.html)

[Oracle oradebug 命令 使用说明](https://blog.csdn.net/tianlesoftware/article/details/6525628)