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 (nurSELECTAbfragen)
DSNTEP2/DSNTEP4 verwandte Konfigurationsparameter
Das Verhalten des Dienstprogramms wird von den folgenden Konfigurationsparametern beeinflusst:
unload.sqlCodePointShiftunload.noPadunload.nbi.whenNullunload.nbi.whenNotNullunload.useDatabaseConfigurationunload.format.dateunload.format.timeunload.format.timestamphasGraphicforcedDatefrozenDate
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
StopRunUnitExceptionwird. -
Wenn
SYSINes sich um eine Verkettung verschiedener Datensätze handelt und einer der Datensätze nicht unterstützt wird, wird a ausgelöst.RuntimeExceptionDerzeit 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.useDatabaseConfigurationload.format.localDateload.format.dbDateload.format.localTimeload.format.dbTimeload.sqlCodePointShiftconvertGraphicDataToFullWidth
Einzelheiten Verfügbare Eigenschaften für optionale Webanwendungen zur Konfiguration dieser Parameter finden Sie unter.
DSNUTILB Prüfungen//Fehlerbehandlung
-
Wenn der
SYSINDatensatz keinen verwendbaren Befehl enthält,RuntimeExceptionwird a ausgelöst. -
Wenn bei Datenbankoperationen eine Ausnahme auftritt, wird eine Fehlermeldung protokolliert, der Rückgabecode wird auf 8 gesetzt und a
StopRunUnitExceptionwird 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):
INFUTILBINZUTILB
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.sqlCodePointShiftunload.noPadunload.nbi.whenNullunload.nbi.whenNotNullunload.useDatabaseConfigurationunload.format.dateunload.format.timeunload.format.timestampunload.columnFillerunload.varCharIsNullunload.DFSIGDCBhasGraphicforcedDatefrozenDate
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
UnsupportedOperationExceptionausgelö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
AbendExceptionwird ein Fehler ausgelöst (der Programmlauf wird angehalten):Wenn es sich bei dem
SYSRECDatensatz nicht um einen der unterstützten Typen handelt (entweder GDG oder dateisystembasierter Datensatz); Rückgabecode 4;Wenn es sich bei dem
SYSPUNCHDatensatz nicht um einen der unterstützten Typen handelt (entweder GDG oder Dateisystem-basierter Datensatz oderDUMMY); Rückgabecode 4;Wenn das Programm die
SYSRECDatensatzgröße nicht abrufen kann (nicht festgelegt oder nicht im Datensatzkatalog definiert); Rückgabecode 8;Wenn das Programm die
SYSPUNCHDatensatzgröße nicht abrufen kann (nicht festgelegt oder nicht im Datensatzkatalog definiert); Rückgabecode 8;Wenn die Abfrage, mit der der Inhalt des
SYSRECDatensatzes 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
OUTDDNBefehl imSYSINDatensatz fehlt, für einen Entladevorgang; Rückgabecode 8;Wenn kein gültiger Befehl im
SYSINDatensatz 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.sqlCodePointShiftunload.noPadunload.nbi.whenNullunload.nbi.whenNotNullunload.useDatabaseConfigurationunload.format.dateunload.format.timeunload.format.timestamphasGraphicforcedDatefrozenDate
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.