sábado, 29 de agosto de 2015

Oracle - Dicas para Criação / Manutenção de uma instância Oracle



Dicas para Criação / Manutenção  de uma instância Oracle

(RM Sistemas)

O presente documento contém algumas dicas para DBAs manterem suas instâncias Oracle em perfeito estado de funcionamento.

As primeiras dicas referem-se a parâmetros encontrados no arquivo init.ora, encontrado no diretório de instalação da instância Oracle na máquina em questão.

Para alterar alguns deles (quando possível), basta editar o arquivo em questão, salvá-lo e restartar a instância.

Quaisquer dúvidas podem ser encaminhadas ao suporte da RM Sistemas através do mail (suporte@rm.com.br).

Tamanho  do bloco Oracle
                      
Este parâmetro deve ser configurado no momento da criação da base de dados. Sugerimos a utilização de blocos de 8k (DB_BLOCK_SIZE =  8192). 

OBS: Note que o tamanho do bloco deve ser informado em nº de bytes.

Caso a instância já esteja criada, pode-se verificar a configuração deste parâmetro, editando-se o arquivo  de parâmetros (init.ora)  do Oracle e verificando o valor da variável  DB_BLOCK_SIZE.

Uma outra alternativa para visualizar o valor do parâmetro seria a utilização da ferramenta Instance Manager. Aqui, o parâmetro pode ser visualizado através de:
            Initialization Parameters / Instance Specific

A alteração deste parâmetro só pode ser feita caso a instância seja recriada.

 Distribuição da memória  disponível para o Oracle


Depois de determinada a quantidade de memória que estará disponível para o Sistema Operacional e a quantidade que ficará disponível para o Oracle, deve-se fazer a distribuição da memória disponível para o Oracle.
           
o   SORT_AREA_SIZE 

Deve-se configurar este parâmetro com grande cautela, uma vez que ele reflete a quantidade de memória que cada conexão de usuário irá ter disponível para operações de SORT.
Devemos levar em consideração também a quantidade de memória fixa que cada conexão de usuário gasta (1,7 MB).

Sendo assim, o gasto de memória com conexões de usuários em uma aplicação onde estejam abertas 10 sessões e o SORT_AREA_SIZE esteja configurado com o valor de 1048576  (1MB)  é:
         
          10 * (1,7+1) =  27 MB.

OBS: Note que o valor do SORT_AREA_SIZE  deve ser informado em nº de bytes.

O valor a ser configurado para este parâmetro deve ser definido levando-se em consideração  o número de conexões  simultâneas no Oracle e a quantidade de memória disponínel para  mesmo.

o   DB_BLOCK_BUFFER

Este parâmetro irá refletir a quantidade de memória destinada ao Oracle que será utilizada para Cache de dados.

Este parâmetro deve ser configurado com o número de blocos do Oracle que será utilizado para este Cache.

Sugerido:

60% da memória restante destinada ao Oracle destinada ao Cache de dados.

Como calcular o valor do parâmetro:
          
DB_BLOCK_BUFFER =  (M * 1048576) / B

Onde:  M = É a quantidade de memória ( em Mega bytes ) que deve  ser destinada ao Buffer de Dados.
B= Tamanho do bloco de dados (em bytes) utilizado pelo Oracle.

o   SHARED POOL

Este parâmetro irá refletir a quantidade de memória destinada ao Oracle que será utilizada para o SHARED POOL.

Sugerido:

Restante da memória destinada ao Oracle (40%), destinada ao SHARED POOL.

O valor deste parâmetro deve ser determinado de Bytes.

SHARED_POOL_SIZE = M

Onde:  M= Memória destinada ao SHARED POOL em bytes.

Tablespaces


Deve-se criar pelo menos uma TableSpace distinta para cada finalidade: System, Dados,  Indices, Temp, Rollback, Redo.

É desejável também que os DataFiles destas TableSpaces sejam distribuídos em discos diferentes, de forma a minimizar a concorrência de acesso. Isto deve ser feito conforme a disponibilidade de discos. Exemplo:

           Cenário 1:

           Um disco:

System, Dados,  Iindices, Temp, Rollback , Redo no mesmo disco, mas em TableSpaces diferentes.

           Cenário 2:

           Dois discos:

                       1º disco:  Dados + Temp + Rollback
2º disco: System + Indices + Redo

CPU


Deve-se verificar costantemente a taxa de utilização da CPU, a mesma não deve estar com taxa de utilização muito alta durante a maior parte do período (90% de utilização).

Caso esteja utilizando mais de um processador deve-se verificar se a carga da CPU está balanceada.

Para estas medições, pode se utilizar a ferramenta Performance Monitor (no caso de servidores Windows NT/2000).

COALESCE


Deve-se verificar periodicamente (mensalmente) a fragmentação do espaço livre  alocado para cada TableSpace.

o   Pode-se verificar tal fragmentação utilizando:

SELECT TABLESPACE_NAME, TOTAL_EXTENTS , PERCENT_EXTENTS_COALESCED
FROM  DBA_FREE_SPACE_COALESCED
WHERE PERCENT_EXTENTS_COALESCED <> 100

o   Para efetuar a desfragmentação:

ALTER TABLESPACE tablespace COALESCE

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')

Para agendar a execução diária de estatísticas em um servidor que esteja utilizando o  Windows NT ou Windows 2000:

1º) crie um arquivo TXT com o seguinte conteúdo:

execute DBMS_UTILITY.analyze_schema('RM','COMPUTE')

             2º)  Utilize o command prompt para agendar a tarefa :

at  22:00 every:M,T,W,Th,F,S,Su cmd /c "sqlplus rm/rm @d:\temp\script.txt"

O comando acima agenda a atualização de estatíscas para ocorrer todos os dias às 22:00 horas. Considera-se que o arquivo TXT criado no primeiro item é o d:\temp\script.txt

Indices

Os índices devem ser reconstruídos periodicamente (mensalmente) , ou após periodo 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 percetual de deleção:

SELECT LF_ROWS , DEL_LF_ROWS
FROM INDEX _STATS

OBS: Caso 30% das linhas em folhas (LF_ROWS) tenham sido deletados (DEL_LF_ROWS), o índice deve ser reconstruído.

    3º)             Reconstrução do índice:

          ALTER INDEX indice REBUILD tablespace.

Para reconstruir o índice, durante o REBUILD  deve haver espaço disponível para a coexistência dos dois índices (antigo e novo).

O comando abaixo gera um script para a reconstrução de todos os índices da base de dados:

SELECT 'ALTER INDEX  ' ||  INDEX_NAME || 
' REBUILD TABLESPACE RM_INDICES; '
FROM USER_INDEXES

Este script deve ser executado em um momento em que não haja acesso à base de dados.

Export / Import


O Export e Import da base de dados deve ser feito periodicamente com finalidade de reorganizar os dados dentro da base de dados, desfragmentar e resolver casos de linhas Migradas.

Sugere-se fazer a Exportação / Importação da base de dados de 2 em 2 meses.

Passos para a execução do Export / Import
                      
§  Export da base.
§  Backup físico da base
§  Drop do Schema
§  Import da base

OBS: Semanalmente sugere-se  verificar o número de linhas MIGRADAS na base de dados. Caso o número esteja muito alto, deve-se fazer o Export / Import da base.

Para verificar o número de linhas MIGRADAS utilize:

            SELECT TABLE_NAME, CHAIN_CNT
                        FROM USER_TABLES
ORDER BY CHAIN_CNT DESC

OBS:  A coluna CHAIN_CNT, reflete não apenas o número de linhas migradas, mas o processo de Export / Import irá atacar apenas este problema.

ALERT


O ALERT dever ser verificado diariamente . Deve-se verificar se existem mensagens de erro do tipo ORA-00600 e /ou ORA-01578 , que indicam erros internos do Oracle ou blocos corrompidos.

Caso a mensagem esteja acontecendo, o problema deve ser analisado e solucionado antes que se torne ma