Aumentando os Segmentos de Memória Compartilhada

Quando o WebSphere Business Monitor tenta processar um evento na plataforma AIX, um erro SQL é retornado. E também quando o WebSphere falha em inicializar a conexão com o banco de dados, durante a inicialização ou processamento de eventos. A falha resulta de um limite imposto pelo sistema operacional sobre o número de segmentos de memória compartilhada disponíveis para o IBM DB2.

quando uma Conexão de Teste do WebSphere Admin Console (recursos jdbc) falha com o seguinte erro:
Falha na conexão de teste para a origem de dados MonitorDataSource no servidor
server1 nó Node01 com a seguinte exceção: java.lang.Exception:
java.sql.SQLException: SQL1224N Um agente de banco de dados não pôde ser
iniciado para servir um pedido ou foi encerrado como resultado do
encerramento do sistema de banco de dados ou de um comando force.
SQLSTATE=55032 DSRA0010E: SQL State = 55032, Código de
Erro = -1.224.
Esse erro provavelmente indica que o número de segmentos de memória compartilhada permitido pelo AIX para o banco de dados foi excedido.

Quando esse erro ocorre, é preciso alterar a configuração do DB2 para aumentar o número de segmentos de memória compartilhada. Atualmente, o especialista de recuperação não suporta o uso de definição de um alias do DB2 com um auto-retorno para evitar o problema de memória compartilhada.

Solução

Um recurso de memória compartilhada estendida é usado pelo DB2 para contornar esse problema. Para ativar esse recurso, coloque as seguintes linhas próximas ao começo de /etc/rc.db2 e <home_da_instância>/sqllib/db2profile, (em que <home_da_instância> é o diretório inicial de cada instância do usuário, por exemplo, /home/db2inst1) depois do comentário do bloco, mas antes das linhas executáveis:
# Inclusão local para corrigir o problema de memória compartilhada do AIX:
EXTSHM=ON
export EXTSHM
Nota: A entrada faz distinção entre maiúsculas e minúsculas. Coloque a entrada no db2profiles de todos os usuários de instâncias e do usuário do servidor administrador. Em seguida, efetue login como cada usuário da instância e usuário do servidor administrador e execute o seguinte comando:
db2set DB2ENVLIST=EXTSHM

Isso configura uma variável de perfil do DB2 dentro de cada instância que faz com que o valor do ambiente EXTSHM seja incluído no ambiente do daemon do DB2 conforme são iniciados. A definição de EXTSHM no db2profiles de cada instância, que é executada no login, garante que a variável seja configurada em qualquer ambiente instância-proprietário. Finalmente, a inserção de /etc/rc.db2 garante que a variável seja configurada quando os processos do DB2 são iniciados no momento da inicialização. Por fim, reinicie o sistema para garantir que todos os processos do DB2 sejam iniciados com o EXTSHM=ON em seu ambiente.

Se você deseja que a correção seja automaticamente aplicada às novas instâncias quando elas forem criadas no futuro, inclua linhas que configurem e exportem EXTSHM para o arquivo /usr/lpp/db2_08_02/cfg/db2profile, que é copiado para <home_da_instância>/sqllib/db2profile na criação da instância. Para garantir que a variável de perfil DB2ENVLIST também seja configurada, inclua este código depois que a variável =INSTHOME for configurada:
if [ -x $INSTHOME/sqllib/adm/db2set ]
then if [ "`$INSTHOME/sqllib/adm/db2set DB2ENVLIST`" != "EXTSHM" ]
then $INSTHOME/sqllib/adm/db2set DB2ENVLIST=EXTSHM
fi
fi
Esse código faz com que a variável de perfil da instância DB2ENVLIST seja configurada na primeira vez que uma nova instância é usada.
Nota:
  • Presume-se que o DB2 Versão 8.0 esteja instalado em /usr/lpp/db2_08_02. Se sua instalação estiver em outro local, é preciso trabalhar com seu local de instalação.
  • Para o DB2 versão 8.0, é necessário incluir as seguintes linhas no arquivo <home_da_instância>/sqllib/userprofile, se ele existir; caso contrário, crie um arquivo de perfil de usuário com permissões 755. As linhas são:
    EXTSHM=ON
    export EXTSHM

Direitos Autorais IBM Corporation 2005, 2006. Todos os Direitos Reservados.