Pular para o conteúdo
  • Este tópico contém 8 respostas, 4 vozes e foi atualizado pela última vez 12 anos, 2 meses atrás por Avatar de fabiogalerafabiogalera.
Visualizando 9 posts - 1 até 9 (de 9 do total)
  • Autor
    Posts
  • #101126
    Avatar de airoospairoosp
    Participante

      Bom dia,

      Alguém sabe se é possível obter informações sobre a execução de procedures no banco Oracle. Por exemplo, qual o usuário que executou uma determinada procedure isto é, data e hora.

      Banco 9i.

      Obrigado.

      Airton

      #101134
      Avatar de vierivieri
      Participante

        Os comandos abaixo falam por mim.

        ============================

        LOGMINER

        alter session set nls_date_format=’yyyy-mm-dd hh24:mi:ss’;

        begin
        dbms_logmnr.start_logmnr(
        startTime => ‘2007-04-16 00:00:00’,
        endTime => ‘2007-04-20 00:00:00′,
        options => dbms_logmnr.DICT_FROM_ONLINE_CATALOG + dbms_logmnr.CONTINUOUS_MINE);
        end;
        /

        select timestamp, username, session_info, sql_redo, info
        from v$logmnr_contents
        where operation=’DDL’;

        select xid, substr(sql_redo,1,100)
        from v$logmnr_contents
        where operation=’DDL’ and lower(sql_redo) like ‘create%procedure%’;

        select sql_undo from v$logmnr_contents where xid=’ 07002100D8850600′ and table_name=’SOURCE$’ and operation=’DELETE’;

        set pagesize 1000 linesize 150 heading off feedback off verify off trimspool on trimout on
        undef xid
        select timestamp from v$logmnr_contents where xid=’&&xid’ and operation=’DDL’;
        column txt format a150
        select REGEXP_REPLACE(
        REGEXP_REPLACE(sql_undo,
        ‘insert into “SYS”.”SOURCE$”(“OBJ#”,”LINE”,”SOURCE”) values (”[0-9]+”,”[0-9]+”,”’,”
        ),”’);$’,”
        ) txt
        from v$logmnr_contents where xid=’&&xid’ and table_name=’SOURCE$’ and operation=’DELETE’;

        adapte pro seu problema.

        #102027
        Avatar de airoospairoosp
        Participante

          Boa tarde,

          Fiz a pesquisa usando o exemplo que você passou mas não consegui localizar a procedure.

          Há alguma outra forma de obter essa informação?

          Obrigado.

          Airton

          #102067
          Avatar de msantinomsantino
          Participante

            Pelo que eu entendi, os comandos do @vieri são voltados a quem CRIOU uma procedure e não a executou.

            Talvez anterando os parâmetros dos filtros consiga, mas eu não sei dizer se tais execuções são logadas nos mesmos lugares. Isto é, se de fato elas são logadas…

            #102070
            Avatar de fabiogalerafabiogalera
            Participante

              Que eu saiba, o logminer não verifica quem executou a procedure.

              O único jeito que eu conheço é através de AUDIT.

              #102208
              Avatar de airoospairoosp
              Participante

                Boa tarde,

                Encontrei uma solução. O que fiz foi criar uma tabela de log e no corpo da procedure inclui a query abaixo que trás informações sobre a sessão do banco e o resultado grava na tabela.

                select distinct substr(a.username,1,20),
                substr(a.module,1,20),
                substr(a.osuser,1,8),
                substr(a.program,1,100),
                substr(a.machine,1,30),
                a.sid,
                a.serial#,
                b.profile
                into v_usuario, v_modulo, v_osuser, v_programa, v_node, v_sid_banco, v_serial, v_perfil
                FROM sys.v_$session a, dba_users b
                WHERE a.audsid = (select userenv(‘sessionid’) from dual)
                and a.username = b.username
                and rownum = 1;

                Esta query encontrei na internet e funcionou.

                Se alguém tiver alguma sugestão e/ou ver algum problema nesta solução e quiser ajudar agradeço.

                Banco 9i.

                Obrigado.

                Airton

                #102210
                Avatar de fabiogalerafabiogalera
                Participante

                  Sim.

                  AUDIT EXECUTE PROCEDURE ON owner.procedure_name BY ACCESS WHENEVER SUCCESSFUL;

                  Verifique se a auditoria esta ligada

                  show parameter audit

                  Precisa estar em DB

                  #102212
                  Avatar de airoospairoosp
                  Participante

                    Fabio,

                    Verifiquei a informação que você pediu.

                    audit_sys_operations FALSE
                    audit_trail NONE
                    transaction_auditing TRUE

                    Se deixar a auditoria ligada, poderá gerar lentidão no banco?

                    Obrigado.

                    Airton

                    #102241
                    Avatar de fabiogalerafabiogalera
                    Participante

                      Olha, você ativando isso não irá fazer com que seu Banco fique lento, mas sim, praticamente tudo tem degradação de performance. Você passará a auditar todas as execuções da PROCEDURE, lógicamente irá ter degradação.

                      Agora, em números não sei dizer, talvez 0,1% =)

                      Antes de ativar o AUDIT TRAIL, verifique o que esta sendo auditado na Base de Dados, a nível de usuários, objetos, etc.

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