使用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‘);