使用SQL_Trace和10046事件进行数据库诊断

使用SQL_Trace和10046事件进行数据库诊断步骤:

1. 利用top命令找到当前占用cpu资源最高的一个数据库进程的PID。

2. 在数据库中根据PID号找到相应的SID号和SERIAL#

select s.sid, s.serial# from v$session s, v$process p where s.paddr=p.addr and p.spid='[PID]';

或select sid, serial#, username from v$session where username is not null;

3. 使用dbms_system.set_sql_trace_in_session包来对这个session进行trace

exec dbms_system.set_sql_trace_in_session([SID],[SERIAL#],true); 需要sysdba权限

4. 找到生成的trace文件,默认在$Oracle_base/admin/[SID]/[SID]/updump中,也可以用下面语句查询位置和名称:

  select d.value||'\'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name from

    ( select p.spid from v$mystat m, v$session s, v$process p where m.statistic#=1 and s.sid=m.sid and s.paddr=p.addr)p,

      (select t.instance from v$thread t, v$parameter v where v.name='thread' and (v.value=0 or t.thread#=to_number(v.value))) i,

        (select value from $parameter where name='user_dump_dest') d;

  查看路径:show parameter user_dump_dest;

5. 用TKPROF对trace文件格式化:

tkprof test.trc output.txt explain=[username]/[pwd] aggregate=yes sys=no waits=yes sort=fchela;

递归SQL:当发出一条简单的sql命令后,Oracle数据库要在后台解析这条命令,并转换为Oracle数据库的一系列后台操作,这些后台操作被称为递归sql。

查询表结构信息: select index_name, table_name, column_name from user_ind_columns where table_name=upper('test');

 

 

posted on 2014-05-18 21:13  当时已枉然  阅读(177)  评论(0编辑  收藏  举报