Pular para o conteúdo
  • Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 13 anos, 7 meses atrás por Victor Armbrust.
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #104209
    ramasine
    Participante

      Caros,

      Alguem tem um script para que eu verifique quais usuários estão acessando determinada tabela no meu banco?

      Oracle 8.1.7.4

      Temos um job de control-m (aplicação) que roda no banco uma série de procedimentos e desconfiamos que existe um report que faz concorrencia de leitura em determinada tabela, mas para isso precisaria saber quais usuários estão acessando a tabela X…

      #104210
      Fábio Prado
      Participante

        RAMASINE,

        A consulta abaixo poderá te ajudar. Ela irá pesquisar todas as sessões ativas filtrando por uma palavra que exista dentro da instrução SQL. Ao executar a consulta informe o nome da tabela desejada, ok?

        select /*+ ALL_ROWS */
        a.sid,
        a.program,
        a.username,
        a.status, — active, inactive, killed (marcada p/ finalizar), cached (temporiaramente em cache p/ uso pelo Oracle XA), sniped (inativa, esperando no cliente)
        a.server, — dedicated, shared, pseudo, none
        a.schemaname,
        a.osuser,
        a.process,
        a.machine,
        to_char(a.logon_time, ‘DD-MON-YYYY HH24:MI:SS’) as logon_time,
        b.SQL_FULLTEXT
        from v$session a
        left join v$sqlarea b
        on a.sql_hash_value = b.hash_value
        inner join v$sess_io c
        on a.SID = c.SID
        WHERE USERNAME IS NOT NULL
        AND STATUS = ‘ACTIVE’
        AND UPPER(B.SQL_FULLTEXT) LIKE UPPER(‘%&TABLE_NAME%’);

        []s

        Fábio Prado
        http://www.fabioprado.net

        #104213
        ramasine
        Participante

          cara, deve ter algum problema de sintaxe…

          10:28:14 sql’@’jde1 > @tabelas
          Enter value for table_name: F0911
          left join v$sqlarea b on a.sql_hash_value = b.hash_value
          *
          ERROR at line 14:
          ORA-00933: SQL command not properly ended

          #104223
          Victor Armbrust
          Mestre

            Opa rasmine,

            cara para isso, você pode tentar ver os Locks que estão rolando na base.
            Roda esses caras quando você estiver com o job do control-m em andamento

            Tenta este:

            select inst_id, blocking_session, sid, serial#, wait_class, seconds_in_wait from gv$session
            where blocking_session is not NULL order by blocking_session,seconds_in_wait;

            ou este


            set term on;
            set lines 200;
            set pages 300
            column session_id format 9999 heading 'Sid';
            column serial# format 999999 heading 'Serial#';
            column username format a18 heading 'OS User/|DB User';
            column process format a15 heading 'OS Process|Source';
            column spid format a15 heading 'OS Process|DB Server';
            column owner_object format a32 heading 'Owner.Object';
            column locked_mode format a13 heading 'Locked|Mode';
            column status format a8 heading 'Status';

            select
            l.session_id,
            s.serial#,
            substr(l.os_user_name||'/'||l.oracle_username,1,18) username,
            l.process,
            p.spid,
            substr(o.owner||'.'||o.object_name,1,35) owner_object,
            decode(l.locked_mode,
            1,'No Lock',
            2,'Row Share',
            3,'Row Exclusive',
            4,'Share',
            5,'Share Row Excl',
            6,'Exclusive',null) locked_mode,
            substr(s.status,1,8) status
            from
            gv$locked_object l,
            all_objects o,
            gv$session s,
            gv$process p
            where
            l.object_id = o.object_id
            and l.session_id = s.sid
            and s.paddr = p.addr
            and s.status not in('KILLED','INACTIVE')
            order by l.session_id
            /

            Abs

            Victor

            #104229
            Fábio Prado
            Participante

              ramasine, a query q o victor passou só consegue verificar consultas q estão gerando bloqueios e nelas vc nao consegue filtrar p/ retornar linhas de consultas a uma determinada tabela

              a consulta q passei é bem diferente, não considera bloqueios ,mas permite filtrar por acessos a uma determinada tabela

              abs

              #104232
              Victor Armbrust
              Mestre

                Sim. Só não esquece que vai mostrar no momento que acessa.. tem que ficar rodando a query.
                Mesma pegada.
                Outra ideia é rodar um ASH do intervalo que roda o job no control-m….

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