Utilità del database - AWS Modernizzazione del mainframe

AWS Il servizio di modernizzazione del mainframe (esperienza Managed Runtime Environment) non è più aperto a nuovi clienti. Per funzionalità simili a AWS Mainframe Modernization Service (esperienza Managed Runtime Environment), esplora AWS Mainframe Modernization Service (Self-Managed Experience). I clienti esistenti possono continuare a utilizzare il servizio normalmente. Per ulteriori informazioni, consulta AWS Modifica della disponibilità di Mainframe Modernization.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilità del database

Questa sezione riguarda le utilità relative ai database. Sulle piattaforme legacy, questi programmi di solito operano su DB2 database, mentre vengono scelti database alternativi (AWS Aurora è una scelta popolare) su ambienti moderni.

DSNTEP2/DSNTEP4

DSNTEP2/Scopo DSNTEP4

L'utilità DNSTEP esegue query SQL dai set di dati di input e scrive i risultati nei set di dati di output. Riscrive automaticamente le query SQL legacy per database di destinazione modernizzati (oltre DB2) e supporta diversi tipi di set di dati: stream, SYSIN set di dati Blusam, file flat, generazioni GDG e concatenazioni di set di dati.

DSNTEP2/Firma DSNTEP4

L'utilità non accetta argomenti e utilizza due set di dati:

  • SYSIN: set di dati di input contenente istruzioni SQL

  • SYSPRINT: set di dati di output per i risultati delle query (solo SELECT query)

DSNTEP2/parametri di DSNTEP4 configurazione correlati

Il comportamento dell'utilità è influenzato dai seguenti parametri di configurazione:

  • unload.sqlCodePointShift

  • unload.noPad

  • unload.nbi.whenNull

  • unload.nbi.whenNotNull

  • unload.useDatabaseConfiguration

  • unload.format.date

  • unload.format.time

  • unload.format.timestamp

  • hasGraphic

  • forcedDate

  • frozenDate

Proprietà disponibili per applicazioni Web opzionaliPer ulteriori informazioni sulla configurazione di questi parametri, consulta la sezione.

DSNTEP2/DSNTEP4 Controlli/Gestione degli errori

  • Se, per qualsiasi motivo, si verifica un'eccezione durante l'esecuzione della query, verrà registrato un messaggio di errore e StopRunUnitException verrà generato un messaggio che porterà all'arresto dell'unità di esecuzione corrente.

  • Se si SYSIN tratta di una concatenazione di vari set di dati e uno qualsiasi dei set di dati non è supportato, verrà generato un. RuntimeException Attualmente, solo i file flat e i tipi di generazioni GDG sono supportati come parti di un file concatenato, se utilizzati come input con /4. DSNTEP2

DSNTEP2/Esempi di utilizzo DSNTEP4

Ecco un esempio di utilizzo di JCL di: 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;

e lo snippet di script groovy modernizzato corrispondente:

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") }) } } }

Si noti che la query SQL viene fornita «così com'è» all'utilità /4, senza alcuna modifica. DSNTEP2

DSNUTILB

Scopo DSNUTILB

Utilità di database per il caricamento, la copia e la gestione dei dati. Di solito funziona su DB2 database legacy; la versione modernizzata supporta AWS Aurora e altri database di destinazione.

Firma DSNUTILB

Per sua natura, DSNUTILB è destinato piuttosto a essere chiamato da script di lavoro modernizzati.

Non accetta argomenti; legge i comandi dal set di dati. SYSIN

I comandi supportati sono:

  • TEMPLATE(allocazione dinamica dei set di dati)

  • LISTDEF(raggruppa gli oggetti del database in elenchi, utilizzabili con altri comandi)

  • COPY(creare copie degli oggetti del database)

  • LOAD(carica i record nelle tabelle)

  • DISCARD(eliminare i record dalle tabelle)

Per ulteriori dettagli sui comandi, si prega di consultare la relativa documentazione preesistente.

Parametri di configurazione relativi a DSNUTILB

Il comportamento dell'utilità è influenzato dai seguenti parametri di configurazione:

  • unload.useDatabaseConfiguration

  • load.format.localDate

  • load.format.dbDate

  • load.format.localTime

  • load.format.dbTime

  • load.sqlCodePointShift

  • convertGraphicDataToFullWidth

Proprietà disponibili per applicazioni Web opzionaliPer ulteriori informazioni sulla configurazione di questi parametri, consulta la sezione.

Controlli DSNUTILB /Gestione degli errori

  • Se il SYSIN set di dati non contiene alcun comando utilizzabile, verrà generato unRuntimeException.

  • Se si verifica un'eccezione durante le operazioni del database, verrà registrato un messaggio di errore, il codice restituito verrà impostato su 8 e StopRunUnitException verrà generato un (arrestando l'unità di esecuzione corrente).

DSNUTILB Esempi di utilizzo

Ecco un esempio di utilizzo di DSNUTILB in uno script JCL:

//******************************************************************** //* 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

con i comandi card content (dsn01.card) -- usati per caricare i dati nel database, da un file flat esportato dalla piattaforma precedente --:

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) )

e lo snippet di script groovy modernizzato corrispondente:

// 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

Scopo INFUTILB

INFUTILB/INZUTILB sono programmi di utilità utilizzati per estrarre dati dai database -- unload -- (in ambiente legacy) e convertirli DB2 in vari formati di output.

Le query SQL legacy vengono adattate automaticamente on-the-fly per soddisfare i requisiti dei database di destinazione moderni (motori supportati: PostgreSQL, Oracle e). DB2

Firma INFUTILB /INZUTILB

È possibile utilizzare i seguenti alias del programma (che corrispondono al nome delle utilità di ordinamento precedenti corrispondenti):

  • INFUTILB

  • INZUTILB

L'utilità non accetta alcun argomento ma legge i comandi da eseguire dal SYSIN set di dati (una «scheda di controllo»). I record estratti dal database vengono scritti nel set di dati e il SYSREC set di dati opzionale SYSPUNCH viene utilizzato per memorizzare la scheda di controllo che può essere utilizzata per ricaricare i dati (utilizzando altre utilità, ad esempio). DSNUTILB

Per loro natura, INFUTILB/INZUTILB sono destinati principalmente a essere chiamati da script di lavoro modernizzati.

Per ottenere dettagli sui comandi supportati, consulta la documentazione precedente appropriata. INFUTILB/INZUTILB Utilizzano set di dati «schede di controllo» legacy «così come sono».

Parametri di configurazione relativi a INFUTILB /INZUTILB

Il comportamento dell'utilità è influenzato dai seguenti parametri di configurazione:

  • 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

Proprietà disponibili per applicazioni Web opzionaliPer ulteriori informazioni sulla configurazione di questi parametri, consulta la sezione.

INFUTILB//INZUTILB Checks//Gestione degli errori

  • Se il database di destinazione non fa parte dei motori di database supportati (PostgreSQL, Oracle DB2 e), il codice di ritorno del programma verrà impostato su 8 e verrà generato un. UnsupportedOperationException

  • Se il programma non riesce a eliminare i file temporanei, il codice restituito verrà impostato su 4, verrà registrato un messaggio di errore, ma l'esecuzione del programma non verrà interrotta.

  • In tutti i casi seguenti, il codice di ritorno del programma verrà impostato su 4 o 8 e AbendException verrà generato un messaggio (interrompendo l'esecuzione del programma):

    • Se il SYSREC set di dati non è uno dei tipi supportati (GDG o set di dati basato su file system); restituisce il codice 4;

    • Se il SYSPUNCH set di dati non è uno dei tipi supportati (GDG o set di dati basato su file system o); codice di ritorno 4; DUMMY

    • Se il programma non è in grado di recuperare la dimensione del record del SYSREC set di dati (non impostata o non definita nel catalogo dei set di dati); codice di ritorno 8;

    • Se il programma non è in grado di recuperare la dimensione del record del SYSPUNCH set di dati (non impostata o non definita nel catalogo dei set di dati); codice di ritorno 8;

    • Se la query utilizzata per creare il contenuto del SYSREC set di dati non è valida (la query difettosa verrà registrata); codice di ritorno 4;

    • Se si verifica un'eccezione durante il recupero dei dati dal database; codice di ritorno 8;

    • Se il OUTDDN comando non è presente nel SYSIN set di dati, per un servizio di scarico; restituisci il codice 8;

    • Se non è stato possibile trovare alcun comando valido nel SYSIN set di dati; restituisce il codice 8;

INFUTILB//INZUTILB Esempi di utilizzo

Ecco un esempio di frammento di script jcl precedente:

//******************************************************************** //* 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

che utilizza la seguente scheda di comandi (inf12.card) per scaricare alcuni dati dal database (qui, i record vengono selezionati in base alla loro data):

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

e lo snippet di script groovy corrispondente, risultato della modernizzazione automatizzata di jcl:

// 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

Scopo JXHDBCLR

JXHDBCLR è un programma di utilità per la cancellazione di database, disponibile su GS21 piattaforme, che tronca le tabelle in base alle istruzioni specifiche fornite e presenti in una scheda di comando.

Firma JXHDBCLR

Non accetta alcun argomento ma legge le istruzioni dal SYSIN set di dati (la scheda dei comandi).

Per sua natura, è destinato principalmente a essere chiamato da script di lavoro modernizzati.

Parametri di configurazione relativi a JXHDBCLR

Il comportamento dell'utilità è influenzato dai seguenti parametri di configurazione:

  • unload.sqlCodePointShift

  • unload.noPad

  • unload.nbi.whenNull

  • unload.nbi.whenNotNull

  • unload.useDatabaseConfiguration

  • unload.format.date

  • unload.format.time

  • unload.format.timestamp

  • hasGraphic

  • forcedDate

  • frozenDate

Proprietà disponibili per applicazioni Web opzionaliPer ulteriori informazioni sulla configurazione di questi parametri, consulta la sezione.

Controlli JXHDBCLR /Gestione degli errori

Se non viene trovata alcuna tabella da troncare, verrà registrato un messaggio di avviso, ma l'esecuzione del programma non verrà interrotta.

Se si verificano alcuni errori durante il troncamento delle tabelle, il codice di ritorno del programma verrà impostato su 4, i messaggi di errore verranno registrati, ma l'esecuzione del programma non verrà interrotta.

Per una qualsiasi delle seguenti condizioni, il codice di ritorno del programma verrà impostato su 8 e AbendException verrà generato un (interrompendo l'esecuzione del programma):

  • Se il contenuto della scheda comandi è vuoto;

  • se si verifica un'eccezione durante l'analisi o l'elaborazione dei comandi;

Esempi di utilizzo di JXHDBCLR

Un esempio di utilizzo di JXHDBCLR con una scheda di comandi incorporata:

//******************************************************************* //** 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

e lo snippet di script groovy modernizzato corrispondente:

// 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") }) } } }

La scheda incorporata di Legacy viene mantenuta «così com'è», utilizzando uno stream.