Lorsque vous déboguez une procédure mémorisée sur une base de données locale, il est possible que l'erreur SQL1224N s'affiche :
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] SQL1224N Un agent de base de données n'a pas pu être démarré pour satisfaire une demande ou a été interrompu à la suite d'un arrêt normal du système ou d'une commande FORCE. SQLSTATE=55032
Cette erreur est due à un incident qui survient dans le noyau Linux (incident Bugzilla lié au noyau Linux n°351). Les instructions suivantes permettent d'appliquer une solution palliative qui utilise la méthode de connexion TCPIP de DB2 (comme bouclage) au lieu de l'interface CLI (Call Level Interface). Dans cette procédure, le débogueur utilise le même alias de base de données que précédemment :
Les étapes 2 à 7 requièrent que vous vous connectiez en tant que propriétaire de l'instance DB2.
db2set db2comm
Si la sortie ne contient pas le mot clé tcpip, vous devez entrer la commande suivante pour mettre à jour la variable de registre db2comm afin d'inclure tcpip :
db2set db2comm=<noms des protocoles existants>,tcpip
La variable de registre db2comm détermine quel gestionnaire de connexions de protocole est activé lorsque le gestionnaire de la base de données est démarré. Vous pouvez définir cette variable pour plusieurs protocoles de communication en séparant les mots clés par une virgule.
Vous devez émettre à nouveau la commande db2start afin de démarrer les gestionnaires de connexions pour les protocoles spécifiés par le paramètre de registre db2comm. Vous allez redémarrer DB2 à l'étape 7 ; il n'est donc pas nécessaire d'effectuer cette opération maintenant.
.Pour consulter la valeur actuelle de SVCENAME, entrez la commande suivante :
db2 get dbm cfg | grep -i svcename
Si vous devez mettre à jour la valeur de SVCENAME, entrez la commande suivante :
db2 update dbm cfg using svcename <nom du service de connexion>
où la distinction minuscules/majuscules est appliquée au <nom du service de connexion> et où cette valeur correspond au nom du port du service que vous avez placé dans /etc/services (par exemple db2 update dbm cfg using svcename db2c_db2inst1).
La mise à jour de la configuration du gestionnaire de la base de données n'est pas appliquée tant qu'une nouvelle commande db2start n'a pas été émise. Vous effectuerez cette opération à l'étape 7.
db2 catalog tcpip node <nom_noeud> remote <nom_hôte> server <nom du service de connexion>
où
Pour vérifier que la commande catalog a abouti, émettez la commande suivante :
db2 list node directory
Exemple de sortie de cette commande (les lignes vierges ont été supprimées pour une meilleure lisibilité) :
Répertoire des noeuds Nombre d'entrées dans le répertoire = 1 Entrée du noeud 1 : Nom du noeud = MYNODE Commentaire = Protocole = TCPIP Nom d'hôte = 127.0.0.1 Nom de service = db2c_db2inst1
Exemple :db2 catalog db WAS as WASLOOP db2 uncatalog db WAS db2 catalog db WASLOOP as WAS at node MYNODE
Remarques :
Sortie exemple pour les étapes 5a à 5c
Une base de données locale appelée WAS a été créée avant l'étape 5a. La sortie de la commande db2 list db directory est similaire au message suivant :
Répertoire système des bases de données Nombre d'entrées dans le répertoire = 1 Entrée de la base de données 1 : Alias de la base de données = WAS Nom de la base de données = WAS Répertoire des bases de données locales = /home/ctsui Niveau d'édition de la base de données = 9.00 Commentaire = Type d'entrée du répertoire = Indirect Numéro de noeud catalogue = 0
Après l'étape 5a, la sortie de la commande db2 list db directory est similaire au message suivant :
Répertoire système des bases de données Nombre d'entrées dans le répertoire = 2 Entrée de la base de données 1 : Alias de la base de données = WAS Nom de la base de données = WAS Répertoire des bases de données locales = /home/ctsui Niveau d'édition de la base de données = 9.00 Commentaire = Type d'entrée du répertoire = Indirect Numéro de noeud catalogue = 0 Entrée de la base de données 2 : Alias de la base de données = WASLOOP Nom de la base de données = WAS Répertoire des bases de données locales = /home/ctsui Niveau d'édition de la base de données = 9.00 Commentaire = Type d'entrée du répertoire = Indirect Numéro de noeud catalogue = 0
Après l'étape 5b, la sortie de la commande db2 list db directory est similaire au message suivant :
Répertoire système des bases de données Nombre d'entrées dans le répertoire = 1 Entrée de la base de données 1 : Alias de la base de données = WASLOOP Nom de la base de données = WAS Répertoire des bases de données locales = /home/ctsui Niveau d'édition de la base de données = 9.00 Commentaire = Type d'entrée du répertoire = Indirect Numéro de noeud catalogue = 0
Après l'étape 5c, la sortie de la commande db2 list db directory est similaire au message suivant :
Répertoire système des bases de données Nombre d'entrées dans le répertoire = 2 Entrée de la base de données 1 : Alias de la base de données = WAS Nom de la base de données = WASLOOP Nom du noeud = MYNODE Niveau d'édition de la base de données = 9.00 Commentaire = Type d'entrée du répertoire = Remote Numéro de noeud catalogue = -1 Entrée de la base de données 2 : Alias de la base de données = WASLOOP Nom de la base de données = WAS Répertoire des bases de données locales = /home/ctsui Niveau d'édition de la base de données = 9.00 Commentaire = Type d'entrée du répertoire = Indirect Numéro de noeud catalogue = 0
Pour vérifier que la commande catalog db a abouti, émettez les deux commandes suivantes (et consultez la sortie exemple ci-dessous) :
db2 connect to wasloop db2 connect to was
où db2 connect to wasloop émet une sortie des informations de connexion et db2 connect to was génère le message SQL1403N.
Sortie exemple de db2 connect to wasloop :
Informations de connexion à la base de données Répertoire système des bases de données Serveur de base de données = DB2/6000 6.1.0 ID utilisateur SQL = CTSUI Alias local de la base de données = WASLOOP
Sortie exemple de db2 connect to was:
Informations de connexion à la base de données Répertoire système des bases de données Serveur de base de données = DB2/6000 6.1.0 ID utilisateur SQL = CTSUI Alias local de la base de données = WAS
db2 update dbm cfg using authentication client
Pour vérifier que la commande a abouti, affichez le nouveau paramètre avec la commande suivante :
db2 get dbm cfg
Sortie exemple :
.... Authentification du gestionnaire de BDD (AUTHENTICATION) = CLIENT ....
db2stop db2start
Remarque : il se peut que vous deviez utiliser db2stop force pour fermer toutes les connexions de base de données actives.
Exemple :db2 attach to MYNODE user myid using mypasswd db2 drop db WAS