Pular para o conteúdo
  • Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 6 anos atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Autor
    Posts
  • #109440
    ysmaylyka soares macedo
    Participante

      Bom dia, tudo bem!

      Por gentileza, alguém saberia me dizer qual view de DBA consigo saber quando uma Stored Procedure está executando ou não?

      #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

      Visualizando 2 posts - 1 até 2 (de 2 do total)
      • Você deve fazer login para responder a este tópico.
      plugins premium WordPress