Pular para o conteúdo
  • Este tópico contém 4 respostas, 3 vozes e foi atualizado pela última vez 8 anos, 1 mês atrás por Avatar de Fábio PradoFábio Prado.
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #108289
    Avatar de CLAUDENIL DIAS PRADOCLAUDENIL DIAS PRADO
    Participante

      Ola, pessoal vejam os passos que estou fazendo para de tempos em tempos recriar os indices do meu Banco (Oracle12c), preciso automatizar isso, alguém pode me ajudar?

      Recreando os índices do banco:

      1- Rodar Select

      select ‘ALTER INDEX ‘||INDEX_NAME||’ REBUILD;’ from user_indexes

      Resultado:

      ALTER INDEX CODIND REBUILD;
      ALTER INDEX NRREGIND REBUILD;
      ALTER INDEX TRAPIND REBUILD;

      Vai dar +- 5000 linhas isso pode mudar conforme atualizações do sistema

      2- Copiar resultado e executá-lo no Oracle SQL Developer

      ALTER INDEX CODIND REBUILD;
      ALTER INDEX NRREGIND REBUILD;
      ALTER INDEX TRAPIND REBUILD;

      Pronto isso faz com que os índices sejam recriados

      Preciso melhor isso ou seja automatizar, alguém pode me ajudar….Obrigado

      #108291
      Avatar photoJosé Laurindo Chiappa
      Moderador

        Bom, antes de mais nada eu ** TENHO ** que te avisar : no RDBMS Oracle, reconstruir índices é alguma coisa que vc ** NÃO FAZ ROTINEIRAMENTE **, isso ABSOLUTAMENTE NÂO È uma exigência, ok ?? Vc vai encontrar TONELADAS de material de má-qualidade escrito por gente que não sabe onde tem o nariz recomendando fazer rebuild frequentemente, mas não é assim que a banda toca : dá uma lida em alguns artigos dos gurus, de gente que ** ENTENDE ** de RDBMS Oracle, como https://richardfoote.wordpress.com/category/index-rebuild/ , https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1860329900346402725 , https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::p11_question_id:2913600659112 e https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:6601312252730 para ver que em alguns casos isso pode até mesmo ** piorar ** performance, além de muitas vezes ser um DESPERDÍCIO de recursos, ja que a tendência via de regra é o índice voltar ao estado que estava antes do rebuild…..

        Apenas SE e SOMENTE SE vc Realmente, Absolutamente, POSITIVAMENTE tiver uma Prova, Numérica, uma Evidência palpável de melhoria é que vc faz, ok ?? SE chegar a isso, o procedimento para scriptar/automatizar seja o que for no RDBMS Oracle normalmente passa pelo SQLPLUS, ele é a tool padrão para executar scripts e automatizar procedimentos administrativos…. Vc simplesmente escreve um shell script/script de comandos com o processador de comandos do seu Sistema Operacional, e esse shell script/script de comandos chama o sqlplus uma vez para gerar um arquivo com a lista dos rebuilds, e outra vez para executar essa lista de rebuilds, mais ou menos assim (usando comandos Windows aqui de scripting, se for Linux/Unix use o equivalente) :

        ===> esse é o script de comandos de SO que chama o sqlplus :

        C:WINDOWSsystem32>type exec_rebuild.bat
        sqlplus system/oracle @gera_rebuild.sql
        sqlplus system/oracle @roda_rebuilds.sql
        exit
        C:WINDOWSsystem32>

        ==> esse é o script sqlplus que gera a lista de rebuilds (no arquivo roda_rebuilds.sql)

        C:WINDOWSsystem32>type gera_rebuild.sql
        SET PAGESIZE 0
        SET FEEDBACK OFF
        SET VERIFY OFF
        SET LINES 120

        SPOOL roda_rebuilds.sql

        SELECT ‘ALTER INDEX ‘ || a.index_name || ‘ REBUILD;’
        FROM all_indexes a
        ORDER BY 1
        /
        exit

        C:WINDOWSsystem32>

        ===> e é isso, basta chamar o exec_rebuild.bat… Tá claro ?? Se vc não a usou ainda, essa técnica de gerar via sqlplus um segundo script/lista de comandos SQL a serem executados é a técnica amiga do DBA, é algo que todo e qualquer DBA Oracle Deveria Conhecer por ser útil ao extremos… OK DOC ???

        []s

        Chiappa

        OBS :

        a) evidentemente, num banco de grande volume Provavelmente vc teria vários scripts sendo executados em paralelo, cada um gerando séries diferentes de rebuilds, para Agilizar

        b) uma variação da técnica é, ao invés de gravar um arquivo com os ALTER INDEX REBUILD que o SELECT tá gerando, vc mandar o PL/SQL ir executando os comandos , tipo :

        BEGIN
        for r in (SELECT ‘ALTER INDEX ‘ || a.index_name || ‘ REBUILD;’ as comando_a_executar
        FROM all_indexes a
        ORDER BY 1
        )
        loop
        EXECUTE IMMEDIATE r.comando_a_executar;
        end loop;
        END;
        /

        ===> eu prefiro gerar o arquivo até para ter um LOG da execução, mas é preferência…

        #108292
        Avatar de CLAUDENIL DIAS PRADOCLAUDENIL DIAS PRADO
        Participante

          Fera primeiramente obrigado pela atenção, seguindo sua orientação vou estudar mais o assunto pelos links que vc me mandou, hj estou na empresa implantando o TOTVs RM e vendo a documentação deles eles orientam a:

          [color=#ff4400][u]”6. Atualização de Estatísticas:
          A rotina de atualização de estatísticas deve ser agendada para execução diária.
          Sugere-se o utilizar o Package DBMS_UTILITY para fazer a atualização de estatísticas:
          execute DBMS_UTILITY.analyze_schema(‘RM’,’COMPUTE’)……

          7. Índices:
          Os índices devem ser reconstruidos periodicamente (mensalmente), ou após período de grande “deleção” dos mesmos. Para a verificação do percentual de linhas deletadas em um determinado índice utilize:
          1º) Analyze:
          ANALYZE INDEX indice VALIDATE STRUCTURE;
          2º) Verificando o percentual de deleção:
          SELECT LF_ROWS , DEL_LF_ROWS
          FROM INDEX _STATS…….”
          [/u][/color]

          Mas como disse vou analisar os links que vc me passou, muito obrigado pela sua atenção

          #108293
          Avatar photoJosé Laurindo Chiappa
          Moderador

            Sem dúvida é o que vc deve fazer, buscar o conhecimento e atuar de acordo, SEMPRE em cima de Evidências sólidas, de mensurações : Absolutamente ** NÂO ** confie cegamente em desenvolvedor, em 99,99% das vezes esse pessoal até entende alguma coisa da tecnologia front-end mas pra eles banco de dados é uma caixa-preta onde eles não mexem – assim, se vc é o DBA e/ou o Especialista Oracle da empresa, é mais que tua responsabilidade entender e conhecer os recursos do RDBMS para os aplicar onde julgue passível… Por exemplo, há algum tempo eu estava atendendo um cliente (uma fábrica aqui de SP) onde roda um ERP nacional derivado do TOTVS full (o pessoal tava me explicando que o criador do ERP tipo “licenciou” a tecnologia do TOTVS) : o pessoal tava com muitos problemas em alguns relatórios de grande volume aí eu fui olhar neguim NÂO usava Parallel SQL, Não tinha as estatísticas coletadas com Histogramas num tamanho apropriado, não tinham um PCTFREE/PCTUSED apropriado pro tipo de uso da tabelas (que eram principalmente INSERT, com quase nada de UPDATE) – com algumas poucas mexidas a diferença foi grande…. Única coisa, ÓBVIO, é que vc SEMPRE TEM QUE PEDIR a AUTORIZAÇÂO pro Suporte dos caras quando for mexer seja no que for, e às vezes (quase sempre na verdade) é bem difícil vc pegar um atendente no Suporte que tenha mais de dois neurônios e entenda o que vc quer fazer, mas uma vez obtido o “sem problema, não temos contra-recomendação” sem probs…
            Especificamente sobre o “conselho” que vc mostra, dá uma estudada lá no site do Richard Foote (é um doos links que te passei) que vc encontra diversos artigos questionando esse tipo de medida para rebuild (que está LONGE de ser uma unaminidade técnica), E também casos onde vc tem Piora no índice após rebuild…

            []s

            Chiappa
            []s

            Chiappa

            #108346
            Avatar de Fábio PradoFábio Prado
            Participante

              Claudenil, como o Chiappa esclareceu bem, normalmente evite o REBUILD dos índices. Falo mais sobre isso no artigo http://www.fabioprado.net/2016/04/quando-devo-reconstruir-ou-fazer.html.

              Para aprender mais sobre índices em geral, sugiro também que você veja o vídeo da palestra que falei sobre índices no DBA Brasil 1.0: http://www.fabioprado.net/2016/04/indices-no-oracle-database-tudo-o-que.html.

              []s

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