Hola que tal?Eita, ahahahaha nao ficou bom isso...Opa, pessoal.. Como estao? Agora sim.Em primeiro lugar, fique claro que esse texto e somente uma pequena introducao sobre o assunto. Alias nem entramos no assunto das estatisticas.Aqui estamos abordando somente uma ou duas formas de fazer backup's de estatisticas.Se voce quer conhecer melhor sobre a coleta de estatisticas, aqui vao alguns links excelentes:Apresentacao do Portilho no GUOB Best Practices for Gathering Optimizer Statistics with Oracle Database 12cOptimizer with Oracle Database 12cSo alguns exemplos dos excelentes textos e documentos obrigatorios da Oracle que nos achamos sobre o assunto. Este note do MOS tambem e otimo: "FAQ: Automatic Statistics Collection (Doc ID 1233203.1)"Dito isso, entao deixemos de mimimi e vamos ao que interessa.Esses dias me aconteceu um pequeno problema com estatisticas de um banco. Depois da coleta, a performance de varias tabelas ficou pior do que anteriormente. Com isso e com aquela falta de paciencia normal dos usuarios, veio a pergunta premiada. Tem como voltar essas tais estatisticas?Claro, pequeno gafanhoto. Nos somos DBA's e DBA que se preze nao faz nada sem backup (e testa o restore disso tambem, e claro).Entao, e isso que eu quero mostrar. Como fazer o "backup das estatisticas" de um schema e depois retornar isso em caso de necessidade. Coisa simples mas que muitos esquecem antes de fazer uma intervencao dessas.Coloquei o "backup" entre aspas pois na verdade faremos um EXPORT/IMPORT das estatisticas no nosso primeiro exemplo. Ja no caso do backup feito pelo proprio Oracle, que e o nosso segundo exemplo, trataremos de um restore propriamente dito.Vamos ver primeiro as tabelas e suas estatisticas de um usuario qualquer. Vou usar o SQL abaixo (e deixar a parte da tabela comentada pois vamos usar mais tarde).COL OWNER FOR A10;COL TABLE_NAME FOR A15;SELECT owner, table_name, avg_row_len, blocks, empty_blocks, num_rows, TO_CHAR(last_analyzed, 'DD/MM/YYYY HH24:MI:SS') as last_analyzedFROM DBA_TABLESWHERE OWNER = UPPER(NVL('&OWNER',OWNER));OWNER TABLE_NAME AVG_ROW_LEN BLOCKS EMPTY_BLOCKS NUM_ROWS LAST_ANALYZED---------- --------------- ----------- ---------- ------------ ---------- -------------------EXEMPLO EXTCONFIG 44 1 0 11 10/09/2016 23:02:50EXEMPLO SERVER_STAT 0 0 0 0 10/09/2016 23:02:50EXEMPLO TMP_TOP_SESSION 0 0 0 0 10/09/2016 23:02:50EXEMPLO TOP_SESSION 0 0 0 0 10/09/2016 23:02:50EXEMPLO TOP_SQL_TEXT 0 0 0 0 10/09/2016 23:02:50EXEMPLO TOP_SQL 0 0 0 0 10/09/2016 23:02:50EXEMPLO LOG_TEMPO 33 5 0 5 13/10/2016 23:00:13EXEMPLO ESTATISTICA 75 244 0 19539 12/10/2016 23:00:04EXEMPLO DISPONIBILIDADE 19 20 0 26 13/10/2016 23:00:11EXEMPLO BACKUP 0 0 0 0 10/09/2016 23:02:50EXEMPLO MENSAGEM 86 496 0 37974 10/10/2016 23:00:06EXEMPLO INSTANCIA 0 28 0 0 13/10/2016 23:00:13EXEMPLO ESQUEMA 18 13 0 1641 10/10/2016 23:00:05EXEMPLO TABLESPACE 24 13 0 2550 28/09/2016 23:00:03EXEMPLO HIST_ARMAZENAME 0 0 0 0 10/09/2016 23:02:50EXEMPLO ARMAZENAMENTO 0 0 0 0 10/09/2016 23:02:50EXEMPLO SERVIDOR 0 28 0 0 13/10/2016 23:00:13EXEMPLO CONFIG 27 5 0 1 10/09/2016 23:02:50Ok, bem zuadas algumas estatisticas por sinal, bem antigas.Vamos ver como forcar um "backup" das estatisticas antes da coleta. Depois coletamos as estatisticas e vamos retornar algumas.Primeiro, faremos da forma manual. Vou rodar tudo como SYS:1) Criar a tabela que ira armazenar a estatisticaexec dbms_stats.create_stat_table( ownname => 'EXEMPLO', stattab => 'STAT_EXEMPLO', tblspace => 'EXEMPLOTBS');Onde:ownname - Name of the schema. stattab - Name of the table to create.