Datenbank-Dienstprogramme - AWS Mainframe-Modernisierung

AWS Der Mainframe Modernization Service (Managed Runtime Environment Experience) steht Neukunden nicht mehr zur Verfügung. Funktionen, die dem AWS Mainframe Modernization Service (Managed Runtime Environment-Erfahrung) ähneln, finden Sie unter AWS Mainframe Modernization Service (Self-Managed Experience). Bestandskunden können den Service weiterhin wie gewohnt nutzen. Weitere Informationen finden Sie unter Änderung der Verfügbarkeit von AWS Mainframe Modernization.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Datenbank-Dienstprogramme

In diesem Abschnitt geht es um datenbankbezogene Dienstprogramme. Auf älteren Plattformen arbeiten diese Programme normalerweise auf DB2 Datenbanken, wohingegen in modernen Umgebungen alternative Datenbanken gewählt werden (AWS Aurora ist eine beliebte Wahl).

DSNTEP2/DSNTEP4

DSNTEP2/DSNTEP4 Zweck

Das DNSTEP-Hilfsprogramm führt SQL-Abfragen von Eingabe-Datasets aus und schreibt Ergebnisse in Ausgabe-Datasets. Es schreibt automatisch ältere SQL-Abfragen für modernisierte Zieldatenbanken (darüber hinaus DB2) neu und unterstützt mehrere SYSIN Datensatztypen: Streams, Blusam-Datensätze, Flatfiles, GDG-Generierungen und Datensatzverkettungen.

DSNTEP2DSNTEP4 /Signatur

Das Hilfsprogramm akzeptiert keine Argumente und verwendet zwei Datensätze:

  • SYSIN: Eingabedatensatz, der SQL-Anweisungen enthält

  • SYSPRINT: Ausgabedatensatz für Abfrageergebnisse (nur SELECT Abfragen)

DSNTEP2/DSNTEP4 verwandte Konfigurationsparameter

Das Verhalten des Dienstprogramms wird von den folgenden Konfigurationsparametern beeinflusst:

  • unload.sqlCodePointShift

  • unload.noPad

  • unload.nbi.whenNull

  • unload.nbi.whenNotNull

  • unload.useDatabaseConfiguration

  • unload.format.date

  • unload.format.time

  • unload.format.timestamp

  • hasGraphic

  • forcedDate

  • frozenDate

Einzelheiten Verfügbare Eigenschaften für optionale Webanwendungen zur Konfiguration dieser Parameter finden Sie unter.

DSNTEP2/DSNTEP4 Prüfungen//Behandlung von Fehlern

  • Wenn aus irgendeinem Grund während der Ausführung der Abfrage eine Ausnahme auftritt, wird eine Fehlermeldung protokolliert und eine ausgelöst, was dazu führt, dass die aktuelle Run-Unit angehalten StopRunUnitException wird.

  • Wenn SYSIN es sich um eine Verkettung verschiedener Datensätze handelt und einer der Datensätze nicht unterstützt wird, wird a ausgelöst. RuntimeException Derzeit werden nur Flatfiles und GDG-Generierungen als Teile einer verketteten Datei unterstützt, wenn sie als Eingabe mit /4 verwendet werden. DSNTEP2

DSNTEP2/Anwendungsbeispiele DSNTEP4

Hier ist ein Beispiel für die JCL-Verwendung von: DNSTEP4

//******************************************************************** //* RETRIEVE DATA FROM TABLE AP_JBI7_INVOICE * //******************************************************************** //* //DSNTEP03 EXEC PGM=DSNTEP4,DYNAMNBR=20 //SYSPRINT DD DSN=output(out012.txt), // DISP=SHR,DCB=(RECFM=FB,LRECL=1152) //SYSIN DD * SELECT * FROM BUR000.AP_JBI7_INVOICE WITH UR;

und das passende modernisierte Groovy-Skript-Snippet:

def stepDSNTEP03(Object shell, Map params, Map programResults){ shell.with { if (checkValidProgramResults(programResults)) { return execStep("DSNTEP03", "DSNTEP4", programResults, { mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .fileSystem("SYSPRINT") .path("output(out012.txt)").recordSize(1152) .disposition("SHR") .build() .fileSystem("SYSIN") .stream( """ SELECT * FROM BUR000.AP_JBI7_INVOICE WITH UR; """, getEncoding()) .build() .getFileConfigurations(fcmap)) .withParameters(params) .runProgram("DSNTEP4") }) } } }

Bitte beachten Sie, dass die SQL-Abfrage dem DSNTEP2 /4-Hilfsprogramm „unverändert“ zur Verfügung gestellt wird, ohne dass Änderungen vorgenommen werden.

DSNUTILB

DSNUTILB Zweck

Datenbank-Hilfsprogramm zum Laden, Kopieren und Verwalten von Daten. Funktioniert normalerweise mit älteren DB2 Datenbanken; die modernisierte Version unterstützt AWS Aurora und andere Zieldatenbanken.

DSNUTILB-Signatur

DSNUTILB ist von Natur aus eher dazu gedacht, von modernisierten Jobskripten aufgerufen zu werden.

Nimmt keine Argumente entgegen; liest Befehle aus einem Datensatz. SYSIN

Folgende Befehle werden unterstützt:

  • TEMPLATE(dynamische Zuweisung von Datensätzen)

  • LISTDEF(Datenbankobjekte in Listen gruppieren, die mit anderen Befehlen verwendet werden können)

  • COPY(Kopien von Datenbankobjekten erstellen)

  • LOAD(Datensätze in Tabellen laden)

  • DISCARD(Datensätze aus Tabellen löschen)

Weitere Informationen zu den Befehlen finden Sie in der entsprechenden Dokumentation der älteren Version.

Konfigurationsparameter im Zusammenhang mit DSNUTILB

Das Verhalten des Dienstprogramms wird von den folgenden Konfigurationsparametern beeinflusst:

  • unload.useDatabaseConfiguration

  • load.format.localDate

  • load.format.dbDate

  • load.format.localTime

  • load.format.dbTime

  • load.sqlCodePointShift

  • convertGraphicDataToFullWidth

Einzelheiten Verfügbare Eigenschaften für optionale Webanwendungen zur Konfiguration dieser Parameter finden Sie unter.

DSNUTILB Prüfungen//Fehlerbehandlung

  • Wenn der SYSIN Datensatz keinen verwendbaren Befehl enthält, RuntimeException wird a ausgelöst.

  • Wenn bei Datenbankoperationen eine Ausnahme auftritt, wird eine Fehlermeldung protokolliert, der Rückgabecode wird auf 8 gesetzt und a StopRunUnitException wird ausgelöst (wodurch die aktuelle Ausführungseinheit angehalten wird).

DSNUTILB Anwendungsbeispiele

Hier ist ein Beispiel für die Verwendung von DSNUTILB in einem JCL-Skript:

//******************************************************************** //* LOAD DATA IN TABLE AP_JBI7_INVOICE. * //******************************************************************** //DSN01 EXEC PGM=DSNUTILB,DYNAMNBR=20 //SYSREC DD DSN=input(input021.data), // DISP=SHR // DCB=(RECFM=FB,LRECL=76) //SYSIN DD DSN=input(dsn01.card), // DISP=SHR

mit den Befehlen card content (dsn01.card) -- verwendet, um Daten aus einer von der Legacy-Plattform exportierten Flat-Datei in die Datenbank zu laden --:

LOAD DATA INDDN SYSREC RESUME NO LOG YES NOCOPYPEND SORTDEVT SYSDA SORTNUM 12 SORTKEYS 100000 DISCARDS 0 INTO TABLE BUR000.AP_JB17_INVOICE WHEN (76:76) = 'L' ( IDENTIFIER POSITION(1:1) SMALLINT ,CUST_ID POSITION(10) VARCHAR NULLIF(39) = '?' ,CUST_KD POSITION(40:43) CHAR ,INVC_AMNT POSITION(44:49) NUMERIC ,INVC_DAT POSITION(50:75) TIMESTAMP EXTERNAL(26) )

und das dazu passende groovige, modernisierte Skript-Snippet:

// STEP DSN01 - PGM - DSNUTILB**************************************************** def stepDSN01(Object shell, Map params, Map programResults){ shell.with { if (checkValidProgramResults(programResults)) { return execStep("DSN01", "DSNUTILB", programResults, { mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .fileSystem("SYSREC") .path("input(input021.data)").recordSize(76) .disposition("SHR") .build() .fileSystem("SYSIN") .path("input(dsn01.card)") .disposition("SHR") .build() .getFileConfigurations(fcmap)) .withParameters(params) .runProgram("DSNUTILB") }) } } }

INFUTILB//INZUTILB

INFUTILB Zweck

INFUTILB/INZUTILB sind Hilfsprogramme, die verwendet werden, um Daten aus Datenbanken zu extrahieren (zu entladen) (in älteren Umgebungen) und sie in verschiedene Ausgabeformate DB2 zu konvertieren.

Legacy-SQL-Abfragen werden automatisch on-the-fly an die Anforderungen moderner Zieldatenbanken angepasst (unterstützte Engines: PostgreSQL, Oracle und DB2).

INFUTILB//INZUTILB Signatur

Die folgenden Programmaliase können verwendet werden (und entsprechen dem Namen der entsprechenden Legacy-Sortierprogramme):

  • INFUTILB

  • INZUTILB

Das Hilfsprogramm akzeptiert kein Argument, sondern liest die auszuführenden Befehle aus dem SYSIN Datensatz (einer „Kontrollkarte“). Extrahierte Datensätze aus der Datenbank werden in den SYSREC Datensatz geschrieben und der optionale SYSPUNCH Datensatz wird verwendet, um die Kontrollkarte zu speichern, die zum erneuten Laden von Daten verwendet werden kann (mit anderen Hilfsprogrammen, wie DSNUTILB zum Beispiel).

Sie INFUTILB/INZUTILB sind naturgemäß hauptsächlich dazu gedacht, von modernisierten Jobskripten aufgerufen zu werden.

Einzelheiten zu den unterstützten Befehlen finden Sie in der entsprechenden Legacy-Dokumentation. INFUTILB/INZUTILB Sie verwenden ältere „Kontrollkarten“ -Datensätze „so wie sie sind“.

Konfigurationsparameter im Zusammenhang mit INFUTILB//INZUTILB

Das Verhalten des Dienstprogramms wird von den folgenden Konfigurationsparametern beeinflusst:

  • unload.sqlCodePointShift

  • unload.noPad

  • unload.nbi.whenNull

  • unload.nbi.whenNotNull

  • unload.useDatabaseConfiguration

  • unload.format.date

  • unload.format.time

  • unload.format.timestamp

  • unload.columnFiller

  • unload.varCharIsNull

  • unload.DFSIGDCB

  • hasGraphic

  • forcedDate

  • frozenDate

Einzelheiten Verfügbare Eigenschaften für optionale Webanwendungen zur Konfiguration dieser Parameter finden Sie unter.

INFUTILB//INZUTILB Checks//Fehlerbehandlung

  • Wenn die Zieldatenbank nicht Teil der unterstützten Datenbank-Engines (PostgreSQL, Oracle und DB2) ist, wird der Programmrückgabecode auf 8 gesetzt und ein UnsupportedOperationException ausgelöst.

  • Wenn das Programm temporäre Dateien nicht löschen kann, wird der Rückgabecode auf 4 gesetzt, eine Fehlermeldung wird protokolliert, aber der Programmablauf wird nicht unterbrochen.

  • In allen folgenden Fällen wird der Programmrückgabecode entweder auf 4 oder 8 gesetzt, und es AbendException wird ein Fehler ausgelöst (der Programmlauf wird angehalten):

    • Wenn es sich bei dem SYSREC Datensatz nicht um einen der unterstützten Typen handelt (entweder GDG oder dateisystembasierter Datensatz); Rückgabecode 4;

    • Wenn es sich bei dem SYSPUNCH Datensatz nicht um einen der unterstützten Typen handelt (entweder GDG oder Dateisystem-basierter Datensatz oderDUMMY); Rückgabecode 4;

    • Wenn das Programm die SYSREC Datensatzgröße nicht abrufen kann (nicht festgelegt oder nicht im Datensatzkatalog definiert); Rückgabecode 8;

    • Wenn das Programm die SYSPUNCH Datensatzgröße nicht abrufen kann (nicht festgelegt oder nicht im Datensatzkatalog definiert); Rückgabecode 8;

    • Wenn die Abfrage, mit der der Inhalt des SYSREC Datensatzes erstellt wurde, nicht gültig ist (die fehlerhafte Abfrage wird protokolliert); Rückgabecode 4;

    • Wenn beim Abrufen von Daten aus der Datenbank eine Ausnahme auftritt; Rückgabecode 8;

    • Wenn der OUTDDN Befehl im SYSIN Datensatz fehlt, für einen Entladevorgang; Rückgabecode 8;

    • Wenn kein gültiger Befehl im SYSIN Datensatz gefunden werden konnte; Rückgabecode 8;

INFUTILB//INZUTILB; Anwendungsbeispiele

Hier ist ein Beispiel für einen älteren JCL-Skriptausschnitt:

//******************************************************************** //* UNLOAD DATA FROM TABLE AP_JBI7_INVOICE. * //******************************************************************** //INF1 EXEC PGM=INFUTILB //SYSREC DD DSN=output(out032.data), // DISP=SHR // DCB=(RECFM=FB,LRECL=90) //SYSIN DD DSN=input(inf12.card), // DISP=SHR

das die folgenden Befehle card (inf12.card) verwendet, um einige Daten aus der Datenbank zu entladen (hier werden Datensätze anhand ihres Datums ausgewählt):

UNLOAD SELECT * FROM BUR000.AP_JB17_INVOICE WHERE INVC_DAT >= CONCAT(STRIP(CHAR(YEAR(CURRENT DATE - 100 YEAR))),'-01-01-00.00.00.000000') AND INVC_DAT >= CONCAT('2025-01-01-',CONCAT((CURRENT TIME),'.000000')) AND INVC_DAT >= (CURRENT TIMESTAMP - 100 YEAR) ORDER BY identifier ASC OUTDDN (SYSREC) FORMAT DSNTIAUL

und das dazu passende Groovy-Snippet, das Ergebnis der automatisierten JCL-Modernisierung:

// STEP INF1 - PGM - INFUTILB***************************************************** def stepINF1(Object shell, Map params, Map programResults){ shell.with { if (checkValidProgramResults(programResults)) { return execStep("INF1", "INFUTILB", programResults, { mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .fileSystem("SYSREC") .path("output(out032.data)").recordSize(90) .disposition("SHR") .build() .fileSystem("SYSIN") .path("input(inf12.card)") .disposition("SHR") .build() .getFileConfigurations(fcmap)) .withParameters(params) .runProgram("INFUTILB") }) } } }

JXHDBCLR

JXHDBCLR Zweck

JXHDBCLR ist ein auf GS21 Plattformen vorhandenes Hilfsprogramm zum Löschen von Datenbanken, das Tabellen gemäß den angegebenen spezifischen Anweisungen auf einer Befehlskarte kürzt.

JXHDBCLR-Signatur

Sie akzeptiert kein Argument, sondern liest Anweisungen aus dem SYSIN Datensatz (der Befehlskarte).

Aufgrund seiner Beschaffenheit ist es hauptsächlich dazu gedacht, von modernisierten Jobskripten aufgerufen zu werden.

JXHDBCLR-bezogene Konfigurationsparameter

Das Verhalten des Dienstprogramms wird von den folgenden Konfigurationsparametern beeinflusst:

  • unload.sqlCodePointShift

  • unload.noPad

  • unload.nbi.whenNull

  • unload.nbi.whenNotNull

  • unload.useDatabaseConfiguration

  • unload.format.date

  • unload.format.time

  • unload.format.timestamp

  • hasGraphic

  • forcedDate

  • frozenDate

Einzelheiten Verfügbare Eigenschaften für optionale Webanwendungen zur Konfiguration dieser Parameter finden Sie unter.

JXHDBCLR Prüfungen//Fehlerbehandlung

Wenn keine zu kürzenden Tabellen gefunden werden können, wird eine Warnmeldung protokolliert, aber der Programmablauf wird nicht unterbrochen.

Wenn beim Kürzen von Tabellen Fehler auftreten, wird der Programmrückgabecode auf 4 gesetzt, Fehlermeldungen werden protokolliert, aber der Programmablauf wird nicht unterbrochen.

Bei einer der folgenden Bedingungen wird der Rückgabecode des Programms auf 8 gesetzt und ein AbendException wird ausgelöst (wodurch der Programmablauf angehalten wird):

  • Wenn der Inhalt der Befehlskarte leer ist;

  • wenn bei der Analyse oder Verarbeitung der Befehle eine Ausnahme auftritt;

JXHDBCLR Anwendungsbeispiele

Ein Beispiel für die Verwendung von JXHDBCLR mit einer integrierten Befehlskarte:

//******************************************************************* //** Step 1 - JXHDBCLR UTILITY - DBCLEAR TYPE=2/3 //******************************************************************* //STEP01 EXEC PGM=JXHDBCLR,REGION=256K,PARM='LINECNT=0' //SYSPRINT DD SYSOUT=* //SYSIN DD * DBCLEAR SCHEMA=MUSICSCH,TYPE=3,CHECK=YES DEFINE RANGE=(SINGERDEST) END

und das passende modernisierte Groovy-Skript-Snippet:

// STEP STEP01 - PGM - JXHDBCLR*************************************************** def stepSTEP01(Object shell, Map params, Map programResults){ shell.with { if (checkValidProgramResults(programResults)) { return execStep("STEP01", "JXHDBCLR", programResults, { mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .systemOut("SYSPRINT") .output("*") .build() .fileSystem("SYSIN") .stream( """ DBCLEAR SCHEMA=MUSICSCH,TYPE=3,CHECK=YES DEFINE RANGE=(SINGER) END""", getEncoding()) .build() .getFileConfigurations()) .withArguments(getParm("LINECNT=0")) .withParameters(params) .runProgram("JXHDBCLR") }) } } }

Die eingefügte Karte aus der Legacy-Version wird „so wie sie ist“ beibehalten, indem ein Stream verwendet wird.