Zum Vermeiden dieses Problems sollten Sie die Datenbank importieren, bevor Sie das Debug für eine gespeicherte Prozedur durchführen.
Wenn Sie das Debug einer gespeicherten SQL-Prozedur für eine lokale Datenbank durchführen, erhalten Sie möglicherweise die Fehlernummer SQL1224N:
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] SQL1224N Ein Datenbankagent konnte nicht für die Anforderung gestartet werden, oder er wurde auf Grund eines Systemabschlusses der Datenbank bzw. durch den Befehl FORCE beendet. SQLSTATE-Wert=55032
Dieser Fehler wird vom Linux-Kernel (Linux Kernel Bugzilla Bug #351) verursacht. Die folgenden Anweisungen dienen als Fehlerumgehung, bei der die DB2-Verbindungsaufbaumethode TCPIP (als Rückschleife) statt CLI (Call Level Interface) verwendet wird. Diese Vorgehensweise ermöglicht dem Debugger, denselben Aliasnamen der Datenbank zu verwenden wie zuvor:
Für die unten aufgeführten Schritte 2 bis 7 müssen Sie sich als DB2-Instanzeigner anmelden.
db2set db2comm
Wenn die Ausgabe nicht das Schlüsselwort tcpip enthält, müssen Sie den folgenden Befehl eingeben, um die Registrierdatenbankvariable db2comm wie folgt mit der Angabe tcpip zu aktualisieren:
db2set db2comm=<vorhandene_protokollnamen>,tcpip
Die Registrierdatenbankvariable db2comm bestimmt das Protokoll, dessen Verbindungsmanager beim Start des Datenbankmanagers aktiviert wird. Sie können diese Variable für mehrere Kommunikationsprotokolle setzen, indem Sie die Schlüsselwörter mit Kommas trennen, wie z. B. db2set db2comm=tcpip,appc.
Sie müssen den Befehl db2start erneut absetzen, damit die Verbindungsmanager für die vom Registrierungsparameter db2comm angegebenen Protokolle gestartet werden. Da Sie DB2 in Schritt 7 starten, müssen Sie dies jetzt nicht tun.
.Geben Sie den folgenden Befehl ein, um die aktuelle Einstellung des Parameters SVCENAME zu überprüfen:
db2 get dbm cfg | grep -i svcename
Wenn Sie die Einstellung des Parameters SVCENAME aktualisieren müssen, können Sie den folgenden Befehl eingeben:
db2 update dbm cfg using svcename <verbindungsservicename>
Dabei muss bei <verbindungsservicename> die Groß-/Kleinschreibung beachtet werden, und der Name muss mit dem Namen des Service-Ports übereinstimmen, den Sie in /etc/services gestellt haben (z. B. db2 update dbm cfg using svcename db2c_db2inst1).
Die Aktualisierung der Datenbankmanagerkonfiguration wird erst wirksam, wenn der Befehl db2start das nächste Mal abgesetzt wird. Dies werden Sie weiter unten in Schritt 7 durchführen.
db2 catalog tcpip node <knotenname> remote <hostname> server <verbindungsservicename>
Dabei gilt Folgendes:
Setzen Sie den folgenden Befehl ab, um zu überprüfen, ob der Katalogisierungsbefehl ordnungsgemäß ausgeführt wurde:
db2 list node directory
Beispielausgabe dieses Befehls, in der zur besseren Lesbarkeit Leerzeilen entfernt wurden:
Knotenverzeichnis Anzahl Einträge im Verzeichnis = 1 Eintrag für Knoten 1: Knotenname = MYNODE Kommentar = Protokoll = TCPIP Hostname = 127.0.0.1 Servicename = db2c_db2inst1
Beispiel:db2 catalog db WAS as WASLOOP db2 uncatalog db WAS db2 catalog db WASLOOP as WAS at node MYNODE
Anmerkungen:
Beispielausgabe für die Schritte 5a bis 5c
Vor Schritt 5a war bereits eine lokale Datenbank mit dem Namen WAS erstellt worden. Der Befehl db2 list db directory ergibt etwa die folgende Ausgabe:
Systemdatenbankverzeichnis Anzahl Einträge im Verzeichnis = 1 Eintrag für Datenbank 1: Aliasname der Datenbank = WAS Datenbankname = WAS Lokales Datenbankverzeichnis = /home/ctsui Releasestand der Datenbank = 9.00 Kommentar = Verzeichniseintragungstyp = Indirekt Katalogknotenummer = 0
Nach Schritt 5a ergibt db2 list db directory etwa die folgende Ausgabe:
Systemdatenbankverzeichnis Anzahl Einträge im Verzeichnis = 2 Eintrag für Datenbank 1: Aliasname der Datenbank = WAS Datenbankname = WAS Lokales Datenbankverzeichnis = /home/ctsui Releasestand der Datenbank = 9.00 Kommentar = Verzeichniseintragungstyp = Indirekt Katalogknotenummer = 0 Eintrag für Datenbank 2: Aliasname der Datenbank = WASLOOP Datenbankname = WAS Lokales Datenbankverzeichnis = /home/ctsui Releasestand der Datenbank = 9.00 Kommentar = Verzeichniseintragungstyp = Indirekt Katalogknotenummer = 0
Nach Schritt 5b ergibt db2 list db directory etwa die folgende Ausgabe:
Systemdatenbankverzeichnis Anzahl Einträge im Verzeichnis = 1 Eintrag für Datenbank 1: Aliasname der Datenbank = WASLOOP Datenbankname = WAS Lokales Datenbankverzeichnis = /home/ctsui Releasestand der Datenbank = 9.00 Kommentar = Verzeichniseintragungstyp = Indirekt Katalogknotenummer = 0
Nach Schritt 5c ergibt db2 list db directory etwa die folgende Ausgabe:
Systemdatenbankverzeichnis Anzahl Einträge im Verzeichnis = 2 Eintrag für Datenbank 1: Aliasname der Datenbank = WAS Datenbankname = WASLOOP Knotenname = MYNODE Releasestand der Datenbank = 9.00 Kommentar = Verzeichniseintragungstyp = Fern Katalogknotenummer = -1 Eintrag für Datenbank 2: Aliasname der Datenbank = WASLOOP Datenbankname = WAS Lokales Datenbankverzeichnis = /home/ctsui Releasestand der Datenbank = 9.00 Kommentar = Verzeichniseintragungstyp = Indirekt Katalogknotenummer = 0
Setzen Sie die folgenden zwei Befehle ab, um zu überprüfen, ob der Befehl catalog db ordnungsgemäß ausgeführt wurde (siehe auch Beispielausgabe unten):
db2 connect to wasloop db2 connect to was
Dabei sollte db2 connect to wasloop die Verbindungsinformationen ausgeben und db2 connect to was den Fehler SQL1403N ergeben.
Beispielausgabe von db2 connect to wasloop:
Datenbankverbindungsinformationen Systemdatenbankverzeichnis Datenbankserver = DB2/6000 6.1.0 SQL-Berechtigungs-ID = CTSUI Aliasname der lokalen Datenbank = WASLOOP
Beispielausgabe von db2 connect to was:
Datenbankverbindungsinformationen Systemdatenbankverzeichnis Datenbankserver = DB2/6000 6.1.0 SQL-Berechtigungs-ID = CTSUI Aliasname der lokalen Datenbank = WAS
db2 update dbm cfg using authentication client
Zeigen Sie die neue Einstellung mit dem folgenden Befehl an, um zu überprüfen, ob der Befehl ordnungsgemäß ausgeführt wurde:
db2 get dbm cfg
Beispielausgabe:
.... Datenbankmanagerauthentifizierung (AUTHENTICATION) = CLIENT ....
db2stop db2start
Anmerkung: Sie müssen möglicherweise den Befehl db2stop force verwenden, um alle aktiven Datenbankverbindungen zu schließen.
Beispiel:db2 attach to KNOTEN user ottomueller using kennwort db2 drop db WAS