Augmentation des segments de mémoire partagée

Lorsque WebSphere Business Monitor tente de traiter un événement en environnement AIX, une erreur SQL est renvoyée. Une erreur SQL est également générée en cas d'échec de l'initialisation de la connexion de base de données par WebSphere lors du démarrage et du traitement des événements. Cet échec est dû à une limite imposée par le système d'exploitation concernant le nombre de segments de mémoire partagée disponibles pour IBM DB2.

Par exemple, une connexion test à partir de la console d'administration de WebSphere (ressources jdbc) échoue et l'erreur suivante est générée :
La connexion test pour la source de données MonitorDataSource sur le serveur server1 au noeud Node01 a échoué avec l'exception suivante : java.lang.Exception: java.sql.SQLException: SQL1224N A database agent could not be started to service a request, or was terminated as a result of a database system shutdown or a force command. SQLSTATE=55032 DSRA0010E: SQL State = 55032, Error Code = -1,224.
Cela signifie probablement que le nombre de segments de mémoire partagée admis par AIX sur la base de données a été dépassé.

Lorsque cette erreur se produit, vous devez modifier la configuration de DB2 afin d'augmenter le nombre de segments de mémoire partagée. Actuellement, l'outil Recovery Expert ne prend pas en charge l'utilisation d'un alias DB2 défini avec un bouclage pour éviter l'incident lié à la mémoire partagée.

Solution

Une fonction de mémoire partagée étendue est utilisée par DB2 afin de contourner cet incident. Pour activer cette fonction, placez les lignes suivantes près du début de /etc/rc.db2 et de <instance_home>/sqllib/db2profile (<instance_home> étant le répertoire principal de chaque utilisateur d'instance ; par exemple, /home/db2inst1) après le commentaire de blocage mais avant des lignes exécutables :
# Ajout local permettant de résoudre les incidents liés à la mémoire partagée AIX :
EXTSHM=ON
export EXTSHM
Remarque : Cette entrée est sensible à la casse. Placez l'entrée dans les profils DB2 de tous les utilisateurs d'instance et de l'utilisateur du serveur administrateur. Ensuite, connectez-vous en tant que chaque utilisateur d'instance et utilisateur de serveur administrateur et exécutez la commande suivante :
db2set DB2ENVLIST=EXTSHM

Ceci permet de définir au sein de chaque instance une variable de profil DB2 qui permet d'inclure la valeur de l'environnement EXTSHM dans l'environnement des processus de démon DB2 lorsqu'ils démarrent. Le fait de définir la valeur EXTSHM dans les profils db2 de chaque instance, exécutés lors de la connexion, permet de faire en sorte que la variable soit définie dans n'importe quel environnement de propriétaire d'instance. Enfin, le fait de la placer dans /etc/rc.db2 permet de faire en sorte que la variable soit définie lorsque les processus DB2 sont démarrés au moment du démarrage. Redémarrez le système pour vous assurer que tous les processus DB2 sont démarrés avec la valeur EXTSHM=ON dans leur environnement.

Si vous souhaitez que cette solution soit automatiquement appliquée aux nouvelles instances qui seront créées ultérieurement, ajoutez les lignes qui permettent de définir et d'exporter la valeur EXTSHM dans le fichier /usr/lpp/db2_08_02/cfg/db2profile, lui-même copié dans <instance_home>/sqllib/db2profile lors de la création de l'instance. Pour faire en sorte que la variable de profil DB2ENVLIST soit également définie, ajoutez ce code une fois que la variable INSTHOME est définie :
if [ -x $INSTHOME/sqllib/adm/db2set ]
then if [ "`$INSTHOME/sqllib/adm/db2set DB2ENVLIST`" != "EXTSHM" ]
then $INSTHOME/sqllib/adm/db2set DB2ENVLIST=EXTSHM
fi
fi
Avec ce code, la variable de profil d'instance DB2ENVLIST est définie la première fois que la nouvelle instance est utilisée.
Remarque :
  • Pour cela, DB2Version 8.0 doit être installé sous /usr/lpp/db2_08_02. Si tel n'est pas le cas, vous devez agir en fonction de l'emplacement de votre installation.
  • Pour DB2 version 8.0, ajoutez les lignes suivantes dans le fichier <instance_home>/sqllib/userprofile, s'il existe ; sinon, créez un fichier de profil utilisateur avec les droits 755. Les lignes sont les suivantes :
    EXTSHM=ON
    export EXTSHM

Copyright IBM Corporation 2005, 2006. All Rights Reserved.