- This topic has 4 replies, 3 voices, and was last updated 8 years, 3 months ago by Fábio Prado.
-
AuthorPosts
-
15 de julho de 2016 at 1:28 am #108289CLAUDENIL DIAS PRADOParticipant
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
15 de julho de 2016 at 10:25 pm #108291José Laurindo ChiappaModeratorBom, 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 120SPOOL roda_rebuilds.sql
SELECT ‘ALTER INDEX ‘ || a.index_name || ‘ REBUILD;’
FROM all_indexes a
ORDER BY 1
/
exitC: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…
16 de julho de 2016 at 7:08 pm #108292CLAUDENIL DIAS PRADOParticipantFera 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
16 de julho de 2016 at 8:59 pm #108293José Laurindo ChiappaModeratorSem 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
[]sChiappa
15 de agosto de 2016 at 4:06 am #108346Fábio PradoParticipantClaudenil, 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
-
AuthorPosts
- You must be logged in to reply to this topic.