Limites du débogage de procédures mémorisées SQL

Dispositions générales

Restrictions sous Linux

Lorsque vous déboguez une procédure mémorisée SQL sur une base de données locale, il est possible que vous receviez l'erreur SQL1224N :

COM.ibm.db2.jdbc.DB2Exception : [IBM][Pilote CLI] SQL1224N Un agent de base de données n'a pas pu être lancé pour répondre à une requête ou a été arrêté par un arrêt du système de bases de données ou une commande forcée. SQLSTATE=55032

Il s'agit d'un problème lié au noyau Linux (bogue Bugzilla #351 du noyau Linux). Les instructions suivantes permettent de résoudre le problème en utilisant la méthode de connexion TCPIP DB2 (en tant que boucle) au lieu de l'interface CLI (Call Level Interface). Cette procédure permet au débogueur d'utiliser le même alias de base de données que précédemment :

  1. Si un port n'a pas été définir pour les clients DB2 distant, connectez vous en tant qu'utilisateur root et créer un port TCP/IP dans /etc/services, (par exemple, db2c_db2inst1 50000/tcp). Vous pouvez également utiliser le Centre de contrôle pour créer le port TCP/IP (en définissant les propriétés de communication pour l'instance de base de données). Vous pouvez utiliser un port pour clients DB2 distants existant.

    Pour effectuer les étapes 2 à 7, vous devez vous connecter en tant que propriétaire de l'instance DB2.

  2. Configurez le gestionnaire de bases de données pour démarrer le gestionnaire de connexions pour le protocole de communication TCP/IP. Si vous ne savez pas si cette opération a déjà été effectuée, utilisez la commande suivante :
    db2set db2comm

    Si la sortie ne contient pas le mot-clé tcpip, vous devez saisir la commande suivante pour mettre à jour la variable de registre db2comm afin qu'elle inclue tcpip :

    db2set db2comm=<noms des protocoles existants>,tcpip

    La variable du registre db2comm détermine quel gestionnaire de connexion de protocole va être activé au démarrage du gestionnaire de bases de données. Vous pouvez définir cette variable pour plusieurs protocoles de communication en séparant les mots-clés par des virgules. Par exemple, db2set db2comm=tcpip,appc.

    Vous devez relancer la commande db2start pour démarrer les gestionnaires de connexion pour les protocoles spécifiés dans le paramètre de registre db2comm. DB2 sera redémarré à l'étape 7 ; il n'est donc pas utile de le faire ici.

    .
  3. Mettez à jour le paramètre de configuration de gestionnaire de bases de données SVCENAME avec le nom du service de connexion défini dans /etc/services (étape 1).

    Pour vérifier le paramétrage actuel de SVCENAME, saisissez la commande suivante :

    db2 get dbm cfg | grep -i svcename

    Si vous devez mettre à jour le paramétrage de SVCENAME, saisissez la commande suivante :

    db2 update dbm cfg using svcename <nom du service de connexion>

    <nom du service de connexion> respecte la casse et doit correspondre au nom du port de service indiqué dans /etc/services (par exemple, db2 update dbm cfg using svcename db2c_db2inst1).

    La mise a jour de la configuration du gestionnaire de bases de données ne sera effective qu'au prochain recours à la prochaine commande db2start. Cette opération est décrite à l'étape 7 ci-après.

  4. Cataloguez le noeud de bouclage en saisissant la commande suivante :
    db2 catalog tcpip node <nom du noeud> remote <nom de l'hôte> server <nom du service de connexion>

    où,

    • <nom du noeud> est l'alias local du noeud à cataloguer. Il s'agit d'un nom arbitraire sur le poste de travail, permettant d'identifier le noeud (par exemple, db2 catalog tcpip node mynode remote 127.0.0.1 server db2c_db2inst1).
    • <nom d'hôte> est le nom de la machine sur laquelle DB2 est installée. Le nom d'hôte spécifié doit être exactement le nom de la machine, en respectant la casse. Si vous n'êtes pas sûr du nom de la machine, consultez le Centre de contrôle.

    Pour vérifier que la commande de catalogue a correctement fonctionné, saisissez la commande suivante :

    db2 list node directory

    Voici un exemple de sortie de cette commande (les lignes vides ont été supprimées pour plus de lisibilité) :

    Node Directory
    Number of entries in the directory = 1
    Node 1 entry:
    Node name = MYNODE
    Comment =
    Protocol = TCPIP
    Hostname = 127.0.0.1
    Service name = db2c_db2inst1
  5. Cataloguez la base de données de la façon suivante. Reportez-vous aux commandes données ci-après pour générer l'exemple de sortie si vous souhaitez voir les effets de chaque commande :
    1. db2 catalog db <nom de la base de données> as <alias de la base de données>
    2. db2 uncatalog db <nom de la base de données>
    3. db2 catalog db <alias de la base de données en tant que <nom de la base de données> au noeud <nom du noeud>
    Par exemple :
    db2 catalog db WAS as WASLOOP
    db2 uncatalog db WAS
    db2 catalog db WASLOOP as WAS at node MYNODE

    Remarques :

    • L'alias de la base de données peut-être n'importe quel nom sauf le nom de la base de données. L'alias doit comporter 8 caractères ou moins.
    • Vous recevez l'erreur SQL1334N si vous n'avez pas correctement catalogué la base de données.
    • Vous devez répéter les étapes 5a à 5c pour chaque base de données sur laquelle vous souhaitez déboguer une procédure mémorisée.

    Exemple de sortie pour les étapes 5a à 5c

    Avant l'étape 5a, une base de données appelée WAS a déjà été créée. La sortie de la commande db2 list db directory est similaire à l'exemple suivant :

    System Database Directory
    Number of entries in the directory = 1
    
    Database 1 entry:
    
    Database alias = WAS
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    Après l'étape 5a, la sortie de db2 list db directory est similaire à l'exemple suivant :

    System Database Directory
    Number of entries in the directory = 2
    
    Database 1 entry:
    
    Database alias = WAS
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0
    
    Database 2 entry:
    
    Database alias = WASLOOP
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    Après l'étape 5b, la sortie de db2 list db directory est similaire à l'exemple suivant :

    System Database Directory
    Number of entries in the directory = 1
    
    Database 1 entry:
    
    Database alias = WASLOOP
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    Après l'étape 5c, la sortie de db2 list db directory est similaire à l'exemple suivant :

    System Database Directory
    Number of entries in the directory = 2
    
    Database 1 entry:
    
    Database alias = WAS
    Database name = WASLOOP
    Node name = MYNODE
    Database release level = 9.00
    Comment =
    Directory entry type = Remote
    Catalog node number = -1
    
    Database 2 entry:
    
    Database alias = WASLOOP
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    Pour vérifier que la commande catalog db a correctement fonctionné, saisissez les deux commandes suivantes (et consultez les deux exemples de sortie suivants) :

    db2 connect to wasloop
    db2 connect to was

    db2 connect to wasloop doit imprimer les informations de connexion et db2 connect to was doit renvoyer SQL1403N.

    Voici un exemple de sortie de db2 connect to wasloop :

    Database Connection Information
    System Database Directory
    
    Database server = DB2/6000 6.1.0
    SQL authorization ID = CTSUI
    Local database alias = WASLOOP

    Voici un exemple de sortie de db2 connect to was :

    Database Connection Information
    System Database Directory
    
    Database server = DB2/6000 6.1.0
    SQL authorization ID = CTSUI
    Local database alias = WAS
  6. Mettez à jour le mécanisme d'autentification en utilisant l'authentification client. Saisissez la commande suivante :
    db2 update dbm cfg using authentication client

    Pour vérifier que la commande a correctement fonctionné, affichez le nouveau paramètre en utilisant la commande suivante :

    db2 get dbm cfg

    Exemple de sortie :

    ....
    Authentification du gestionnaire de bases de données     (AUTHENTICATION) = CLIENT
    ....
  7. Redémarrez DB2 pour actualiser le cache du répertoire. Par exemple,
    db2stop
    db2start

    Remarque : il peut être nécessaire d'utiliser db2stop force pour fermer toutes les connexions de bases de données actives.

  8. Dans le cas de WAS, il n'est pas nécessaire de mettre à jour le fichier admin.config. Dans le cas d'une application WebSphere, il n'est pas nécessaire de modifier la configuration de source de données existante.
  9. Si vous voulez supprimer la base de données, procédez comme suit :
    1. db2 attach to <nom du noeud> user <ID utilisateur> using <mot de passe>
    2. db2 drop db <nom de la base de données>
      par exemple,
      db2 attach to MYNODE user myid using mypasswd
      db2 drop db WAS

Conditions d'utilisation
Commentaires

(C) Copyright IBM Corporation 2006. Tous droit réservés.

(C) Copyright IBM Corporation 2006. All Rights Reserved.


Technologie Eclipse