sexta-feira, 27 de março de 2009

Shared Memory not Initialized

Algumas vezes me deparei com ambientes de produção onde o Informix não executava nenhuma comando administrativo no UNIX, ao rodar algum comando administrativo recebia a mensagem abaixo:

shared memory not initialized for INFORMIXSERVER 'demo_on'

A primeira coisa que alguem diria é que a variavel INFORMIXSERVER não está setada corretamente, isto também é verdade, porém após checar minha variável de ambiente constatei que o ambiente estava ok.

Nestes casos algumas vezes o DBA preferiu efetuar um bounce na instância e o ambiente voltou ao normal, porém foi necessário entender o porque isto ocorreu, nenhum gestor gosta de ter este tipo de resolução de problema.

Vamos a explicação do problema:

Após o Informix inicializar a shared memory o mesmo cria um arquivo de configuraçao em $INFORMIXDIR/etc chamado infos.dbservername , onde dbservername é o nome da sua instância.

Esse arquivo contém informações básicas para que alguns comandos administrativos (onstat, onmode, oncheck) possam fazr um attach na shared memory, sem esse arquivo não é possivel identificar a SHMKEY que foi gerada na inicialização.

Como vizualizar o arquivo de configuração?

ls -las $INFORMIXDIR/etc/.infos*

Para visualizar o conteudo:

onstat -g pos

Agora vem o conhecimento perdido, e para recriar o arquivo sem ter que reinicializar a instancia?

onmode -R

Quando este arquivo é removido?

Ahhhh , buena pregunta!! Quando tem alguém alterando configuração de servicos (/etc/services) ou fazer limpeza no file-system para recuperar espaço livre.

Caso você queira saber se realmente o problema é arquivo de configuração execute um trace no onstat:

strace onstat -

open("/opt/IBM/informix/etc/.infos.demo_on", O_RDONLYO_LARGEFILE) = -1 ENOENT (No such file or directory)access("/opt/IBM/informix/msg/en_us/0333/olutil.iem", R_OK) = 0close(3) = 0

No linux usamos o strace, em Aix costumo usar o truss, lembre-se de um post anterior que eu falei sobre alocação da shared memory, o IDS na inicialização faz o calculo da SHMKEY através dò cálculo (SERVERNUM * 65536) + shmkey , se o arquivo está lá é bom se a shared memory ainda está alocada , pode ser através do comando ipcs.

Este post me faz lembrar dos anos de Telesp Celular, velhos e bons tempos, mais pra frente irei postar algo sobre conexões IPC Stream Pipe (rodando em Tru64 dava pra fazer magia negra).

Hasta Luego!

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.