

AWS O Mainframe Modernization Service (experiência em Managed Runtime Environment) não está mais aberto a novos clientes. Para recursos semelhantes ao AWS Mainframe Modernization Service (experiência em Managed Runtime Environment), explore o AWS Mainframe Modernization Service (experiência autogerenciada). Os clientes atuais podem continuar usando o serviço normalmente. Para obter mais informações, consulte Alteração na [disponibilidade AWS da modernização do mainframe](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html).

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# utilitários de banco de dados
<a name="system-database-utilities"></a>

Esta seção é sobre utilitários relacionados ao banco de dados. Em plataformas legadas, esses programas geralmente operam em DB2 bancos de dados, enquanto bancos de dados alternativos são escolhidos (o AWS Aurora é uma escolha popular) em ambientes modernos.

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

### DSNTEP2/DSNTEP4 Propósito
<a name="dsntep2-purpose"></a>

O utilitário DNSTEP executa consultas SQL dos conjuntos de dados de entrada e grava os resultados nos conjuntos de dados de saída. Ele reescreve automaticamente consultas SQL antigas para bancos de dados de destino modernizados (além DB2) e oferece suporte a vários tipos de conjuntos de dados: streams, `SYSIN` conjuntos de dados Blusam, arquivos simples, gerações GDG e concatenações de conjuntos de dados.

### DSNTEP2/DSNTEP4 Assinatura
<a name="dsntep2-signature"></a>

O utilitário não aceita argumentos e usa dois conjuntos de dados:
+ `SYSIN`: conjunto de dados de entrada contendo instruções SQL
+ `SYSPRINT`: conjunto de dados de saída para resultados da consulta (`SELECT`somente consultas)

### DSNTEP2/parâmetros de configuração DSNTEP4 relacionados
<a name="dsntep2-configuration"></a>

O comportamento do utilitário é influenciado pelos seguintes parâmetros de configuração:
+ `unload.sqlCodePointShift`
+ `unload.noPad`
+ `unload.nbi.whenNull`
+ `unload.nbi.whenNotNull`
+ `unload.useDatabaseConfiguration`
+ `unload.format.date`
+ `unload.format.time`
+ `unload.format.timestamp`
+ `hasGraphic`
+ `forcedDate`
+ `frozenDate`

Consulte [Propriedades disponíveis para aplicações web opcionais](ba-runtime-key-value.md#ba-runtime-key-value-web) para obter detalhes sobre como configurar esses parâmetros.

### DSNTEP2/DSNTEP4 Verificações/Tratamento de erros
<a name="dsntep2-error-handling"></a>
+ Se, por algum motivo, ocorrer uma exceção durante a execução da consulta, uma mensagem de erro será registrada e uma `StopRunUnitException` será lançada, fazendo com que a unidade de execução atual seja interrompida.
+ Se `SYSIN` for uma concatenação de vários conjuntos de dados e nenhum dos conjuntos de dados for suportado, um será lançado. `RuntimeException` Atualmente, somente arquivos simples e tipos de gerações GDG são suportados como partes de um arquivo concatenado, quando usados como entrada com /4. DSNTEP2

### DSNTEP2/DSNTEP4 Exemplos de usos
<a name="dsntep2-sample-usages"></a>

Aqui está um exemplo do uso do 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;
```

e o trecho de script groovy modernizado correspondente:

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

Observe que a consulta SQL é fornecida “no estado em que se encontra” para o utilitário DSNTEP2 /4, sem nenhuma modificação.

## DSNUTILB
<a name="dsnutilb"></a>

### Objetivo do DSNUTILB
<a name="dsnutilb-purpose"></a>

Utilitário de banco de dados para carregar, copiar e gerenciar dados. Geralmente opera em DB2 bancos de dados legados; a versão modernizada oferece suporte ao AWS Aurora e a outros bancos de dados de destino.

### Assinatura DSNUTILB
<a name="dsnutilb-signature"></a>

Por natureza, o DSNUTILB deve ser chamado por scripts de trabalho modernizados.

Não aceita argumentos; lê comandos do `SYSIN` conjunto de dados.

Os comandos suportados são:
+ `TEMPLATE`(alocação dinâmica de conjuntos de dados)
+ `LISTDEF`(agrupe objetos de banco de dados em listas, utilizáveis por outros comandos)
+ `COPY`(criar cópias de objetos de banco de dados)
+ `LOAD`(carregar registros em tabelas)
+ `DISCARD`(excluir registros das tabelas)

Para obter mais detalhes sobre os comandos, consulte a documentação legada adequada relacionada.

### Parâmetros de configuração relacionados ao DSNUTILB
<a name="dsnutilb-configuration"></a>

O comportamento do utilitário é influenciado pelos seguintes parâmetros de configuração:
+ `unload.useDatabaseConfiguration`
+ `load.format.localDate`
+ `load.format.dbDate`
+ `load.format.localTime`
+ `load.format.dbTime`
+ `load.sqlCodePointShift`
+ `convertGraphicDataToFullWidth`

Consulte [Propriedades disponíveis para aplicações web opcionais](ba-runtime-key-value.md#ba-runtime-key-value-web) para obter detalhes sobre como configurar esses parâmetros.

### Verificações do DSNUTILB//Tratamento de erros
<a name="dsnutilb-error-handling"></a>
+ Se o `SYSIN` conjunto de dados não contiver nenhum comando utilizável, um `RuntimeException` será lançado.
+ Se ocorrer alguma exceção durante as operações do banco de dados, uma mensagem de erro será registrada, o código de retorno será definido como 8 e um `StopRunUnitException` será lançado (interrompendo a unidade de execução atual).

### Exemplos de usos do DSNUTILB
<a name="dsnutilb-sample-usages"></a>

Aqui está um exemplo de uso do DSNUTILB em um 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
```

com os comandos card content (dsn01.card) -- usados para carregar dados no banco de dados, a partir de um arquivo simples exportado da plataforma legada --:

```
  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 o trecho de script modernizado do groovy correspondente:

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

### Propósito INFUTILB
<a name="infutilb-purpose"></a>

INFUTILB/INZUTILB são programas utilitários usados para extrair dados de bancos de dados -- descarregar -- (DB2 em ambiente legado) e convertê-los em vários formatos de saída.

As consultas SQL antigas estão sendo adaptadas automaticamente on-the-fly para atender aos requisitos modernos de bancos de dados de destino (mecanismos compatíveis: PostgreSQL, Oracle e). DB2

### Assinatura INFUTILB/INZUTILB
<a name="infutilb-signature"></a>

Os seguintes aliases de programa podem ser usados (e correspondem ao nome correspondente dos utilitários de classificação legados):
+ `INFUTILB`
+ `INZUTILB`

O utilitário não aceita nenhum argumento, mas lê os comandos a serem executados a partir do `SYSIN` conjunto de dados (um “cartão de controle”). Os registros extraídos do banco de dados são gravados no `SYSREC` conjunto de dados e o `SYSPUNCH` conjunto de dados opcional é usado para armazenar o cartão de controle que pode ser usado para recarregar dados (usando outros utilitários, como por exemplo). [DSNUTILB](#dsnutilb)

Por natureza, INFUTILB/INZUTILB são destinados principalmente a serem chamados por scripts de trabalho modernizados.

Para obter detalhes sobre os comandos suportados, consulte a documentação legada adequada. Eles INFUTILB/INZUTILB estão usando conjuntos de dados legados de “cartões de controle” “no estado em que se encontram”.

### Parâmetros de configuração relacionados ao INFUTILB/INZUTILB
<a name="infutilb-configuration"></a>

O comportamento do utilitário é influenciado pelos seguintes parâmetros de configuração:
+ `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`

Consulte [Propriedades disponíveis para aplicações web opcionais](ba-runtime-key-value.md#ba-runtime-key-value-web) para obter detalhes sobre como configurar esses parâmetros.

### INFUTILB//Verificações INZUTILB//Tratamento de erros
<a name="infutilb-error-handling"></a>
+ Se o banco de dados de destino não fizer parte dos mecanismos de banco de dados suportados (PostgreSQL, Oracle DB2 e), o código de retorno do programa será definido como 8 e `UnsupportedOperationException` um será lançado.
+ Se o programa não conseguir excluir arquivos temporários, o código de retorno será definido como 4, uma mensagem de erro será registrada, mas a execução do programa não será interrompida.
+ Para todos os casos a seguir, o código de retorno do programa será definido como 4 ou 8 e um `AbendException` será lançado (interrompendo a execução do programa):
  + Se o `SYSREC` conjunto de dados não for um dos tipos suportados (seja GDG ou conjunto de dados baseado em sistema de arquivos); retorne o código 4;
  + Se o `SYSPUNCH` conjunto de dados não for um dos tipos suportados (seja GDG ou conjunto de dados baseado em sistema de arquivos ou`DUMMY`); retorne o código 4;
  + Se o programa não conseguir recuperar o tamanho do registro do `SYSREC` conjunto de dados (não definido ou não definido no catálogo dos conjuntos de dados); retorne o código 8;
  + Se o programa não conseguir recuperar o tamanho do registro do `SYSPUNCH` conjunto de dados (não definido ou não definido no catálogo dos conjuntos de dados); retorne o código 8;
  + Se a consulta usada para criar o conteúdo do `SYSREC` conjunto de dados não for válida (a consulta com defeito será registrada); retorne o código 4;
  + Se ocorrer alguma exceção ao buscar dados do banco de dados; retorne o código 8;
  + Se o `OUTDDN` comando estiver ausente no `SYSIN` conjunto de dados, para uma tarefa de descarga; código de retorno 8;
  + Se nenhum comando válido puder ser encontrado no `SYSIN` conjunto de dados; retorne o código 8;

### Exemplos de usos de INFUTILB//INZUTILB
<a name="infutilb-sample-usages"></a>

Aqui está um exemplo de trecho de script jcl legado:

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

que usa o seguinte cartão de comandos (inf12.card) para descarregar alguns dados do banco de dados (aqui, os registros são selecionados com base na 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 o trecho de script groovy correspondente, resultado da modernização automatizada do 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>

### Objetivo do JXHDBCLR
<a name="jxhdbclr-purpose"></a>

O JXHDBCLR é um programa utilitário de limpeza de banco de dados, encontrado em GS21 plataformas, que trunca tabelas de acordo com as instruções específicas fornecidas em um cartão de comandos.

### Assinatura JXHDBCLR
<a name="jxhdbclr-signature"></a>

Ele não usa nenhum argumento, mas lê declarações do `SYSIN` conjunto de dados (o cartão de comandos).

Devido à sua natureza, ele se destina principalmente a ser chamado por scripts de tarefas modernizados.

### Parâmetros de configuração relacionados ao JXHDBCLR
<a name="jxhdbclr-configuration"></a>

O comportamento do utilitário é influenciado pelos seguintes parâmetros de configuração:
+ `unload.sqlCodePointShift`
+ `unload.noPad`
+ `unload.nbi.whenNull`
+ `unload.nbi.whenNotNull`
+ `unload.useDatabaseConfiguration`
+ `unload.format.date`
+ `unload.format.time`
+ `unload.format.timestamp`
+ `hasGraphic`
+ `forcedDate`
+ `frozenDate`

Consulte [Propriedades disponíveis para aplicações web opcionais](ba-runtime-key-value.md#ba-runtime-key-value-web) para obter detalhes sobre como configurar esses parâmetros.

### Verificações JXHDBCLR//Tratamento de erros
<a name="jxhdbclr-error-handling"></a>

Se nenhuma tabela a ser truncada for encontrada, uma mensagem de aviso será registrada, mas a execução do programa não será interrompida.

Se ocorrerem algumas falhas durante o truncamento das tabelas, o código de retorno do programa será definido como 4, as mensagens de erro serão registradas, mas a execução do programa não será interrompida.

Para qualquer uma das seguintes condições, o código de retorno do programa será definido como 8 e um `AbendException` será lançado (interrompendo a execução do programa):
+ Se o conteúdo do cartão de comandos estiver vazio;
+ se ocorrer alguma exceção durante a análise do processamento dos comandos;

### Exemplos de usos do JXHDBCLR
<a name="jxhdbclr-sample-usages"></a>

Um exemplo de uso do JXHDBCLR com um cartão de comandos embutido:

```
//*******************************************************************
//**  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 o trecho de script groovy modernizado correspondente:

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

A placa embutida do legado é mantida “como está”, usando um stream.