Tudo na tranquila ? Espero que sim…
Então, afaik NENHUMA view de DBA te mostra isso, vc tem que fazer um JOIN entre várias tabelas de memória internas (ie, várias X$), tipo :
SYS@DESENV:SQL>get running_plsqls.sql
1 break on sid skip 1
2 prompt **** Currently Executing Packages ****
3 SELECT /*+ RULE */
4 substr(DECODE(o.kglobtyp,
5 7, ‘PROCEDURE’, 8, ‘FUNCTION’, 9, ‘PACKAGE’, 12, ‘TRIGGER’, 13,
6 ‘CLASS’),1,15) “TYPE”,
7 substr(o.kglnaown,1,30) “OWNER”,
8 substr(o.kglnaobj,1,30) “NAME”,
9 s.indx “SID”,
10 s.ksuseser “SERIAL”
11 FROM
12 sys.X_$KGLOB o,
13 sys.X_$KGLPN p,
14 sys.X_$KSUSE s
15 WHERE
16 o.inst_id = USERENV(‘Instance’) AND
17 p.inst_id = USERENV(‘Instance’) AND
18 s.inst_id = USERENV(‘Instance’) AND
19 o.kglhdpmd = 2 AND
20 o.kglobtyp IN (7, 8, 9, 12, 13) AND
21 p.kglpnhdl = o.kglhdadr AND
22 s.addr = p.kglpnses
23* ORDER BY 4, 2, 1
SYS@DESENV:SQL>
==> Para exemplificar, vou criar um stored PL/SQL (uma Procedure, no caso) e executar ela :
chiappa@DESENV:SQL>create or replace procedure PROC_TESTE is
2 BEGIN
3 dbms_lock.sleep(300);
4 END;
5 /
Procedimento criado.
chiappa@DESENV:SQL>exec PROC_TESTE;
==> Ao executar em outra sessão o script (conectado como SYS ou como um usuário que tenha acesso às tabelas internas) num momento em que algum stored PL/SQL (procedure no meu caso) está rodando, eu vejo :
SYS@DESENV:SQL>@running_plsqls.sql
**** Currently Executing Packages ****
TYPE OWNER NAME SID SERIAL
--------- -------- ------------------------------ ---------- ----------
PROCEDURE ABACO PROC_TESTE 143 10505
PACKAGE SYS DBMS_LOCK 10505
==> Não só vejo o stored PL/SQL que está rodando mas TAMBÉM os outros que foram chamados por ele : ou seja, vejo toda a árvore de execuções do PL/SQL, okdoc ??
[]s
Chiappa