JCL - Declaração DD

Conjuntos de dados são arquivos de mainframe com registros organizados em um formato específico. Os conjuntos de dados são armazenados no dispositivo de armazenamento de acesso direto (DASD) ou fitas do mainframe e são áreas básicas de armazenamento de dados. Se esses dados precisarem ser usados ​​/ criados em um programa em lote, o nome físico do arquivo (ou seja, conjunto de dados) junto com o formato do arquivo e a organização são codificados em um JCL.

A definição de cada conjunto de dados usado no JCL é dada usando o DD statement. Os recursos de entrada e saída exigidos por uma etapa do trabalho precisam ser descritos em uma instrução DD com informações como a organização do conjunto de dados, requisitos de armazenamento e comprimento do registro.

Sintaxe

A seguir está a sintaxe básica de uma instrução JCL DD:

//DD-name DD Parameters

Descrição

Vamos ver a descrição dos termos usados ​​na sintaxe da instrução DD acima.

DD-NAME

Um DD-NAME identifica o conjunto de dados ou recurso de entrada / saída. Se este for um arquivo de entrada / saída usado por um programa COBOL / Assembler, o arquivo será referenciado por este nome dentro do programa.

DD

Esta é a palavra-chave para identificá-la como uma instrução DD.

PARÂMETROS

A seguir estão os vários parâmetros para a instrução DD. Você pode usar um ou mais parâmetros com base nos requisitos e eles são separados por vírgula:

Parâmetro Descrição
DSN

O parâmetro DSN se refere ao nome do conjunto de dados físico de um conjunto de dados recém-criado ou existente. O valor DSN pode ser composto de subnomes, cada um com 1 a 8 caracteres, separados por pontos e com comprimento total de 44 caracteres (alfanuméricos). A seguir está a sintaxe:

DSN=Physical Dataset Name

Temporary datasetsprecisam de armazenamento apenas para a duração do trabalho e são excluídos na conclusão do trabalho. Esses conjuntos de dados são representados comoDSN=&name ou simplesmente sem um DSN especificado.

Se um conjunto de dados temporário criado por uma etapa de trabalho for usado na próxima etapa de trabalho, ele é referenciado como DSN=*.stepname.ddname. Isso é chamado Backward Referencing.

DISP

O parâmetro DISP é usado para descrever o status do conjunto de dados, disposição no final da etapa do trabalho na conclusão normal e anormal. DISP não é necessário em uma instrução DD apenas quando o conjunto de dados é criado e excluído na mesma etapa do trabalho (como os conjuntos de dados temporários). A seguir está a sintaxe:

DISP=(status, normal-disposition, abnormal-disposition)

A seguir estão os valores válidos para status:

  • NEW: O conjunto de dados é recém-criado pela etapa do trabalho. OUTPUT1 no exemplo acima.

  • OLD: O conjunto de dados já foi criado e será substituído na etapa do trabalho. A etapa do trabalho obtém acesso exclusivo ao conjunto de dados e nenhum outro trabalho pode acessar este conjunto de dados até a conclusão da etapa do trabalho.

  • SHR: O conjunto de dados já foi criado e será lido na etapa do trabalho. O conjunto de dados pode ser lido por vários trabalhos ao mesmo tempo. Exemplo: INPUT1 e INPUT2.

  • MOD: O conjunto de dados já foi criado. Esta disposição será usada quando houver necessidade de anexar novos registros ao conjunto de dados existente (os registros existentes não serão substituídos).

UMA normal-disposition parâmetro pode ter um dos seguintes valores

  • CATLG, UNCATLG, DELETE, PASS and KEEP

UMA abnormal-disposition parâmetro pode ter um dos seguintes valores

  • CATLG, UNCATLG, DELETE e KEEP

Aqui está a descrição dos parâmetros CATLG, UNCATLG, DELETE, PASS e KEEP:

  • CATLG : O conjunto de dados é retido com uma entrada no catálogo do sistema.

  • UNCATLG : O conjunto de dados é retido, mas a entrada do catálogo do sistema é removida.

  • KEEP: O conjunto de dados é retido sem alterar nenhuma das entradas do catálogo. KEEP é a única disposição válida para arquivos VSAM. Isso deve ser usado apenas para conjuntos de dados permanentes.

  • DELETE : O conjunto de dados é excluído do catálogo do usuário e do sistema.

  • PASS: Isso é válido apenas para disposição normal. Isso é usado quando o conjunto de dados deve ser passado e processado pela próxima etapa do trabalho em um JCL

Quando qualquer um dos subparâmetros de DISP não é especificado, os valores padrão são os seguintes:

  • status : NOVO é o valor padrão.

  • normal-disposition : Se o status for NEW, a disposição normal padrão é DELETE, caso contrário, é KEEP.

  • abnormal-disposition : Igual à disposição normal.

DCB

O parâmetro Data Control Block (DCB) detalha as características físicas de um conjunto de dados. Este parâmetro é necessário para conjuntos de dados recém-criados na etapa do trabalho.

LRECL é o comprimento de cada registro mantido no conjunto de dados.

RECFM é o formato de registro do conjunto de dados. RECFM pode conter os valores FB, V ou VB. FB é uma organização de bloco fixo onde um ou mais registros lógicos são agrupados em um único bloco. V é a organização variável onde um registro lógico de comprimento variável é colocado dentro de um bloco físico. VB é uma organização de Bloco Variável onde um ou mais registros lógicos de comprimento variável são colocados em um bloco físico.

BLKSIZE é o tamanho do bloco físico. Quanto maior o bloco, maior é o número de registros para um arquivo FB ou VB.

DSORG é o tipo de organização de conjunto de dados. DSORG pode conter valores PS (Physical Sequential), PO (Partitioned Organization) e DA (Direct Organization).

Quando há necessidade de replicar os valores DCB de um conjunto de dados para outro dentro do mesmo jobstep ou JCL, é especificado como DCB = *. Stepname.ddname, onde stepname é o nome da etapa do trabalho e ddname é o conjunto de dados do qual o DCB é copiado.

Verifique o exemplo abaixo onde RECFM = FB, LRECL = 80 forma o DCB do conjunto de dados OUTPUT1.

SPACE

O parâmetro SPACE especifica o espaço necessário para o conjunto de dados no DASD (Direct Access Storage Disk). A seguir está a sintaxe:

SPACE=(spcunits, (pri, sec, dir), RLSE)

Aqui está a descrição de todos os parâmetros usados:

  • spcunits : Pode ser um de CYL (cilindro), TRK (faixas) ou BLKSIZE (tamanho do bloco).

  • pri : Este é o espaço principal necessário para o conjunto de dados.

  • sec : Este é o espaço adicional necessário, quando o espaço principal não está sendo suficiente.

  • ir : Estes são os blocos de diretório necessários, se o dataset for um PDS (Partitioned Dataset) com membros dentro dele.

  • RLSE : Isso é usado para liberar o espaço não utilizado na conclusão do trabalho.

UNIT

Os parâmetros UNIT e VOL estão listados no catálogo do sistema para conjuntos de dados catalogados e, portanto, podem ser acessados ​​apenas com o nome DSN físico. Porém, para conjuntos de dados não catalogados, a instrução DD deve incluir esses parâmetros. Para que novos conjuntos de dados sejam criados, os parâmetros UNIT / VOL podem ser especificados ou o Z / OS aloca o dispositivo e volume adequados.

O parâmetro UNIT especifica o tipo de dispositivo no qual o conjunto de dados está armazenado. O tipo de dispositivo pode ser identificado usando Hardware Address ou Device type group. A seguir está a sintaxe:

UNIT=DASD | SYSDA

Onde DASD significa Direct Access Storage Device e SYSDA significa System Direct Access e se refere ao próximo dispositivo de armazenamento em disco disponível.

VOL

O parâmetro VOL especifica o número do volume no dispositivo identificado pelo parâmetro UNIT. A seguir está a sintaxe:

VOL=SER=(v1,v2)

Onde v1, v2 são números de série de volume. Você também pode usar a seguinte sintaxe:

VOL=REF=*.DDNAME

Onde REF é a referência retroativa ao número de série do volume de um conjunto de dados em qualquer uma das etapas de trabalho anteriores no JCL.

SYSOUT

Os parâmetros da instrução DD discutidos até agora correspondem aos dados armazenados em um conjunto de dados. O parâmetro SYSOUT direciona os dados para o dispositivo de saída com base na classe especificada. A seguir está a sintaxe

SYSOUT=class

Onde se a classe é A, então ele direciona a saída para a impressora, e se a classe é * em seguida, ele direciona a saída para o mesmo destino do parâmetro MSGCLASS na instrução JOB.

Exemplo

A seguir está um exemplo, que faz uso de instruções DD junto com vários parâmetros explicados acima:

//TTYYSAMP JOB 'TUTO',CLASS=6,MSGCLASS=X,REGION=8K,
//         NOTIFY=&SYSUID
//*
//STEP010  EXEC PGM=ICETOOL,ADDRSPC=REAL
//*
//INPUT1   DD DSN=TUTO.SORT.INPUT1,DISP=SHR
//INPUT2   DD DSN=TUTO.SORT.INPUT2,DISP=SHR,UNIT=SYSDA,
//         VOL=SER=(1243,1244)
//OUTPUT1  DD DSN=MYFILES.SAMPLE.OUTPUT1,DISP=(,CATLG,DELETE),
//         RECFM=FB,LRECL=80,SPACE=(CYL,(10,20))
//OUTPUT2  DD SYSOUT=*