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.
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
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
DSNTEP2/DSNTEP4 Propósito
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
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 (SELECTsomente consultas)
DSNTEP2/parâmetros de configuração DSNTEP4 relacionados
O comportamento do utilitário é influenciado pelos seguintes parâmetros de configuração:
unload.sqlCodePointShiftunload.noPadunload.nbi.whenNullunload.nbi.whenNotNullunload.useDatabaseConfigurationunload.format.dateunload.format.timeunload.format.timestamphasGraphicforcedDatefrozenDate
Consulte Propriedades disponíveis para aplicações web opcionais para obter detalhes sobre como configurar esses parâmetros.
DSNTEP2/DSNTEP4 Verificações/Tratamento de erros
-
Se, por algum motivo, ocorrer uma exceção durante a execução da consulta, uma mensagem de erro será registrada e uma
StopRunUnitExceptionserá lançada, fazendo com que a unidade de execução atual seja interrompida. -
Se
SYSINfor uma concatenação de vários conjuntos de dados e nenhum dos conjuntos de dados for suportado, um será lançado.RuntimeExceptionAtualmente, 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
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
Objetivo do DSNUTILB
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
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
O comportamento do utilitário é influenciado pelos seguintes parâmetros de configuração:
unload.useDatabaseConfigurationload.format.localDateload.format.dbDateload.format.localTimeload.format.dbTimeload.sqlCodePointShiftconvertGraphicDataToFullWidth
Consulte Propriedades disponíveis para aplicações web opcionais para obter detalhes sobre como configurar esses parâmetros.
Verificações do DSNUTILB//Tratamento de erros
-
Se o
SYSINconjunto de dados não contiver nenhum comando utilizável, umRuntimeExceptionserá 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
StopRunUnitExceptionserá lançado (interrompendo a unidade de execução atual).
Exemplos de usos do DSNUTILB
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
Propósito INFUTILB
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
Os seguintes aliases de programa podem ser usados (e correspondem ao nome correspondente dos utilitários de classificação legados):
INFUTILBINZUTILB
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
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
O comportamento do utilitário é influenciado pelos seguintes parâmetros de configuração:
unload.sqlCodePointShiftunload.noPadunload.nbi.whenNullunload.nbi.whenNotNullunload.useDatabaseConfigurationunload.format.dateunload.format.timeunload.format.timestampunload.columnFillerunload.varCharIsNullunload.DFSIGDCBhasGraphicforcedDatefrozenDate
Consulte Propriedades disponíveis para aplicações web opcionais para obter detalhes sobre como configurar esses parâmetros.
INFUTILB//Verificações INZUTILB//Tratamento de erros
-
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
UnsupportedOperationExceptionum 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
AbendExceptionserá lançado (interrompendo a execução do programa):Se o
SYSRECconjunto 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
SYSPUNCHconjunto de dados não for um dos tipos suportados (seja GDG ou conjunto de dados baseado em sistema de arquivos ouDUMMY); retorne o código 4;Se o programa não conseguir recuperar o tamanho do registro do
SYSRECconjunto 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
SYSPUNCHconjunto 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
SYSRECconjunto 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
OUTDDNcomando estiver ausente noSYSINconjunto de dados, para uma tarefa de descarga; código de retorno 8;Se nenhum comando válido puder ser encontrado no
SYSINconjunto de dados; retorne o código 8;
Exemplos de usos de INFUTILB//INZUTILB
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
Objetivo do JXHDBCLR
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
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
O comportamento do utilitário é influenciado pelos seguintes parâmetros de configuração:
unload.sqlCodePointShiftunload.noPadunload.nbi.whenNullunload.nbi.whenNotNullunload.useDatabaseConfigurationunload.format.dateunload.format.timeunload.format.timestamphasGraphicforcedDatefrozenDate
Consulte Propriedades disponíveis para aplicações web opcionais para obter detalhes sobre como configurar esses parâmetros.
Verificações JXHDBCLR//Tratamento de erros
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
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.