Oracleで長時間稼働している処理(SQL)の情報を取得するSQLがあります。
方法は簡単で v$session を利用するだけ。セッションがアクティブになってからの経過時間(秒)を表す last_call_et を確認します。
SELECT last_call_et, state, event, username, osuser, machine, terminal, program, sid, serial#, status, sql_address, q.sql_id FROM v$session s left join v$sqltext q on(s.sql_id = q.sql_id) WHERE type = 'USER' AND STATUS = 'ACTIVE' group by last_call_et, state, event, username, osuser, machine, terminal, program, sid, serial#, status, sql_address, q.sql_id ORDER BY last_call_et desc
取得した情報から該当のSQLのセッションID、SQL_IDなどが確認できます。 しかし中には SQL_ID が Unknown となっている場合もあるのでその場合は SQL_ID を取得することができません。無念。