select sid,serial#,username,program,machine,status,server ,terminal,sql_address,sql_hash_value from v$session where type != 'BACKGROUND' and username is not null ;
select sid,seq#,event,p1,p2,p3, seconds_in_wait , state from v$session_wait where state = 'WAITING' and event not like 'SQL*Net message%' and event != 'smon timer' and event != 'pmon timer' and event != 'rdbms ipc message' and event =
'wakeup time manager' ;
で待機SQLを検知しようかと検討しております。
ただ、v$session_wait とv$sessionを1文にしてfor文の1秒置きに取得する方法ないものでしょうか?
SQLトレースもけんとうしておりますが、対象SQLと画面からのSessionIDの紐つけが分からず、ご教授頂けますと幸いです。
検討中のSQLトレース取得方法です。
##SQLトレースを利用可能に変更(待機イベント、バインド変数、適応出力)
SQL> ALTER SESSION SET TIMED_STATISTICS=TRUE;
SQL> ALTER SESSION SET MAX_DUMP_FILE_SIZE=UNLIMITED;
SQL> ALTER SESSION SET TRACEFILE_IDENTIFIER='SQLTRACE';
SQL> ALTER SESSION SET EVENTS 'sql_trace wait=true,bind=true,plan_stat=adaptive';
##調査対象の処理を実行
ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';
EXECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(103,19,TRUE);
EXECUTE DBMS_SYSTEM.SET_EV(103,19,10046,12,'');
ALTER SESSION SET SQL_TRACE=TRUE;
#解除
ALTER SYSTEM SET EVENTS '10046 trace name context off';
ALTER SYSTEM SET SQL_TRACE = FALSE;
いい方法ありましたらよろしくお願いします。