September 8, 2009
September 3, 2009
Create Database | TS SYSTEM como DMT
A partir do Oracle 10g posso criar um banco apenas com :
SQL> create database;
Database created.
Agora, como fica o gerenciamento das tablespaces : Local ou Dictionary ?
SQL> select name, decode(bitmapped, 0, ‘DMT’, ‘LMT’)
2 from ts$
3 order by name;
NAME DEC
————— —————
SYSAUX LMT
SYSTEM DMT
SYS_UNDOTS LMT
SQL>
Como podes ver o comando “create database” cria a system como DMT por default
Fácil também poderia significar melhores práticas
Pra surpresa a versao é :
SQL> select * from v$version;
BANNER
——————————————————————————–
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 – Production
PL/SQL Release 11.1.0.6.0 – Production
CORE 11.1.0.6.0 Production
TNS for 32-bit Windows: Version 11.1.0.6.0 – Production
NLSRTL Version 11.1.0.6.0 – Production
August 30, 2009
Log Miner | Muito além do FlashBack
O Oracle LogMiner é uma ferramenta que permite consultas a arquivos de redo log’s online e archives através de SQL. Os arquivos de redo contém o histórico da atividades em um banco de dados.
Entre os beneficios do LogMiner temos:
1 – Localizar um corrupção lógica devido a erros de aplicação
2 – Determinar que ações devem ser tomadas para executarmos um recover granular da transação
3 – Otimização de performance e plano de capacitação através da análise de tendencias.
4 – Pos auditoria.
Aqui tem um exmplo rápido de implementação e utilização em relação ao FlashBack:logminer
Cade a tabela que estava aqui ?
Situação : Cliente liga reclamando que algumas consultas estão mais lentas que o normal. Até aí tudo bem.
E lá vou eu pro cliente pensando que ia resolver o problema com um pouquinho de dbms_stats, nosso amigos de sempre statspack/awr , talvez algum tkprof, além é claro da boa e velha v$session_wait.
No entanto a coisa tomou outro rumo quando achei um trace com os seguintes erros:
ORA-00600: internal error code, arguments: [2662], [2293], [1693171303], [6773], [2522013792], [16], [], []
ORA-08103: object no longer exists
Nesse momento,olho para o cliente que está ao meu lado (não fazendo pressão, mas investigando também claro
) e vejo aquela expressão de terror estampada na sua cara. Não demora muito e ele manda a pergunta crucial “Como assim tem um objeto que não existe mais ?”.
Após ter dado um tranqüilizante no cliente, fui tentar achar qual o objeto que não existia mais.
Consegui identificar o objeto e mandei o bom e velho analyze – o objeto aqui está com XXX por razões obvias.
SQL> analyze table XXX validate structure cascade;
analyze table XXX validate structure cascade
*
ERROR at line 1:
ORA-08103: object no longer exists
Confirmando com um select
SELECT ROWID, ultima_coluna_da_tabela from XXX
AAABz+AAHAAACDPAAp S
AAABz+AAHAAACDPAAq S
AAABz+AAHAAACDPAAr S
AAABz+AAHAAACDPAAs S
AAABz+AAHAAACDPAAt S
AAABz+AAHAAACDPAAu S
AAABz+AAHAAACDPAAv S
AAABz+AAHAAACDPAAw S
ERROR:
ORA-08103: object no longer exists
10073 rows selected.
Ok descobri qual o objeto e agora ?
Alguns detalhes.
Versão Oracle: 9.2.0.8 Standard 32bits Linux – Tabela em TS’s LMT.
Ao que parece isso é um resultado esperado se as tabelas estão sendo alvo de algum drop/truncate, enquanto consultas referenciando estas tabelas ainda estão sendo executados.
No caso de um index, o erro pode ter sido causado por um rebuild.
Colocando de maneira bem simples o objeto foi eliminado por outra sessão, enquanto a aplicação estava sendo executada.
- Nesse momento acho que vi um developer levantar e sair correndo…mas deve ter sido só impressão.
O fato é que o data_object_id (em dba_objects) foi alterado enquanto as consultas estavam rodando. Se não me engano , esta coluna pode mudar devido :
truncate table
alter index .. rebuild
alter table .. move
** Como internals: quando um truncate ocorre DATAOBJ# em OBJ$ aumenta de um e isso pode causar o ORA-08103.
Ah ! Isso também pode acontecer se o objeto estiver corrompido. Mas ai já é outra história
Voltando ao assunto do post vamos tentar simular o erro:
SQL> create table blah as select * from dual;
Tabela criada.
SQL> var c refcursor
SQL> begin open :c for select * from blah; end;
2 /
Procedimento PL/SQL concluído com sucesso.
SQL> drop table blah purge;
Tabela eliminada.
SQL> print c;
D
-
X
SQL>
No entanto se eu fizer o drop na tabela e re-utilizar este espaço (recriando outra tabela), o cursor vai falhar.
SQL> create table blah as select * from dual;
Tabela criada.
SQL> var c refcursor
SQL> begin open :c for select * from blah; end;
2 /
Procedimento PL/SQL concluído com sucesso.
SQL> drop table blah purge;
Tabela eliminada.
SQL> create table blah(a int); — este comando vai sobrescrever o header do bloco da tabela anterior
Tabela criada.
SQL> print c
ERROR:
ORA-08103: o objeto não existe mais
Não tem muito o que fazer não é ? O Objeto não existe mais. Fim da História.
E como ficou o cliente ? Ele ficou mais calmo depois que fiz um TSPITR com export e import desta tabela.
August 29, 2009
Problemas com Hints ? | Sql Profile
Testando uma maneira nova de fazer posts.
Fiz um documento sobre como utilizar Sql Profile ao invés da Hint em um comando sql. O motivo é que fica mais fácil de ver os planos de execução do que se eu fizesse print screen aqui no wordpress.
Pra download é so clicar aqui: SqlProfileExemplo
July 1, 2009
June 30, 2009
Estrategias para migrar de FS para ASM
* Rman
* Dbms_file_transfer
* Online reconfiguration
* Ftp
* Alter table move.
* Migração gradual com datafiles em FS e ASM
Lembrando que o RMAN, aparecendo como o primeiro da lista, não é mera coincidencia
April 21, 2009
Oracle Compra a Sun
Provavelmente o Solaris vai se tornar um SO mais viavel para rodar Oracle na plataforma x64. Na verdade este SO já é muito bom, mas agora deve ser devidamente apoiado pela Oracle.
Mais detalhes em : http://www.oracle.com/sun/index.html
March 7, 2009
Oracle Enterprise Manager 10g Release 5 | Grid Control
O produto está disponivel nas versões Windows (32 bits) e Linux (x86) desde quarta-feira pela manhã.
O download pode ser feito aqui.
Pontos a ressaltar:
1 – ADDM para RAC (finalmente)
2 – Database Vault
3 – 11g advisors : Partition Advisor, Data Recover Advisor
4 – Database Replay pode fazer a captura de workloads a partir do release 9.2.0.8
…
…
Todas as novas caracteristicas podes ver no otn
December 27, 2008
11g ASM|Variable Sized Extents
ASM (10G), define uma Allocation Unit (AU) como a unidade fundamental de alocação dentro de um diskgroup. Por default uma AU no ASM equivale a 1m.
ASM Data Extents são utilizados para manter o conteudo de um arquivo ASM. No Oracle 10g, cada “data extent” é igual a uma AU, ou seja, 1m. Por causa deste relacionamento de um pra um entre o tamanho do extent e uma AU, um mapa de extensões de um arquivo ASM pode crescer até terabytes em bancos de dados muito grandes criando ineficiencias no uso de memória e abertura dos arquivos.
No 11g esse overhead é minimizado através de Variable Sized Extents. Por exemplo : Imagine um datafile pequeno com digamos 1G de tamanho, então o file extent utilizado será de 1 AU. A medida que este arquivo aumenta, o tamanho das AU’s irá variar de acordo com a quantidade de extents . A tabela abaixo mostra os limites do numero de extents e os tamanhos das AU’s
| Number of Extents | Size |
| 0 – 19999 | 1*AU |
| 20000 – 39999 | 8*AU |
| 40000 – 59999 | 64*AU |
O primeiro limite é 20G (20.000 extents de 1m) . O tamanho dos extents validos são 1, 8 e 64 AU’’s (1m, 8m e 64m). O ASM administra estes tamanhos automaticamente. Neste sentido esta feature é bastante similar ao comportamento da Alocação de Extensão Automatica que o RDBMS utiliza.
