Как указал Винсент, единственным способом (афаик) было бы проследить сеанс на уровне клиента.
В дополнение к открытым курсорам (как это делает Жаба), другой, менее точный,можно было бы использовать ASH (Active Session History).
Проблемы с ASH заключаются в том, что
- он выбирает каждую секунду для активных сессий (поэтому вы пропускаете все быстрые),
- это циклический буфер (резервное копирование представлением DBA_HIST_ACTIVE_SESS_HISTORY), чтобы вы пропустили старые.
Это потому, что он предназначен только для "улавливания" долго выполняющихся запросов с целью повышения производительности.
Однако он хорошо адаптирован, если интересуются только запросы с большим временем ответа.
Для этого стоит простой запрос, возвращающий историю длинных запросов сеанса.
select
sqla.sql_text
from
v$active_session_history hist,
v$sqlarea sqla,
v$session ss
where
sqla.sql_id = hist.sql_id and
ss.sid = hist.session_id and
ss.serial# = hist.session_serial# and
ss.audsid = sys_context('USERENV', 'SESSIONID') ;