utilitaires de base de données - AWS Modernisation du mainframe

AWS Le service de modernisation du mainframe (expérience de l'environnement d'exécution géré) n'est plus ouvert aux nouveaux clients. Pour des fonctionnalités similaires au service de modernisation AWS du mainframe (expérience de l'environnement d'exécution géré), explorez le service de modernisation AWS du mainframe (expérience autogérée). Les clients existants peuvent continuer à utiliser le service normalement. Pour plus d'informations, consultez la section Modification de la disponibilité de la modernisation du AWS mainframe.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

utilitaires de base de données

Cette section concerne les utilitaires liés aux bases de données. Sur les plateformes existantes, ces programmes fonctionnent généralement sur des DB2 bases de données, tandis que des bases de données alternatives sont choisies (AWS Aurora étant un choix populaire) dans les environnements modernes.

DSNTEP2/DSNTEP4

DSNTEP2/DSNTEP4 Objectif

L'utilitaire DNSTEP exécute des requêtes SQL à partir de jeux de données en entrée et écrit les résultats dans des ensembles de données en sortie. Il réécrit automatiquement les requêtes SQL existantes pour les bases de données cibles modernisées (au-delà DB2) et prend en charge plusieurs types de jeux de SYSIN données : flux, ensembles de données Blusam, fichiers plats, générations GDG et concaténations d'ensembles de données.

DSNTEP2/DSNTEP4 Signature

L'utilitaire ne prend aucun argument et utilise deux ensembles de données :

  • SYSIN: jeu de données en entrée contenant des instructions SQL

  • SYSPRINT: jeu de données en sortie pour les résultats des SELECT requêtes (requêtes uniquement)

DSNTEP2/paramètres de configuration DSNTEP4 associés

Le comportement de l'utilitaire est influencé par les paramètres de configuration suivants :

  • unload.sqlCodePointShift

  • unload.noPad

  • unload.nbi.whenNull

  • unload.nbi.whenNotNull

  • unload.useDatabaseConfiguration

  • unload.format.date

  • unload.format.time

  • unload.format.timestamp

  • hasGraphic

  • forcedDate

  • frozenDate

Consultez Propriétés disponibles pour les applications Web facultatives pour plus de détails sur la configuration de ces paramètres.

DSNTEP2/DSNTEP4 Contrôles/Gestion des erreurs

  • Si, pour une raison quelconque, une exception se produit pendant l'exécution de la requête, un message d'erreur sera enregistré et un message StopRunUnitException sera émis, ce qui entraînera l'arrêt de l'unité en cours d'exécution.

  • S'il s'SYSINagit d'une concaténation de différents ensembles de données et que l'un de ces ensembles de données n'est pas pris en charge, un sera émis. RuntimeException Actuellement, seuls les fichiers plats et les types de génération GDG sont pris en charge en tant que parties d'un fichier concaténé, lorsqu'ils sont utilisés en entrée avec /4. DSNTEP2

DSNTEP2/DSNTEP4 Exemples d'utilisations

Voici un exemple d'utilisation JCL de 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;

et l'extrait de script groovy modernisé correspondant :

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

Notez que la requête SQL est fournie « telle quelle » à l'utilitaire DSNTEP2 /4, sans aucune modification.

DSNUTILB

Objectif du DSNUTILB

Utilitaire de base de données pour le chargement, la copie et la gestion des données. Fonctionne généralement sur des DB2 bases de données existantes ; la version modernisée prend en charge AWS Aurora et d'autres bases de données cibles.

Signature DSNUTILB

Par nature, DSNUTILB est plutôt destiné à être appelé par des scripts de travail modernisés.

Ne prend aucun argument ; lit les commandes depuis l'SYSINensemble de données.

Les commandes prises en charge sont les suivantes :

  • TEMPLATE(allocation dynamique d'ensembles de données)

  • LISTDEF(groupez les objets de base de données dans des listes, utilisables par d'autres commandes)

  • COPY(créer des copies des objets de base de données)

  • LOAD(charger des enregistrements dans des tables)

  • DISCARD(supprimer des enregistrements des tables)

Pour plus de détails sur les commandes, veuillez consulter la documentation existante correspondante.

Paramètres de configuration associés à DSNUTILB

Le comportement de l'utilitaire est influencé par les paramètres de configuration suivants :

  • unload.useDatabaseConfiguration

  • load.format.localDate

  • load.format.dbDate

  • load.format.localTime

  • load.format.dbTime

  • load.sqlCodePointShift

  • convertGraphicDataToFullWidth

Consultez Propriétés disponibles pour les applications Web facultatives pour plus de détails sur la configuration de ces paramètres.

Contrôles DSNUTILB/Gestion des erreurs

  • Si l'SYSINensemble de données ne contient aucune commande utilisable, une commande RuntimeException sera émise.

  • Si une exception se produit pendant les opérations de base de données, un message d'erreur sera enregistré, le code de retour sera défini sur 8 et un StopRunUnitException sera émis (arrêt de l'unité en cours d'exécution).

Exemples d'utilisations de DSNUTILB

Voici un exemple d'utilisation de DSNUTILB dans un 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

avec le contenu de la carte de commandes (dsn01.card) -- utilisé pour charger des données dans la base de données, à partir d'un fichier plat exporté depuis l'ancienne plateforme -- :

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

et l'extrait de script modernisé groovy correspondant :

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

Objectif d'INFUTILB

INFUTILB/INZUTILB sont des programmes utilitaires utilisés pour extraire des données de bases de données (décharger) (dans un environnement existant) et DB2 les convertir en différents formats de sortie.

Les anciennes requêtes SQL sont automatiquement adaptées on-the-fly aux exigences des bases de données cibles modernes (moteurs pris en charge : PostgreSQL, Oracle et). DB2

Signature d'INUTILB/INZUTILB

Les alias de programme suivants peuvent être utilisés (et correspondent au nom des anciens utilitaires de tri correspondants) :

  • INFUTILB

  • INZUTILB

L'utilitaire ne prend aucun argument mais lit les commandes à exécuter à partir de l'SYSINensemble de données (une « carte de contrôle »). Les enregistrements extraits de la base de données sont écrits dans l'SYSRECensemble de données et l'ensemble de SYSPUNCH données facultatif est utilisé pour stocker la carte de contrôle qui peut être utilisée pour recharger les données (à l'aide d'autres utilitaires, par DSNUTILB exemple).

Par nature, INFUTILB/INZUTILB ils sont principalement destinés à être appelés par des scripts de travail modernisés.

Pour en savoir plus sur les commandes prises en charge, reportez-vous à la documentation existante appropriée. Ils INFUTILB/INZUTILB utilisent les anciens ensembles de données « cartes de contrôle » « tels quels ».

Paramètres de configuration associés à INFUTILB/INZUTILB

Le comportement de l'utilitaire est influencé par les paramètres de configuration suivants :

  • 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

Consultez Propriétés disponibles pour les applications Web facultatives pour plus de détails sur la configuration de ces paramètres.

INFUTILB/ Contrôles INZUTILB/Gestion des erreurs

  • Si la base de données cible ne fait pas partie des moteurs de base de données pris en charge (PostgreSQL, Oracle DB2 et), le code de retour du programme sera défini sur 8 et UnsupportedOperationException un sera renvoyé.

  • Si le programme ne parvient pas à supprimer les fichiers temporaires, le code de retour sera défini sur 4, un message d'erreur sera enregistré, mais l'exécution du programme ne sera pas interrompue.

  • Dans tous les cas suivants, le code de retour du programme sera défini sur 4 ou 8, et un signal AbendException sera émis (arrêt de l'exécution du programme) :

    • Si l'SYSRECensemble de données n'est pas l'un des types pris en charge (GDG ou ensemble de données basé sur un système de fichiers) ; code de retour 4 ;

    • Si l'SYSPUNCHensemble de données n'est pas l'un des types pris en charge (GDG ou ensemble de données basé sur un système de fichiers ouDUMMY), renvoyez le code 4 ;

    • Si le programme ne parvient pas à récupérer la taille d'enregistrement de l'ensemble de SYSREC données (non définie ou non définie dans le catalogue des ensembles de données), renvoie le code 8 ;

    • Si le programme ne parvient pas à récupérer la taille d'enregistrement de l'ensemble de SYSPUNCH données (non définie ou non définie dans le catalogue des ensembles de données), renvoie le code 8 ;

    • Si la requête utilisée pour créer le contenu du SYSREC jeu de données n'est pas valide (la requête défectueuse sera enregistrée) ; code de retour 4 ;

    • Si une exception se produit lors de la récupération des données de la base de données ; code de retour 8 ;

    • Si la OUTDDN commande est absente dans l'SYSINensemble de données, pour une tâche de déchargement ; code de retour 8 ;

    • Si aucune commande valide n'a été trouvée dans l'SYSINensemble de données ; code de retour 8 ;

Exemples d'utilisations d'INFUTILB/INZUTILB

Voici un exemple d'extrait de script JCL existant :

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

qui utilise la carte de commandes suivante (inf12.card) pour décharger certaines données de la base de données (ici, les enregistrements sont sélectionnés en fonction de leur date) :

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

et l'extrait de script groovy correspondant, résultat de la modernisation automatique de 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

Objectif du JXHDBCLR

JXHDBCLR est un utilitaire de suppression de base de données, présent sur les GS21 plateformes, qui tronque les tables en fonction des instructions spécifiques fournies dans une carte de commandes.

Signature JXHDBCLR

Il ne prend aucun argument mais lit les instructions de l'SYSINensemble de données (la carte de commandes).

En raison de sa nature, il est principalement destiné à être appelé par des scripts de tâches modernisés.

paramètres de configuration associés à JXHDBCLR

Le comportement de l'utilitaire est influencé par les paramètres de configuration suivants :

  • unload.sqlCodePointShift

  • unload.noPad

  • unload.nbi.whenNull

  • unload.nbi.whenNotNull

  • unload.useDatabaseConfiguration

  • unload.format.date

  • unload.format.time

  • unload.format.timestamp

  • hasGraphic

  • forcedDate

  • frozenDate

Consultez Propriétés disponibles pour les applications Web facultatives pour plus de détails sur la configuration de ces paramètres.

Vérifications JXHDBCLR//Gestion des erreurs

Si aucune table à tronquer n'est trouvée, un message d'avertissement sera enregistré, mais l'exécution du programme ne sera pas interrompue.

En cas d'échec lors de la troncature des tables, le code de retour du programme sera défini sur 4, les messages d'erreur seront enregistrés, mais l'exécution du programme ne sera pas interrompue.

Pour l'une des conditions suivantes, le code de retour du programme sera défini sur 8 et un AbendException sera émis (arrêt de l'exécution du programme) :

  • Si le contenu de la carte de commandes est vide ;

  • si une exception se produit lors de cette analyse du traitement des commandes ;

Exemples d'utilisations du JXHDBCLR

Exemple d'utilisation de JXHDBCLR avec une carte de commandes intégrée :

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

et l'extrait de script groovy modernisé correspondant :

// 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 carte intégrée de Legacy est conservée « telle quelle », à l'aide d'un stream.