Если вам нужно просмотреть все запросы из всех сеансов в течение КРАТКОГО окна времени, и вам нужно действительно простое решение, это то, что я делаю. (Приведенные выше ответы покажут, что SQL запускается только в одном сеансе, это легко дает весь SQL во всех сеансах.)
1). Создайте временную таблицу для хранения всего полученного SQL:
-- Fabien pointed out out that 'port may be inaccessible on 10.2
CREATE TABLE "MIKE"."TMP"
( "LOOP_NO" NUMBER(10,0),
"SID" NUMBER,
"SERIAL#" NUMBER,
"PROCESS" VARCHAR2(24 BYTE),
"PROGRAM" VARCHAR2(48 BYTE),
"MODULE" VARCHAR2(64 BYTE),
"OSUSER" VARCHAR2(30 BYTE),
"SCHEMANAME" VARCHAR2(30 BYTE),
"ACTION" VARCHAR2(64 BYTE),
"MACHINE" VARCHAR2(64 BYTE),
"PORT" NUMBER,
"TERMINAL" VARCHAR2(30 BYTE),
"ADDRESS" RAW(8),
"PIECE" NUMBER,
"SQL_TEXT" VARCHAR2(4000)
)
2). Запустите неприятный цикл опроса в анонимном блоке, чтобы собрать все SQL-запросы, запущенные в системе, если блок работает:
declare
begin
for j in 1.. 1000 loop
insert into mike.tmp
SELECT j, b.sid, b.serial#, b.process, b.program, b.module, b.osuser, b.schemaname, b.action, b.machine, b.port, b.terminal,a.address, a.piece, a.sql_text
FROM V$sqltext_With_Newlines a
join V$Session b on a.address = b.sql_address
WHERE A.ADDRESS NOT IN (select address FROM mike.tmp)
ORDER BY b.sid, a.piece;
commit;
end loop;
end;
3). Запрос на получение SQL:
select distinct osuser, a.address, a.sid, a.piece, a.sql_text
from mike.tmp a
join (select loop_no, sid from mike.tmp where sql_text like '%anytexthere%') b
on a.loop_no = b.loop_no
and a.sid = b.sid
order by a.sid, a.address, a.piece
... пожалуйста, обратите внимание, что это просто быстрый способ перехватить SQL, когда вы находитесь в состоянии "что, черт возьми, происходит здесь?" ситуации, и у вас нет инструментов графического интерфейса.