Tracing von dynamischen SQL-Statements

Natural for Db2 bietet die Möglichkeit, die Abläufe aller dynamisch ausgeführten SQL-Statements innerhalb einer Maschine (LPAR) zu verfolgen. Mit der Trace-Funktion können Sie das Natural-Programm ermitteln, von dem die dynamische SQL-Anfrage ausgeht.


Arbeitsweise des Tracing

Wenn das Tracing mit dem Schlüsselwort-Subparameter DYSQLTR aktiviert ist, werden alle dynamisch ausgeführten SQL-Statements in einem Shared-Memory-Objekt oberhalb der Grenze aufgezeichnet. Der Name dieses Shared-Memory-Objekts wird mit dem Schlüsselwort-Subparameter DSTNAME im Parameter-Makro NTDB2 angegeben. Die erste Natural for Db2-Sitzung in einer LPAR legt das Shared-Memory-Objekt an und verbindet ihren Adressraum oder ihre Region mit dem Shared-Memory-Objekt. Die nachfolgenden Natural for Db2-Sitzungen mit denselben DSTNAME- und DYSQLTR-Parametereinstellungen in einer LPAR werden ebenfalls an das Shared-Memory-Objekt angehängt, wenn der Adressraum nicht bereits an das Shared-Memory-Objekt angehängt ist.

Für jedes dynamisch ausgeführte SQL-Statement schreibt die Natural for Db2-Sitzung einen Trace-Eintrag in den Puffer, bevor sie Db2 aufruft, und einen Trace-Eintrag nach der Rückkehr von Db2.

Jeder Trace-Eintrag enthält die folgenden Daten:

Datum und Uhrzeit.
Natural-Bibliothek, Programmname und Zeilennummer.
Benutzername, Terminalname, Jobname und Jobnummer.
den Db2 DBRM-Namen (NDBIOxxx), die Db2-Abschnittsnummer, die Statement-Nummer und den Statement-Typ (OPEN, FETCH, CLOSE usw.).
Die Db2 SQLCODE-Rückgabeinformationen.

Sie können das dynamische SQL-Tracing starten und beenden und die Trace-Daten im Shared-Memory-Objekt mit dem Natural-Subprogramm NDBDST00 abrufen. Wenn der Trace-Puffer bis zum oberen Ende gefüllt ist, wird das Tracing durch Überschreiben des Inhalts am unteren Ende des Puffers fortgesetzt.

Tracing für dynamische SQL-Statements aktivieren

Standardmäßig nimmt die Natural for Db2-Sitzung nicht am dynamischen SQL-Tracing teil. Um das dynamische SQL-Tracing für eine Natural for Db2-Sitzung zu aktivieren, müssen Sie den Schlüsselwort-Subparameter DYSQLTR=ON im NTDB2-Makro im Natural-Parametermodul setzen. Außerdem müssen Sie mit dem Schlüsselwort-Subparameter DSTNAME einen Namen für das Shared-Memory-Objekt angeben, in dem alle dynamisch ausgeführten SQL-Statements aufgezeichnet werden sollen. Der Standardname ist NDBRDC01. Einzelheiten zur Syntax des NTDB2-Makros finden Sie unter DB2 - Parameter für SQL-Datenbankmanagementsystem-Schnittstellen in der Parameter-Referenz-Dokumentation.

Nachdem das Tracing aktiviert wurde, verbindet sich die Natural for Db2-Sitzung mit dem Shared-Memory-Objekt. Wenn dieses Shared-Memory-Objekt noch nicht existiert, erstellt die Natural for Db2-Sitzung das in DSTNAME angegebene Shared-Memory-Objekt und bindet die Natural-Sitzung daran an. Zu diesem Zweck ruft die Sitzung den Authorized Services Manager (ASM) auf, der mit der SUBSID des Natural-Subsystems verbunden ist. Die Sitzung sucht in den FSSMDSTx-Karten des ASM nach dem Namen und der Größe des Shared Memory-Objekts. Deshalb müssen Sie die Größe des Shared-Memory-Objekts und die Art des Tracing in der Parameterdatei ASMPARM festlegen. Innerhalb dieser Parameterdatei geben Sie den Parameter FSSMDSTx wie folgt an:

FSSMDSTx=(name,n,tracetype,[T])
  • FSSMDSTx zeigt an, dass es sich um eine Parameterkarte für den Trace-Puffer des Shared-Memory-Objekts handelt. x ist frei wählbar.

  • name gibt den Namen des gemeinsamen Speicherobjekts an.

  • n bezeichnet die Größe des gemeinsam genutzten Speicherobjekts in Megabytes.

  • tracetype bestimmt, welche Trace-Sätze in den Trace-Puffer geschrieben werden. Mögliche Werte:

    S - Trace-Sätze vor und nach einem Db2-Aufruf schreiben.

    B - Trace-Sätze vor einem Db2-Aufruf schreiben.

    A - Trace-Sätze nach einem Db2-Aufruf schreiben.

    T - keine Trace-Sätze schreiben.

  • T ist ein optionales Attribut, das anfordert, dass die Create- und Attach-Anforderungen im Job-Log protokolliert werden.

Das folgende Beispiel definiert ein Shared-Memory-Objekt namens NDBDST01 mit einer Größe von 10 MB und Tracing vor und nach einem Db2-Aufruf:

SUBSID=NDB1
MSGCASE=M
FSSMDST1=(NDBDST01,10,S)

Nachdem Sie das Tracing eingerichtet haben, können Sie die verfügbaren Natural-Objekte verwenden, um das Tracing zu starten, Tracing-Daten abzurufen und das Tracing zu beenden.

Dynamische SQL-Statements tracen

Natural bietet die folgenden Objekte, mit denen Sie das Tracing starten, Tracing-Daten abrufen und das Tracing beenden können:

Diese Programme arbeiten mit dem Shared-Memory-Puffer, der mit dem Schlüsselwort-Subparameter DSTNAME im Makro NTDB2 im Modul NATPARM oder mit dem Schlüsselwort-Subparameter des DB2-Profilparameters DB2=(DSTANAM=) angegeben wird. Um diese Programme zu verwenden, müssen Sie auch den Schlüsselwort-Subparameter DYSQLTR=ON angeben.

NDBDST00 - Tracing starten, Datensätze abrufen, Tracing beenden

Das Natural-Subprogramm NDBDST00 startet das dynamische SQL-Tracing, ruft die dynamischen SQL-Trace-Daten ab und beendet das Tracing. Verwenden Sie die folgende Syntax im aufrufenden Natural-Programm:

CALLNAT 'NDBDST00' #FUNCTION #RETCODE #KTXT #GDATA #LDATA #TRACESTATE

Die Syntax dieses Programms enthält die folgenden Parameter:

Parameter Format/Länge Beschreibung
#FUNCTION A1

Funktionscode für die Eingabe.

Mögliche Werte:

A - Startet den Trace nachdem Db2-Aufruf-Trace-Einträge geschrieben wurden.
B - Startet den Trace bevor Db2-Call-Trace-Einträge geschrieben werden.
F - Ruft den ersten/ältesten Trace-Eintrag ab.
L - Ruft den letzten/neuesten Trace-Eintrag ab.
N - Ruft den nächsten/neueren Trace-Eintrag ab.
P - Ruft den vorherigen/älteren Trace-Eintrag ab.
R - Setzt den Trace-Puffer zurück. Der dynamische SQL-Trace-Puffer wird so behandelt, als würde er zum ersten Mal initialisiert.
S - Startet das Tracing.
T - Beendet das Tracing.

#RETCODE I4

Rückgabecode.

Mögliche Werte:

0 - In Ordnung.
4 - Ende der Daten. Es sind keine weiteren Trace-Einträge vorhanden.
8 - Unzureichende Anzahl von Parametern.
12 - Unbekannter Funktionscode.
16 - Sitzung nicht an Shared-Memory-Objekt angebunden.
20 - Sitzung nicht an Shared-Memory-Objekt angebunden.

#KTXT B48

Bei Aufrufen verwendeter Kontext. Der Aufrufer darf diesen Parameter nicht ändern.

#GDATA A252

Enthält dynamische SQL-Trace-Daten mit Bezug auf das Natural-Programm, das Db2 aufruft.

Siehe NDBDST-L.

#LDATA A252

Enthält dynamische SQL-Trace-Daten über den Zugriff auf Db2.

Siehe NDBDST-L.

#TRACESTATE A1

Der aktuelle Status des dynamischen SQL-Trace.

Mögliche Werte:

A - Trace ist nur aktiv, nachdem Db2-Aufrufe geschrieben wurden.
B - Trace ist nur aktiv, bevor Db2-Aufrufeinträge geschrieben werden.
S - Trace ist aktiv, bevor und nachdem Db2-Aufrufeinträge geschrieben werden.
Blank - Trace ist inaktiv, es werden keine DB2-Aufrufeinträge geschrieben.

NDBDST_L - Beschreibung der abgerufenen dynamischen SQL- Trace-Daten

Der lokale Datenbereich NDBDSTPF enthält die Beschreibung der abgerufenen dynamischen SQL-Trace-Daten. Er ist in zwei Gruppen unterteilt: GDATA und LDATA. GDATA umfasst die Daten im Zusammenhang mit dem Natural-Programm, das Db2 aufruft, und LDATA umfasst die Daten im Zusammenhang mit dem Zugriff auf Db2.

GDATA
Name Format/Länge Beschreibung
GBASP A8 Basisproduktkennung (NATURAL)
GVER A4 Version der Basisproduktkennung (9202)
GOPS A8 Name des Betriebssystems (MVS/ESA)
GTPM A8 TP-Monitor-Name (CICS, IMS/DC)
GTERM A8 TP-Terminalkennung
GIUID A8 Benutzerkennung zu Beginn
GCUID A8 Aktuelle Benutzerkennung
GCAPL A8 Aktuelle LOGON-Library
GGRP A8 Aktuelle LOGON-Gruppenkennung
GPGM A8 Aktuelles Programm
GLINE N4 Aktuelle Statement-Nummer
GLEV I1 Aktuelle Programmebene
LDATA
Name Format/Länge Beschreibung
TDB2FUNC A4 BDb2 vor Db2, ADb2 nach Db2 Aufruf
TDB2TIST B8 Lokale Store Clock-Zeit
TDB2DBRM A8 DBRM-Name (UTF-8)
TDB2CONT B8 Db2 Consistency Token
TDB2SQLC I4 SQLCODE
TDB2STYPE I2 Db2-Statement-Typ
TDB2SECT I2 Db2-Abschnittsnummer
TDB2STNR I4 Db2-Statement-Nummer
TDB2JNAM A8 Jobname des Anfragenden
TDB2JNO A8 Jobnummer des Anfragenden
TDB2HOLD A2 Cursor WITH HOLD (NO, HO)
TDB2SCRL A2 SCROLL Type (NO, AS, IN, SD, SS)
TDB2RETU A2 Cursor WITH RETURN (NO, RT)
TDB2ROWP A2 Cursor WITH ROWSET-Verarbeitung (NO, RP)
TDB2FECO A2 FETCH-Fortsetzungstyp (NO, CC, CO)
TDB2MFC I2 Multi Fetch-Zähler
TDB2MODE A1 Dynamic (D)

NDBDSTPA - Schreiben von Trace-Sätzen nach einem Db2-Aufruf

Das Subprogramm NDBDSTPA Natural startet das Schreiben von Trace-Sätzen für eine Natural for Db2-Sitzung erst nach einem Db2-Aufrufeintrag.

NDBDSTPB - Schreiben von Trace-Sätzen vor einem Db2-Aufruf

Das Subprogramm NDBDSTPB Natural startet das Schreiben von Trace-Sätzen für eine Natural for Db2-Sitzung erst vor einem Db2-Aufrufeintrag.

NDBDSTPF - Lesen von Trace-Einträgen vom Ältesten zum Neuesten

Das Beispielprogramm NDBDSTPF zeigt den sequenziellen Abruf von Trace-Einträgen, beginnend mit dem ältesten Trace-Eintrag und endend mit dem neuesten Trace-Eintrag.

Sie können dieses Programm als Vorlage verwenden, um Ihre eigenen Trace-Abfrageprogramme zu erstellen und die Ausgabe an Ihre Bedürfnisse anzupassen.

NDBDSTPL - Lesen von Trace-Einträgen vom Neuesten zum Ältesten

Das Beispielprogramm NDBDSTPL zeigt den sequenziellen Abruf von Trace-Einträgen, beginnend mit dem neuesten Trace-Eintrag und endend mit dem ältesten Trace-Eintrag.

Sie können dieses Programm als Vorlage verwenden, um Ihre eigenen Trace-Abfrageprogramme zu erstellen und die Ausgabe an Ihre Bedürfnisse anzupassen.

NDBDSTPR - Zurücksetzen des Trace-Puffers

Das Natural-Subprogramm NDBDSTPR setzt den dynamischen SQL-Trace-Puffer auf seinen Ausgangszustand zurück. Alle Trace-Einträge gehen dabei verloren.

NDBDSTPS - Tracing neu starten

Das Natural-Subprogramm NDBDSTPS startet das Schreiben von Trace-Sätzen für eine Natural for Db2-Sitzung sowohl vor als auch nach einem Db2-Aufrufeintrag.

NDBDSTPT - Tracing beenden

Das Natural-Subprogramm NDBDSTPT zeigt die Beendigung des Trace.