引用网址:http://www.cnblogs.com/cangos/archive/2011/12/19/2293935.html
今天在一台机器中想分析下执行计划,但是在sqlplus中输入set autotrace on 报cannot set autotrace 错误
解决方法如下:
首先必须采用用Oracle的sqlplus登陆sys账号
sqlplus " sys/sys@XXX as sysdba "
然后执行如下脚本:
@F:\oracle\product\10.2.0\db_1\sqlplus\admin\plustrce.sql (创建plustrace角色并授权)
@F:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlxplan.sql (创建执行计划的表)
然后执行: grant all on plan_table to public; (也可以授权给某一个单独的用户)
grant plustrace to public ;
运行结果:
SQL> grant all on plan_table to public;
授权成功。
SQL> grant plustrace to public ;
授权成功。
然后就可以进行 set autotrace了 但是只能在sqlplus中运行相关命令,在pl/sql developer等工具中仍然报错
运行结果:
SQL> SET AUTOTRACE ON ;
SQL>
关于Autotrace几个常用选项的说明:
SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式
SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息
SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询输出
Autotrace执行计划的各列的涵义
序号 | 列名 | 解释 |
1 | ID_PLUS_EXP | 每一步骤的行号 |
2 | PARENT_ID_PLUS_EXP | 每一步的Parent的级别号 |
3 | PLAN_PLUS_EXP | 实际的每步 |
4 | OBJECT_NODE_PLUS_EXP | Dblink或并行查询时才会用到 |
AUTOTRACE Statistics常用列解释
序号 | 列名 | 解释 |
1 | db block gets | 从buffer cache中读取的block的数量 |
2 | consistent gets | 从buffer cache中读取的undo数据的block的数量 |
3 | physical reads | 从磁盘读取的block的数量 |
4 | redo size | DML生成的redo的大小 |
5 | sorts (memory) | 在内存执行的排序量 |
7 | sorts (disk) | 在磁盘上执行的排序量 |