

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](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html).

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
<a name="system-database-utilities"></a>

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
<a name="dsntep2-dsntep4"></a>

### DSNTEP2/DSNTEP4 Objectif
<a name="dsntep2-purpose"></a>

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
<a name="dsntep2-signature"></a>

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
<a name="dsntep2-configuration"></a>

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](ba-runtime-key-value.md#ba-runtime-key-value-web) pour plus de détails sur la configuration de ces paramètres.

### DSNTEP2/DSNTEP4 Contrôles/Gestion des erreurs
<a name="dsntep2-error-handling"></a>
+ 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'`SYSIN`agit 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
<a name="dsntep2-sample-usages"></a>

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
<a name="dsnutilb"></a>

### Objectif du DSNUTILB
<a name="dsnutilb-purpose"></a>

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
<a name="dsnutilb-signature"></a>

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'`SYSIN`ensemble 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
<a name="dsnutilb-configuration"></a>

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](ba-runtime-key-value.md#ba-runtime-key-value-web) pour plus de détails sur la configuration de ces paramètres.

### Contrôles DSNUTILB/Gestion des erreurs
<a name="dsnutilb-error-handling"></a>
+ Si l'`SYSIN`ensemble 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
<a name="dsnutilb-sample-usages"></a>

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
<a name="infutilb-inzutilb"></a>

### Objectif d'INFUTILB
<a name="infutilb-purpose"></a>

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
<a name="infutilb-signature"></a>

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'`SYSIN`ensemble de données (une « carte de contrôle »). Les enregistrements extraits de la base de données sont écrits dans l'`SYSREC`ensemble 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](#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
<a name="infutilb-configuration"></a>

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](ba-runtime-key-value.md#ba-runtime-key-value-web) pour plus de détails sur la configuration de ces paramètres.

### INFUTILB/ Contrôles INZUTILB/Gestion des erreurs
<a name="infutilb-error-handling"></a>
+ 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'`SYSREC`ensemble 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'`SYSPUNCH`ensemble 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 ou`DUMMY`), 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'`SYSIN`ensemble 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'`SYSIN`ensemble de données ; code de retour 8 ;

### Exemples d'utilisations d'INFUTILB/INZUTILB
<a name="infutilb-sample-usages"></a>

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
<a name="jxhdbclr"></a>

### Objectif du JXHDBCLR
<a name="jxhdbclr-purpose"></a>

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
<a name="jxhdbclr-signature"></a>

Il ne prend aucun argument mais lit les instructions de l'`SYSIN`ensemble 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
<a name="jxhdbclr-configuration"></a>

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](ba-runtime-key-value.md#ba-runtime-key-value-web) pour plus de détails sur la configuration de ces paramètres.

### Vérifications JXHDBCLR//Gestion des erreurs
<a name="jxhdbclr-error-handling"></a>

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
<a name="jxhdbclr-sample-usages"></a>

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.