1. 查询正在执行语句的执行计划(也就是实际语句执行计划)
select * from v$sql_plan where hash_value = (select sql_hash_value from v$session where sid = 1111);
其中id和parent_id表示了执行数的结构,数值最大的为最先执行
比如
ID PARENT_ID
-------------
0
1 0
2 1
3 2
4 3
5 4
6 3
则执行计划树为
0
1
2
3
6 4
5
2.如何设置自动跟踪
用system登录
执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建计划表
执行$ORACLE_HOME/sqlplus/admin/plustrce.sql创建plustrace角色
如果想计划表让每个用户都能使用,则
SQL>create public synonym plan_table for plan_table;
SQL> grant all on plan_table to public;
如果想让自动跟踪的角色让每个用户都能使用,则
SQL> grant plustrace to public;
通过如下语句开启/停止跟踪
SET AUTOTRACE ON |OFF | ON EXPLAIN | ON STATISTICS | TRACEONLY | TRACEONLY EXPLAIN
3.如何跟踪自己的会话或者是别人的会话
跟踪自己的会话很简单
Alter session set sql_trace true|false
Or
Exec dbms_session.set_sql_trace(TRUE);
如果跟踪别人的会话,需要调用一个包
exec dbms_system.set_sql_trace_in_session(sid,serial#,true|false)
跟踪的信息在user_dump_dest 目录下可以找到或通过如下脚本获得文件名称(适用于Win环境,如果是unix需要做一定修改)
SELECT p1.value||'\'||p2.value||'_ora_'||p.spid||'.ora' filename
FROM
|