A memória compartilhada e os semáforos são dois itens importantes, sem eles a instancia nao inicia e em consequencia o banco de dados nao abrirá.

Memória compartilhada

Assim: Memória compartilhada como o nome mesmo diz, é o local de memória onde ela pode ser compartilhada entre diferentes processos. O oracle utiliza essa area de memoria para a implementar a SGA (System Global Area), da qual precisa estar visivel para todas as sessoes de banco de dados. Por isso as vezes o administrador apesar de ter memória disponivel nao consegue alocar uma SGA maior, necessita configurar os parametros de memoria para que a SGA vá até estes limites impostos pelo sistema operacional.

Um erro comum por exemplo no banco postgree por falta de memroia compartilhada é:

  Out of Memory: Killed process 12345 (postmaster).

A partir do kernel 2.6, opadrão é que não haja “sobre-utilização”. Caso esteja desativado, pode ser implementado selecionando um modo restrito de sobre-utilização através do sysctl:

  [root]# sysctl -w vm.overcommit_memory=2

Aproveitando o espaço, e como estava com as definições em mãos, segue descritivo referencia para facilitar a configuração (quando necessário) desses parâmetros:

SHMMAX

Tamanho máximo de um segmento de memória compartilhada (bytes). 250 kB + 8.2 kB * shared_buffers + 14.2 kB * max_connections até o infinito.

SHMMIN

Tamanho mínimo de um segmento de memória compartilhada (bytes). Padrão 1.

SHMALL

Quantidade total de memória compartilhada disponível (bytes ou páginas)

SHMSEG

Número máximo de segmentos de memória compartilhada por processo. Somente 1 segmento é necessário, mas o padrão é muito maior.

SHMMNI

Número máximo de segmentos de memória compartilhada para todo o sistema.

Semáforos

Os semáforos sao sinais que podem estar ligados ou desligados indicando que este processo ainda nao finalizou sua tarefa. Veja, os semaforos existem para que nao sejam sobrepostas as operações executadas pelos processos. Imagina a copia em paralelo de um arquivo do arquivo do word se os dois ao mesmo tempo serem gravados no mesmo local com mesmo nome o que ocorrerá ? Existe ai um conflito para utilizacao do nome do arquivo, do espaço em disco, portanto um semaforo resolveria essa questao sinalizando um processo para que ele aguarde ate que o outro termine a sua operação. Um processo pode ter uma sinalização de ligado ou desligado, isso na verdade servirá como uma forma de controle de eventos e processos para que a SGA do Oracle consiga controlar toda a concorrencia de escrita e leitura na memoria compartilhada.

Verificação de instalação:

Inicie sua jornada usando o comando abaixo:

[root]# ipcs -la
----- Limites da memória compartilhada ----------
número máximo de segmentos: 4096
tamanho máximo do segmento (Kb): 2097152
memória compartilhada total máxima (Kb): 8388608
tamanho mínimo do segmento (bytes): 1

------ Limites de semáforo ----------------------
número máximo de arrays: 100
máximo de semáforos por array: 100
máximo geral de semáforos do sistema: 32000
máximo de ops por chamada semop: 100
valor máximo de semáforo: 32767

------ Mensagens: limites -----------------------
número máximo geral de filas no sistema: 16
tamanho máximo da mensagem (bytes): 8192
tamanho máximo padrão da fila (bytes): 16384

Para o Oracle 10G, estes valores podem variar de acordo com release e versão:

echo 100 32000 100 100 > /proc/sys/kernel/sem

Depois confirme com o comando cat:

cat /proc/sys/kernel/sem

Precisamos também aumentar o numero máximo de arquivos manipulados pelo usuário, para 131072:

echo 131072 > /proc/sys/fs/file-max
ulimit -n 131072

Aumentar as portas disponiveis no servidor:

echo 1024 65000 > /prco/sys/net/ipv4/ip_local_port_range

Aumentar o numero máximo de processos que podem ser controlados pelo usuario, para 16384.
com o ulimit -a voce consegue verificar como o seu sistema esta atualmente.

ulimit -u 16384

Alterar diretamente no parametro do kernel, veja essa mudanca nao é permanente.
echo 65536 > /proc/sys/fs/file-max

Essa agora sim, a cada boot é lido novamente o arquivo sysctl.conf, se quiser confira os demais parametros editando o arquivo sysctl.conf com o vi.

echo fs.file-max=65536 >> /etc/sysctl.conf

E depois o numero de processos controlados pelo usuario oracle no servidor.

Eu aconselho colocar esse comando no profile comum que fica em /etc/profile.sh ou no bash_profile do usuario. Outra dica é colocar no arquivo /etc/security/limits.conf

ficando assim:

oracle soft nofile 63536
oracle hard nofile 63536

Duas dicas interessantes:

NOTE: It is also possible to query the current usage of file handles using the following command:

# cat /proc/sys/fs/file-nr
1140 0 103062

In the above example output, here is an explanation of the three values from the file-nr command:

* Total number of allocated file handles.
* Total number of file handles currently being used.
* Maximum number of file handles that can be allocated. This is essentially the value of file-max – (see above).

NOTE: If you need to increase the value in /proc/sys/fs/file-max, then make sure that the ulimit is set properly. Usually for 2.4.20 it is set to unlimited. Verify the ulimit setting my issuing the ulimit command:

# ulimit
unlimited

Lembre-se o comportamento tanto da manipulação dos arquivos quanto dos processos pode ser diferente quanto ao metodo de login, portanto SSH, login via terminal poderão ter limites diferentes.

Confirme tudo com o comando

sysctl -p

ou ainda para confirmar os arquivos separadamente, ou seja nao precisa de boot:

sysctl -w fs.file-max=65536

Bom, de tudo eu li a informação no site do puschitz também, mas ta confuso visto que ele mexe no mesmo parametro duas vezes no mesmo arquivo /etc/security/limits.conf tanto para o numero de processos quanto para o numero de arquivos.
Veja em http://www.puschitz.com/TuningLinuxForOracle.shtml

Resumo – Execute os comandos como root:

echo “kernel.sem=250 32000 100 128” >> /etc/sysctl.conf