sql_trace相关脚本

SQL Trace

SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法。不过我们这里主要用于描述SQL的执行过程的trace输出。
– SQL是如何操作数据的。
– SQL执行过程中产生了那些等待时间。
– SQL执行中消耗了多少资源。
– SQL的实际执行计划。
– SQL产生的递归语句。

10046:

一般来说, 使用 10046 事件得到 sql 执行计划的步骤如下:
1)激活当前 session 10046 事件
2)在当前 session 中执行 sql 语句
3)关闭当前 session 10046 事件
按照收集信息的内容分为以下等级:
1) Level 0: 停用sql跟踪,相当于SQL_TRACE=FALSE
2) Level 1:标准SQL跟踪,相当于SQL_TRACE=TRUE
3) Level 4:在level1d的基础上增加绑定变量的信息
4) Level 8: 在level1d的基础上增加等待事件的信息
5) Level 12: 在level1d的基础上增加绑定变量和等待事件的信息
命令如下:
 alter session set events '10046 trace name context forever,level n';
--1、10046跟踪当前会话  
alter  session set tracefile_identifier='event 10046';
alter  session set events '10046 trace name context forever, level 12';
run  your sql;
alter  session set events '10046 trace name context off';
--2、10046跟踪其他会话  --获取相关会话的sid,sieral#后执行以下命令跟踪  
exec  dbms_system.set_ev(sid,serial#,10046,12,'username');

oradebug查看SQL_TRACE文件:

如果会话已经运行了,可以用oradebug
  --1、查看当前会话trace文件  oradebug  setmypid  
  oradebug  tracefile_name --查看trace文件名及位置     
  --2、查看其他会话trace文件  select  s.sql_trace,s.sql_trace_waits,s.sql_trace_binds,traceid,tracefile  from  v$session s join v$process p on (p.addr=s.paddr)  where  s.sid=&sid and s.serial#=&serial;     
  --3、解析trace文件  tkprof  /home/oracle/nwppdb_ora_21793.trc   out.txt aggregate=yes sys=no  waits=yes sort=fchela

systemstate dump:

sqlplus  -prelim / as sysdba  
oradebug  setmypid  
oradebug  unlimit;  
oradebug  dump systemstate 266; 
--wait  for 1 min  
oradebug  dump systemstate 266; 
--wait  for 1 min  
oradebug  dump systemstate 266; 
oradebug  tracefile_name;

Hanganalyze:

oradebug  setmypid  oradebug  unlimit; 
oradebug  dump hanganalyze 3 
--wait  for 1 min  
oradebug  dump hanganalyze 3
--wait  for 1 min  
oradebug  dump hanganalyze 3  
oradebug  tracefile_name;


请使用浏览器的分享功能分享到微信等