Pessoal,
O blog está passando por uma mudança (forçada) de hospedagem, com isso alguns itens não estão funcionando, como: a área de scripts, comentários, links das imagens e o email contato@flaviosoares.com que ainda está em fase de migração.
Estou trabalhando nisso e acredito que muito em breve as coisas vão estar todas resolvidas.
Um abraço!
Só nós DBA’s sabem as inúmeras funções, sintaxes e comandos que precisamos decorar no nosso dia a dia e isso não é uma tarefa fácil, além do que, as soluções sempre precisam ser rapidamente propostas. Por isso que gosto de facilitar as coisas sempre que posso, assim como esse script, que além de simples ele realiza é uma formarápida os passos que nem sempre são lembrados, isso evita aquele tempão gasto procurando na documentação a sintaxe exata de tal procedimento. Qual DBA que nunca passou por isso que atire a primeira pedra!
O objetivo principal do script é facilitar a execução do Oracle Segment Advisor, de uma forma bem simples, apenas três argumentos e nada mais e o melhor de tudo: não é preciso criar qualquer tipo de objeto no banco de dados, todo trabalho é executado através de um bloco anônimo de PLSQL e o único requisito aqui é o bom e velho SQL*Plus.
Você pode conferir a primeira versão (sim, próximas poderão surgir) você pode fazer aqui.
Como usar Segment Advisor Script?
SYNTAX: { @run_sa “Owner Segment” “Segment Name” “Segment Type” }
Ele não precisa nada mais além do que três argumento:
1. “Owner Segment” : O primeiro representa o nome do owner do segmento.
2. “Segment Name”: O segundo representa o nome do segmento.
3. “Segment Type”: O terceiro representa o tipo do segmento. Que pode ser um TABLE, INDEX etc …
Usando o Segment Advisor Script
Para explicar melhor vamos a um teste prático.
Primeiro de tudo, precisamos de uma tabela grande favorável para o teste que vamos fazer, para isso criei a tabela chamada TBIG dentro do schema FSOARES.
FSOARES@dbtst> create table tbig as select * from dba_source; Table created. FSOARES@dbtst> insert into tbig (select * from tbig); 633054 rows created. FSOARES@dbtst> / 1266108 rows created. FSOARES@dbtst> / 2532216 rows created. ... FSOARES@dbtst> commit; FSOARES@dbtst> @size tbig SEGMENT_NAME SEGMENT_TYPE SIZE_MB ------------------------------ ------------------ --------------- TBIG TABLE 5,244.00
Pronto, temos agora uma tabela de 5G que está perfeita para o nosso teste. Vamos ver quantos registros temos:
FSOARES@dbtst> set timing on
FSOARES@dbtst> select count(*) from tbig;
COUNT(*)
----------
40515456
1 row selected.
Elapsed: 00:04:08.21
Ok, temos cerca de 40515456 registros e levamos cerca de 4 minutos para sabermos isso. Vamos agora apagar uns 98% dessa tabela deixando apenas alguns milhares de registro. Para fazer essa operação mais racional, quero descobrir quantos registros tenho por usuário nessa tabela, afim de deixar apenas os menores owners:
FSOARES@dbtst> select count(*), owner from tbig group by owner order by 1;
COUNT(*) OWNER
---------- ------------------------------
576 IX
576 OUTLN
1088 PM
2176 FLOWS_FILES
2176 HR
2880 SYSTEM
13696 OE
14912 ORDPLUGINS
19392 WMSYS
70464 EXFSYS
183808 ORACLE_OCM
230528 DBSNMP
231552 ORDSYS
548288 XDB
731264 OLAPSYS
1258816 CTXSYS
1340416 MDSYS
2624256 APEX_030200
9466112 SYS
23772480 SYSMAN
20 rows selected.
Elapsed: 00:01:14.06
FSOARES@dbtst> delete tbig where owner NOT IN ('IX', 'OUTLN');
40514304 rows deleted.
Elapsed: 00:29:57.41
FSOARES@dbtst> commit;
Commit complete.
Elapsed: 00:00:00.01
Aqui, a nossa tabela TBIG está somente com os dados usuário IX e OUTLN, o resto dos outros usuário foi simplesmente apagado. Bom como temos agora apenas alguns registros vamos realizar aquele mesmo count para ver o a quantidade de registro, vamos ver agora o quanto tempo levará. Primeiro é claro, vamos remover a consulta do nosso cache.
FSOARES@dbtst> alter system flush shared_pool;
System altered.
FSOARES@dbtst> alter system flush buffer_cache;
System altered.
FSOARES@dbtst> select count(*) tbig
COUNT(*)
----------
1152
1 row selected.
Elapsed: 00:03:53.93
Temos agora cerca de mil registros e levamos quase o mesmo tempo para realizar o count da tabela quando ela estava com mais de 40 milhões de registro!? Como isso pode ser? Tivemos o mesmo tempo para contar de 0 a 1152 e de 0 a 40 milhões?
Bom, sem dúvidas há alguma coisa de errado com nosso segmento de tabela TBIG. É aí que entra o Segment Advisor, que vai nos aconselhar o que fazer com esse segmento.
Veja como é simples:
FSOARES@dbtst> @run_sa fsoares tbig table --------------------------------------------------------------------------------- -- Segment Adviser Script v1.0 by Flavio Soares ( http://flaviosoares.com ) Running the Segment Advisor for Segment Owner : FSOARES Segment Name: TBIG Segment Type: TABLE Segment Advisor successfuly completed For delete the task TaskName_FSOARES_cxdnLahXMf run: SQL> exec dbms_advisor.delete_task('TaskName_FSOARES_cxdnLahXMf'); -- Showing the Segment Advice Recommendations for the object "table" "fsoares" "tbig" TABLESPACE_NAME : USERS SEGMENT_OWNER : FSOARES SEGMENT_NAME : TBIG SEGMENT_TYPE : TABLE PARTITION_NAME : ALLOC_MB : 5,244.00 RECLAIM_MB : 4,567.54 USED_MB : 676.46 PCT_SAVE : 87 % RECOMMENDATIONS : Enable row movement of the table FSOARES.TBIG and perform shrink, estimated savings is 4789413285 bytes. SOLUTION 1 : alter table "FSOARES"."TBIG" shrink space SOLUTION 2 : alter table "FSOARES"."TBIG" shrink space COMPACT SOLUTION 3 : alter table "FSOARES"."TBIG" enable row movement ---------------------------------------------------------------------------------
Observe a recomendação, ele sugere realizar um shrink na tabela que ganharemos com isso cerca de 87% de espaço que hoje não está sendo utilizado. Opa! … é 87% é um bom ganho, então vamos aplicar as recomendações sugeridas.
FSOARES@dbtst> alter table "FSOARES"."TBIG" enable row movement; Table altered. FSOARES@dbtst> alter table "FSOARES"."TBIG" shrink space; Table altered.
Após as recomendações aplicadas, vamos agora executar novamente o count de encontro a tabela TBIG e observar o tempo:
FSOARES@dbtst> alter system flush shared_pool;
System altered.
FSOARES@dbtst> alter system flush buffer_cache;
System altered.
FSOARES@dbtst> select count(*) from tbig;
COUNT(*)
----------
1152
1 row selected.
Elapsed: 00:00:00.01
Depois da recomendação aplicada, o tempo simplesmente caiu para 0.01 segundos.
Viu como ficou bem mais simples utilizar o Segment Advisor agora com o run_sa.sql
Com apenas três argumentos e já temos nossas recomendações.
FSOARES@dbtst> @run_sa fsoares tbig table --------------------------------------------------------------------------------- -- Segment Adviser Script v1.0 by Flavio Soares ( http://flaviosoares.com ) Running the Segment Advisor for Segment Owner : FSOARES Segment Name: TBIG Segment Type: TABLE Segment Advisor successfuly completed For delete the task TaskName_FSOARES_cxdnLahXMf run: SQL> exec dbms_advisor.delete_task('TaskName_FSOARES_cxdnLahXMf'); -- Showing the Segment Advice Recommendations for the object "table" "fsoares" "tbig" TABLESPACE_NAME : USERS SEGMENT_OWNER : FSOARES SEGMENT_NAME : TBIG SEGMENT_TYPE : TABLE PARTITION_NAME : ALLOC_MB : 5,244.00 RECLAIM_MB : 4,567.54 USED_MB : 676.46 PCT_SAVE : 87 % RECOMMENDATIONS : Enable row movement of the table FSOARES.TBIG and perform shrink, estimated savings is 4789413285 bytes. SOLUTION 1 : alter table "FSOARES"."TBIG" shrink space SOLUTION 2 : alter table "FSOARES"."TBIG" shrink space COMPACT SOLUTION 3 : alter table "FSOARES"."TBIG" enable row movement ---------------------------------------------------------------------------------
Dúvidas, melhorias, bugs, recomendações serão muito bem vindas!
Um abraço e aproveitem!
Será o lançamento do Oracle 12c amanhã?
No dia 12/12/2012 ?
Será?
Só nos basta esperar …
O objetivo não é assustar mais o de sempre informar.
Bug 4421376 – Dump (kgldpo) after ALTER TYPE .. RESET
De acordo com a Oracle, existem casos em que quando o “ALTER TYPE RESET;” é executado podem ocorrer corrupção no dicionário de dados do seu banco, isso mesmo você “pode” ter uma corrupção no seu banco!
Para confirmar o problema, basta ver a mensagem kgldpo no seu dump quando um reset é disparado. Oracle acredita que as versões abaixo da 11g podem ser afetadas com esse problema, porém confirma apenas na versão 10.2.0.4.
Sempre consulte o Oracle Supporte para qualquer conselho.
Mais detalhes:
Bug 4421376 – Dump (kgldpo) after ALTER TYPE .. RESET [ID 4421376.8]
São esses tipos de problemas, que existe um intenso apelo por parte da Oracle para sempre manter o seu banco atualizado e com seus os patch em dias, podendo evitar assim problemas extremamente graves como este.
Olá Pessoal
Amanhã para quem não sabe estará acontecendo o Oracle OpenWorld Latin America 2012 aqui em São Paulo na Transamérica Expo Center em São Paulo.
Está é a oitava edição que acontecerá nos dias 04, 05 e 06 de Dezembro.
Sem dúvida é sempre um grande oportunidade para conhecermos as novidades e estar por dentro de tudo que está rolando no mundo Oracle.
Estarei somente no dia 06 (último dia), mais vou tentar tirar algumas fotos para postar no blog. Tudo de interessante que ver por lá estarei compartilhando com vocês.
Essa é uma boa oportunidade para conhecer o pessoal que visita o blog, se alguém for me procure lá
Mais informações: http://www.oracle.com/openworld/lad-pt/index.html
DemoGrounds: http://www.oracle.com/openworld/javaone-lad-2012-demogrounds-pt-1873601.pdf
Agenda: http://flaviosoares.com/wp-content/uploads/2012/12/oow-schedule15-pt-1876004-ptb.pdf













