24 de out. de 2008

Horário de Verão – Impactos em banco de dados

Sabado (22/10/2008) houve a mudança de horários, ajustando o relógio para +1 hora, ou seja, as 0hs todos os relógios deverão ser ajustado para 01:00:00 da manhã. Muitos profissionais a quais trocamos informações sobre isso acharam que essa mudança no sistema operacional não reflete problemas no banco de dados.

Um dos ambientes a qual eu administro, sofreu impacto, o banco de dados não foi aprovado o shutdown/startup devido o horário apenas avançar, não gerando assim maiores problemas. Não foi bem o que aconteceu. Esse banco de dados é um Oracle 10G release 2.4 rodando em Red Hat E/S 4.3. Os problemas encontrados foram:

  1. Listener na porta 1521 encontrava-se com intermitência de horário, mostrando randomicamente o horário antigo e novo. Uma verdadeira coisa de louco :P
  2. Os registros no alert log estavam sendo gravados com o horário antigo.

A primeira solução foi reinicializar os serviços de listener, fazendo apenas o reload dos listeners mas ainda assim o horário continuava instável. Foi realizado, portanto um STOP/START de todos eles, e com isso o horário se manteve estável, mas o horário apresentado era incorreto. A solução então foi fazer um shutdown do banco de dados, após sincronização de bases de dados de contingências com o ultimo redo, foi realizado shutdown da base primaria e a mesma retornou com sucesso.

Em conversa com outros DBAs outros problemas a qual ocorreram foi:

  1. Linux Suse 10 – Apresentou problemas na crontab durante os processos de adiantamento de horário. A solução foi reinicializar os serviços atrelados a cron.
  2. Windows – A Microsoft sempre adianta o horário de verão, nessa virada por exemplo o adiantamento foi de 3 dias. Devido a preocupação de diversos administrador a opção de alteração automática para horário de verão e desabilitada. No dia da virada mesmo com o horário certo o Oracle estava apresentando horário incorreto, isso se deu devido o botão de atualização automática estar desabilitado.

Ufá, nunca vi um horário de verão dar tantos problemas. Devemos sempre nos precaver desses "detalhes", pois uma inserção errada, pode causar um transtorno muito grande dentro de uma corporação. Muito obrigado e até a próxima.

10 de out. de 2008

ASM – Conceitos, Arquitetura e Gerenciamento – Parte 1/2

ASM - Vantagens

  1. É capaz de identificar melhor o nivel de RAID para cada tipo de arquivo do banco de dados
  2. Gerencia melhor o espaço alocado e a forma com a qual ela é armazenada
  3. Idêntico em todas as plataformas

Arquitetura ASM

Uma instancia RDBMS é uma instancia padrão de banco de dados. Definir esse parametro como ASM iniciará uma instancia do gerenciamento automático, que é bastante diferente.

Os discos ASM precisam ser dispositivos puros, sem um sistema de arquivos, mas não precisam ser dispositivos reais. Elem podem ser discos, partições de um disco ou volumes lógicos gerenciados por um LVM.

Você pode usar o ASM para arquivos do banco de dados, e não para o seu diretório inicial do Oracle nem para nenhuma finalidade. (Pergunta bem comum quando você irá prestar o OCP 1z0-043).

 
 

Processos dentro do ASM

Um dos principais processo encontrados no ASM é o RBAL
coordena o equilibrio e o ARB faz o stripping e o espelhamento da informação. O processo RBAL abre os discos ASM, o qual é localizado através da instancia ASM.

Não é necessário informar à instancia RDBMS o nome da instancia ASM, pois ela se registra com o serviço de Cluster Synchronization o seu nome e os nomes dos Grupos de disco ASM. Permite a instancia do processo ASMB localizar a instancia ASM que está gerenciando esses grupos, interrogando o serviço de Cluster Synchronization.

Arquivos armazenados no ASM

Por ser uma pergunta fundamental para quem está querendo adquirir essa solução deixei ou até mesmo estudando para o exame OCP.

  1. ControlFile
  2. Arquivos de Parametro de inicializacao
  3. Logs de Redo On-Line
  4. Logs de Redo Archived
  5. Arquivo de dados
  6. TempFiles
  7. Conjunto de backup do RMAN
  8. Copias imagens do RMAN
  9. Logs de FlashBack
  10. AutoBackup do ControlFile
  11. Arquivo de dump do Data Pump

O ASM não gerencia os arquivos binarios do Oracle, logs de alertas, arquivos de trace e arquivos de senha


 

Obs.

striping = escrita simultanea => Desempenho
mirroring = espelhamento => tolerancia a erros

 
 

Parametros para o ASM

instance_type - precisa ser ASM para uma instance ASM <Default = RDBMS>
instance_name - Nome da instancia prefixado no inicio com + Ex. +ORCL
asm_power_limit - Controla os recursos a serem usados para operações de reequilíbrio
asm_diskstring - Lista de discos Ex: C:/,D:/,E:
asm_diskgroups - São os grupos de discos a serem montados durante a inicializacao <Default = NULL>


Exemplo Windows:

instance_name='+asm'
instance_type='asm'
asm_diskstring='\\.\*:'
asm_diskgroup=dgroupA,dgroupB
background_dump_dest='d:\oracle\admin\dump\asm'


 Exemplo Linux:

instance_name='+asm'
instance_type='asm'
asm_diskstring='/dev/md2','/dev/md3','/dev/md4','/dev/md5'
asm_diskgroup=dgroupA,dgroupB
remote_login_passwordfile=exclusive

IMPORTANTE:

Se uma instancia RDBMS falhar, a instancia ASM não será afetada.
Se uma instancia ASM falhar, as instancias RDBMS irão abortar.

Com isso finalizo a primeira parte do ASM, na próxima sessão irei abordar os tópicos abaixo:

  1. Criando a instancia ASM passo a passo
  2. Tipos de redundância do ASM
  3. Tipos de espelhamento do ASM
  4. ASM e RMAN
  5. Administração do ASM
  6. Conclusão

Obrigado e até a próxima.

30 de ago. de 2008

Curso de Performance e Tuning – Oracle 10g

Boa noite, acabei hoje meu curso de performance e Tuning. Apesar do curso não suprir tudo sobre a otimização, desempenho e performance, esclareceu algumas duvidas, e me ajudou muito em algumas coisas que estou estudando para o OCP. Umas das minhas duvidas era a respeito do KEEP_SIZE,Checkpoint e algumas coisas de Redo Online.

    Essa semana vai ser ótima para fazer alguns testes e realizar algumas verificações nos ambientes a qual administro. Espero colocar minhas experiências aqui, compartilhando conhecimentos. O primeiro trabalho a ser realizado será a verificação dos pontos fundamentais para desempenho no banco de dados. Ao longo da semana irei fazendo atualizações com notas realizadas. E com algumas notas da ORACLE (Best Pratices).

Abraços.

10 de jul. de 2008

JOB no Oracle 10G

Nossa nunca pensei que iria apanhar no agendamento de tarefas no Oracle (por ser uma atividade relativamente simples). Depois de vários erros abaixo igual os abaixo achei a solução:

ERRO na linha 1:
ORA-06550: line 1, column 23:
PLS-00363: expression '377' cannot be used as an assignment target
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

ERRO na linha 2:
ORA-06550: line 2, column 67:
PLS-00103: Encountered the symbol "SYSDATE" when expecting one of the following:
) , * & | = - + < / > at in is mod remainder not rem => ..
<um expoente (**)> <> or != or ~= >= <= <> and or like LIKE2_
LIKE4_ LIKEC_ between || multiset member SUBMULTISET_
The symbol "," was substituted for "SYSDATE" to continue.

Solução:

15:33:56 SQL> execute DBMS_JOB.iSUBMIT(377, 'SUPORTERJ.BCS_P_WEB_AGENTE;', SYSDATE,'(TRUNC(SYSDATE)+ 1)+3/24');
Procedimento PL/SQL concluído com sucesso.

Decorrido: 00:00:00.63

15:34:17 SQL> execute DBMS_JOB.REMOVE(377);
Procedimento PL/SQL concluído com sucesso.

8 de jul. de 2008

Bind Variables – Parametro Cursors_Sharing

Estou trabalhando em um banco de dados onde as consultas que são executadas com os valores fixos nos selects. Fazendo um levantamento nas querys que mais consomem pelo AWR, consegui levantar uma consulta 25 vezes, com 25 vezes levantadas em memória pois o CURSOR_SHARING está setado para EXACT.

O parâmetro Cursor_Sharing aceita 3 valores, sendo eles: FORCE, SIMILAR e EXACT

EXACT – é o padrão para banco de dados Oracle. O parâmetro EXACT envia ao otimizador do Oracle que toda e qualquer instrução deve ser igual inclusive os valores literais. Esse parâmetro é mais utilizado em ambientes que as instruções executadas não possui valores similares.

FORCE – O parâmetro troca as variáveis literais por valores bind, em sua execução, fazendo com que o HARD-PARSE se transforme em SOFT. O valor FORCE no parametro CURSOR_SHARING, gera apenas 1 plano de execução.

SIMILAR – O parâmetro troca as variáveis literais por valores bind, em sua execução, fazendo com que o HARD-PARSE se transforme em SOFT. O valor SIMILAR no parametro CURSOR_SHARING, gera mais de um plano de execução (se a tabela estiver com a coleta de estatísticas atualizada).

----TESTES-----

Meu primeiro passo é testar a performance de cada um desses comandos, vou habilitar o trace para buscar o HARD PARSE e SOFT PARSE de cada uma das consultas executadas. Meu primeiro desafio encontrado foi que o Trace não funcionava!! Tentei de tudo, fiquei até 23hs no serviço incomodando muita gente. Quase indo embora executei o comando:

SHOW PARAMETERS TRACE

E me trouxe uma peça importante:

trace_enabled boolean FALSE

Achei que esse parâmetro tinha alguma coisa a ver com minha dificuldade. Hoje confirmei com meu outro amigo DBA Rubens (FCESP) que esse parâmetro habilitar a geração do trace.Após o trace a recompensa! Achei que a diferença ia ser muito baixa fiz os testes rodando o mesmo conjunto de SQL (utilizando variáveis bindadas), mas para minha felicidade foram altas.

Segue abaixo os valores encontrados:


 

EXACT


 

FORCE



 

SIMILAR


 


Conclusão:

Para alteração nesse parâmetro faça o levantamento de instruções SQL sendo executadas no banco de dados e verifique a possibilidade de alteração para Bind Variables. Se verificado que não há possibilidade de alteração devido tempo (o principal fator), averigúe a possibilidade de alteração do parâmetro fazendo antes um levantamento no ambiente.


 

7 de jul. de 2008

Avisos dos Advisores na pagina principal do DbConsole

Consultando os avisos do Advisors gerados na pagina principal do DBConsole.

--ALERTAS AINDA NAO RESOLVIDOS
SELECT REASON,
OBJECT_TYPE TYPE,
OBJECT_NAME NAME
FROM DBA_OUTSTANDING_ALERTS;

--ALERTAS RESOLVIDOS NO DBA_OUTSTANDING_ALERTS
SELECT REASON,
OBJECT_TYPE TYPE,
OBJECT_NAME NAME
FROM DBA_ALERT_HISTORY;

18 de jun. de 2008

AWR - SQL Costs

Segue abaixo o sql para extrair do Awr as instruções mais impactantes:

spool INSTRUCOES_IMPACTANTES.LOG
col c1 heading ‘SQLID’ format a13

col c2 heading ‘Cost’ format 9,999,999
col c3 heading ‘SQL Text’ format a200

select p.sql_id c1,
p.cost c2,
DBMS_LOB.SUBSTR(s.sql_text,4000,1) c3
from dba_hist_sql_plan p,
dba_hist_sqltext s
where p.id = 0
and p.sql_id = s.sql_id
and p.cost is not null
order by p.cost desc;

spool off