首页 > Linux操作系统 > Linux操作系统 > 【笔记】Autotrace
一、启用Autotrace功能。
使用ORACLE的AUTOTRACE功能可以自动跟踪SQL语句并可以根据选项生成执行计划。
任何以SQL*PLUS连接的session都可以用Autotrace,不过还是要做一些设置的,否则可能报错。
1、报错示例:
SQL :> set autotrace on;
SP2-0613: Unable to verify PLAN_TABLE format or existence
SP2-0611: Error enabling EXPLAIN report
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report
*******************************************************************************
SQL> set autotrace on;
SP2-0613: 无法验证 PLAN_TABLE 格式或实体
SP2-0611: 启用EXPLAIN报告时出现错误
SP2-0618: 无法找到会话标识符。启用检查 PLUSTRACE 角色
SP2-0611: 启用STATISTICS报告时出现错误
该错误的的主要原因是由于当前用户下没有PLAN_TABLE这张表及相应的PLUSTRACE角色权限。
2、解决方法:
A.以SYS用户登录:
oracle>sqlplus '/ as sysdba';
B.运行utlxplan.sql($ORACLE_HOME/rdbms/admin下) 脚本创建 PLAN_TABLE;
grant all on plan_table to scott;
C.通过执行 plustrce.sql($ORACLE_HOME/sqlplus/admin/plustrce.sql)脚本创建 plustrace
角色
grant plustrace to scott;
grant select any dictionary to scott;
二、设置Autotrace的命令。
|
序号
|
命令
|
解释
|
|
1
|
SET AUTOTRACE OFF |
此为默认值,即关闭Autotrace |
|
2
|
SET AUTOTRACE ON |
产生结果集和解释计划并列出统计 |
|
3
|
SET AUTOTRACE ON EXPLAIN |
显示结果集和解释计划不显示统计 |
|
4
|
SETAUTOTRACE TRACEONLY |
显示解释计划和统计,尽管执行该语句但您将看不到结果集 |
|
5
|
SET AUTOTRACE TRACEONLY STATISTICS |
只显示统计 |
Eg:SET AUTOTRACE ON
set timing on
alter session set time_statistics=true;
三、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) |
在磁盘上执行的排序量 |
======================================================
set autotrace 报错sp2-0613&sp2-0618
同事创建了role plustrace,使用system登录可以使用autotrace。
但以普通用户test登录时,报错:
SQL> connect test/test
Connected.
SQL> set autotrace on
SP2-0613: Unable to verify PLAN_TABLE format or existence
SP2-0611: Error enabling EXPLAIN report
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report
检查角色设置
SQL> select * from user_role_privs;
USERNAME GRANTED_ROLE ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
TEST CONNECT NO YES NO
TEST PLUSTRACE NO YES NO
TEST RESOURCE NO YES NO
检查表
SQL> select synonym_name,table_name,table_owner from all_synonyms where synonym_name = 'PLAN_TABLE';
no rows selected
应是表PLAN_TABLE没有赋予plustrace select权限。
SQL> connect system/manager as sydba
Connected.
SQL> create public synonym plan_table for plan_table;
Synonym created.
SQL> grant all on plan_table to public;
Grant succeeded.
再试:
SQL> connect test/test
Connected.
SQL> set autotrace on
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report
网上查找,tom说了:
http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:5671636641855
Followup:
look up a couple of reviews.
I believe you have slightly mismatched versions of SQLPlus and database.
9203 and up use v$mystat
9202 and before use v$session
9201 client and lower queries v$session
9203 client and higher queries v$mystat
make sure plustrace has select on v$mystat and v$session or use the same version
of sqlplus as database.
我的Oracle server和SQL*Plus的版本都是9.0.2.4.0,找到原因了
SQL> connect system/manager as sydba
Connected.
SQL> grant select on v_$mystat to plustrace;
Grant succeeded.
SQL> connect test/test
Connected.
SQL> set autotrace on
成功!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22786751/viewspace-667297/ ,如需转载,请注明出处,否则将追究法律责任。