SQL_TRAC跟蹤會話的測試_20101014

gdutllf2006發表於2010-10-15

測試:

確認兩個引數
SQL> show parameter timed_statistics

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
timed_statistics                     boolean     TRUE


SQL> SHOW PARAMETER MAX_DUMP_FILE_SIZE

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_dump_file_size                   string      UNLIMITED

這兩個已設.

 

跟蹤自身Session

alter session set sql_trace=true;

做sql
.....
select count(*) from user_tables;
.....

alter session set sql_trace=false;

找到tracefile

格式化Trace檔案
tkprof  yzoracle_ora_9497.trc  yzoracle_ora_9497.sql


這樣是可以的,但只能跟蹤自己.

 

嘗試跟蹤第三會話

參考網上的說明:

Session 1:

conn gzdc/gzdc2009
select sid, serial#, username from v$session where
sid =
(select sid from v$mystat where rownum=1);
       SID    SERIAL# USERNAME
---------- ---------- ------------------------------
        14       8250 GZDC
       

       
Session 2:
conn /as sysdba

exec dbms_system.set_ev(14,8250,10046,1,'gzdc');

執行了這一步以後 只是對其他的會話設定了跟蹤事件的等級,並非開始跟蹤

開始跟蹤
exec dbms_system.set_sql_trace_in_session(14,8250,true);

....
在Session 1 中執行SQL 語句,Select count(*) from user_tables;

結束跟蹤
exec dbms_system.set_sql_trace_in_session(14,8250,false);

關閉會話設定
exec dbms_system.set_ev(14,8250,10046,0,'gzdc');

 

找到tracefile name

/opt/oracle/admin/test/udump/test_ora_21792.trc

注意這個Tracefile 來自於被跟蹤的會話,而不是跟蹤他的會話.


格式化tracefile
tkprof /opt/oracle/admin/test/udump/test_ora_21792.trc /opt/oracle/admin/test/udump/test_ora_21792.sql


檢視 /opt/oracle/admin/test/udump/test_ora_21792.sql 可以看到詳細的資訊.

如需要更詳細的資訊,可以調整跟蹤的Level
exec dbms_system.set_ev(sid,serial#,event#,level#,'name');

這樣就可以用SQL_Trace來跟蹤某個Session在某一段時間內執行的語句,即使語句語法錯誤也可跟蹤到.

但這樣有什麼用呢?

還是不能跟蹤到應用程式過來的語句,因為你不知道將是哪個會話執行這個SQL??

系統級的跟蹤又太大了,有沒有使用者級的跟蹤呢?

審計?

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10248702/viewspace-675991/,如需轉載,請註明出處,否則將追究法律責任。

相關文章