Pular para o conteúdo

Fóruns SQL e PL/SQL Como saber se uma stored Procedure está executando Como saber se uma stored Procedure está executando

#109441
Avatar photoJosé Laurindo Chiappa
Moderador

    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