2010-11-22 121 views
1

我正在開發一個使用Oracle數據庫的應用程序,我肯定希望有一個可以跟蹤會話和進程語句的SQL語句跟蹤器 - 例如Toad的SQL跟蹤器/監視器。但是因爲好的一個花了很多錢,所以我正在考慮自己創建一個小的。 任何ideeas關於這將是跟蹤oracle sql語句的最佳解決方案?跟蹤oracle語句

回答

5

Sql Plus + tkprof。

alter session set timed_statistics = true; 
alter session set sql_trace = true; 
show parameter user_dump_dest 



tkprof <trc-файл> <txt-файл> 

如果您需要跟蹤任何會話(不僅是你自己的):

select sid,serial# from v$session 

看會話的SID和

begin 
    sys.dbms_system.set_ev(sid, serial#, 10046, 12, ''); 
end; 

否則,您可以使用登錄觸發器:

CREATE OR REPLACE TRIGGER SYS.TRACE_A_USER 
AFTER 
LOGON ON <some_db_user>.SCHEMA 
DECLARE 
user_sid NUMBER; 
user_serial# NUMBER; 
user_program VARCHAR2(48); 
BEGIN 
-- Collect the current user session details. 
SELECT sid, serial#, UPPER(program) 
INTO user_sid, user_serial#, user_program 
FROM v$session 
WHERE audsid = USERENV('SESSIONID'); 
-- Start tracing if the user is running the identified application. 
IF user_program = 'SOMECODE.EXE' THEN 
-- Enable tracing. Note level 12 tracing includes bind variable 
-- and wait statistics. 
sys.dbms_system.set_ev(user_sid, user_serial#, 10046, 12, ''); 
END IF; 
END; 
+0

僅供參考,現在不建議使用sql_trace:http://docs.oracle.com/c d/B19306_01/server.102/b14237/initparams205.htm#REFRN10208 – Snorex 2017-01-09 19:32:04

+0

我的答案創建於6年前.... – demas 2017-01-09 20:38:37

+0

這就是爲什麼我有「現在」這個詞。你是否說這是對舊帖子發表評論的錯誤形式? – Snorex 2017-01-09 20:52:08