Pular para o conteúdo
  • Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 5 anos, 11 meses atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Autor
    Posts
  • #109440
    Avatar de ysmaylyka soares macedoysmaylyka 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