相信不少人都很清楚使用explain plan命令、dbms_xplan包、autotrace开关能够获取执行计划,可是若是还须要获取更为详细的执行计划,咱们可使用10046事件来获取。sql
而要经过10046事件来获取目标sql的执行计划,一般须要三个步骤:session
一、在当前的会话(session)中激活10046事件;app
二、在当前session中执行目标sql;优化
三、在当前session中关闭10046事件;spa
激活10046事件的命令有如下两种:.net
第一种: alter session set events '10046 trace name context forever,level 12'翻译
第二种: oradebug event 10046 trace name context forever,level 12debug
对应的,关闭10046事件的命令也有两种:blog
第一种: alter session set events '10046 trace name context off'事件
第二种: oradebug event 10046 trace name context off
下面以一个示例作示范(强调一点:必须在sys用户下):
一、在sys用户下,先准备对当前会话(session)使用oradebug;
SQL> oradebug setmypid;
已处理的语句
二、在当前session中激活10046事件;
SQL> oradebug event 10046 trace name context forever,level 12;
已处理的语句
三、在当前session中执行目标sql,生成对应的trace文件;
SQL> select empno,ename,dname from scott.emp,scott.dept where emp.deptno=dept.deptno;
四、查看步骤3中生成的trace文件的路径;
SQL> oradebug tracefail_name;
d:\app\zl\diag\rdbms\orcl\orcl\trace\orcl_ora_4352.trc
五、在当前session中关闭10046事件;
SQL> oradebug event 10046 trace name context off;
已处理的语句
下面是生成的trace文件的部分截图:
能够很明显的看出来,这样的执行计划很不方便查看,因此咱们须要用tkprof命令来翻译,上述获得的trace文件;
tkprof的命令以下:
C:\Users\zl>tkprof d:\app\zl\diag\rdbms\orcl\orcl\trace\orcl_ora_4352.trc e:\orcl_ora_4352.trc
TKPROF: Release 11.2.0.1.0 - Development on 星期二 9月 29 16:11:41 2015
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
下面是新生成的trace文件的截图:
如今的执行计划就很直观、易懂了