zOS
Operational System Z
Student Guide
Índice
Página
Arquivo nativos do zOS 2
Cartões de um JCL 3
Catalogo de Arquivos 2
Copiando um VSAM 11
Criação de um JOB 2
Criando um vsam ESDS 12
Criando um vsam KSDS 9
Criando um vsam RRDS 13
Imprimindo um VSAM 12
JOB – Cartão de controle do trabalho 3
Layout do JCL 3
O que é o zOS 1
STEP001 – Deleção de arquivos 4
STEP002 – Criação de arquivos 5
O que é o zOS
z/OS é um SO de 64 bits para mainframes, criado pela IBM. É o sucessor do OS/390, o qual, por sua vez, combinou o MVS e o UNIX System Services (uma implementação Unix POSIX-aderente para mainframes, anteriormente conhecida como MVS Open Edition ou OpenMVS).
O z/OS oferece muitos dos atributos de outros sistemas operacionais modernos, mas também conserva muito da funcionalidade originada nos anos 1970 e anos 1960, que frequentemente ainda estão em uso cotidiano. Isto inclui CICS, IMS, DB2, RACF e SNA.
O z/OS também executa Java de 64 bits, suporta APIs e aplicativos UNIX (Single UNIX Specification) e comunica-se diretamente com o [[Internet protocol suite TCP/IP. Um sistema operacional complementar IBM, z/VM, fornece o gerenciamento de sistemas virtuais múltiplos ("guests") no mesmo mainframe físico. Estas novas funções no z/OS e z/VM, e o suporte ao Linux, tem encorajado o desenvolvimento de novos aplicativos para mainframes. Muitos deles utilizam o WebSphere Application Server para middleware z/OS.
A partir de 1 de abril de 2007, o z/OS passou a ter suporte somente em mainframes de 64 bits (z/Architecture). O z/OS V1R5 foi a última versão a dar suporte ao ESA/390, uma arquitetura de hardware anterior com endereçamento de 31 bits. Aplicativos antigos ainda são suportados na mesma forma binária, usem eles 31 bits ou mesmo endereçamento de 24 bits.
A IBM comercializa o z/OS como um sistema operacional destacado[1], talhado para
operações contínuas, de grande volume, com elevada segurança e estabilidade. Uma versão de baixo custo do z/OS, z/OS.e, possui código idêntico mas é processado com uma configuração de inicialização que impede a execução de tarefas "clássicas", tais como os compiladores COBOL e PL/I. O z/OS.e era disponibilizado para os mainframes IBM z800, z890 e z9 BC, mas foi encerrado com a versão V1.8 e retirado de mercado em outubro de 2007.[2] Foi substituído
pelo System z New Application License Charges (zNALC), o qual oferece um z/OS completo e mais barato, se usado para servir novos aplicativos ("new workloads") Importante: Neste manual veremos somente alguns utilitários e seus parâmetros, mais usados pelos programadores mainframe, pois os utilitários do zOS são vários e diversificados para mais conhecimentos consulte no site da IBM o tópico IBM MANUALS.
1) Particionado : São arquivos que contém membros (também chamados PDS), que podem ser: parâmetros do sistema, parâmetros de programa, programas fonte, jobs, etc.
2) Sequencial: Os dados são acessados de maneira sequencial, registro após registro, podendo ser os registros de dados de tamanho fixo ou variável. 3) Indexado: Arquivo de estrutura indexada, contendo uma área de controle, área de índices e uma área de dados. No caso do ZOS o arquivo usado é VSAM.
Tipo s de Arquivos
Catalogo de Arquivos
O catálogo é o endereçamento dos volumes para que possamos acessar um arquivo, este endereçamento está dividido em níveis, o primeiro nível (catálogo) apontará em que volume se encontra o arquivo que desejamos acessar, o segundo nível (VTOC) indicará qual será o endereço físico do arquivo. Existe o catálogo mestre que conterá a definição dos catálogos de sistema, no catálogo de sistema são definidos os prefixos dos arquivos que serão controlados por ele. A cada encerramento de um aplicativo que crie ou exclua um arquivo o catálogo é atualizado.
LEGENDA
Catálogo: Lista de endereço
Volume: Meio físico de armazenagem de dados (Disco)
VTOC: Volume Table of Contains (Tabela de conteúdo de volumes)
Criação de um JOB
Para criar um JOB no ambiente mainframe é necessário a codificação de uma linguagem chamada JCL, que é uma linguagem de programação necessária para gerar qualquer trabalho dentro do mainframe, que pode ser uma geração de um arquivo, execução de um programa, entre outros.
Arquivo nativos do zOS
O ZOS pode ter vários tipos de arquivos, no nosso curso abordaremos 3 tipos de arquivos:
Cartões de um JCL
Um JCL possui 3 diferentes tipos de cartões, onde cada um deles possui uma função específica dentro do JOB. Os cartões são:
JOB Define o início da codificação do JCL, bem como sua parametrização. EXEC Executa um programa ou um utilitário do sistema operacional.
DD Define uma entrada ou saída de sistema.
Layout do JCL
O JCL possui um layout específico para sua programação, e este deve ser respeitado durante toda a sua codificação.
Coluna 01 a 02 : //
Coluna 03 a 09 : Nome do procedimento, que pode ser o nome do JOB, do STEP ou da entrada e saída de informações
Coluna 12 a 16 : Tipo de cartão, que pode ser JOB, EXEC ou DD Coluna 17 a 72 : Área de comandos
Uma linha de comentário é assinalada por “ //* ” nas 3 primeiras colunas.
Para continuar uma linha em um JCL, devemos inserir uma ‘’,’’ (vírgula) no último parâmetro informado, inserir “//” nas 2 primeiras colunas da linha posterior e continuar com os comando à partir da coluna 12 (abaixo do cartão).
JOB – Cartão de controle do trabalho
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 1...7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2 //USERXXXX JOB 'ALUNO',CLASS=C,TIME=1,REGION=2048K,NOTIFY=&SYSUID
TIME: Tempo em segundos de CPU, não obrigatório, mas é recomendado informar, pois se algum programa do job estiver em loop infinito, este terá um determinado tempo de execução em minutos.
REGION: Alocação de memória necessária para processar este JOB, não é obrigatório.
NOTIFY: Envia mensagem de término de execução do JOB para o usuário que o enviou (&SYSUID).
USERXXX: É o nome do job, deverá ter até 8 caracteres, sempre começando com uma letra.
JOB: Tipo do cartão de comando, indica as características do serviço ALUNO: Obrigatório, identifica o responsável pelo JOB
CLASS: Define a classe que será executado o JOB na fila do JES, esta classe varia por instalação.
STEP001 – Deleção de arquivos
O JOB é formado por uma ou várias chamadas de programas (cartão EXEC), para cada cartão EXEC coloca-se um nome do stepname.
EXEC: Tipo do cartão de comando, indica qual o programa ou utilitário que será executado
PGM: Indicador de programa ou utilitário que será executado neste step. verificar a execução do job em nosso terminal.
IEFBR14: Manutenção de arquivos sequenciais
O IEFBR14 não executa nenhuma instrução, apenas solicita ao JES2 realizar as ações do DISP dos arquivos assinalados.
SYSPRINT: Os relatórios serão direcionados para o sistema de impressão. DD SYSOUT=* Indica que a SYSPRINT será direcionada para o dispositivo de saída do JOB,, A SYSOUT (Sistema de saída) é o spool de relatórios.
SYSOUT: As mensagens de controle do JOB terá o mesmo destino da SYSPRINT.
DD01, DD02: Arquivos a serem excluídos dos volumes indicados
DSN: Nome do arquivo que o utilitário/programa fará uso, na nossa instalação o padrão é: MFS.USER.XXXXXXXX.XXXXXXXX, onde XXXXXXXX será a extensão dos arquivos.
DISP: Status do arquivo para o sistema operacional. Os status são agrupados em até três parâmetros para cada DSN.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 1...7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2 //* ---* //STEP001 EXEC PGM=IEFBR14 //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //DD01 DD DSN=MFS.USER.CADALUNO.SEQ,DISP=(MOD,DELETE), // UNIT=3390,VOL=SER=TURMA?,SPACE=(TRK,(2,1),RLSE) //DD02 DD DSN=MFS.USER.CADALUNO.SRT1,DISP=(MOD,DELETE), // UNIT=3390,VOL=SER=TURMA?,SPACE=(TRK,(2,1),RLSE)
OLD: Significa que o arquivo já existe e que o aplicativo exige exclusividade na leitura.
NEW: Arquivo novo a ser criado no step em que ele se referência.
MOD: Se o arquivo existir, o sistema operacional usará o existente, se não existir será criado um novo, conforme parâmetros de criação do arquivo.
Ação a ser tomada no STEP no caso de término normal e anormal respectivamente.
CATLG: Cataloga o arquivo esta opção deve estar sempre acompanhada de NEW no primeiro parâmetro.
UNCATLG : Descataloga o arquivo (retira da VTOC). DELETE: Deleta o arquivo.
KEEP: Mantenha o arquivo como estava antes da execução UNIT: Especifica o tipo de dispositivo onde será criado o arquivo VOL=SER: Volume onde será lido ou gravado o arquivo
SPACE: Espaço a ser utilizado pelo arquivo
TRK: Espaço reservado em trilhas, mas pode ser em REC(Registros) ou CYL(Cilindros).
Os números a seguir são: Alocação principal (2) e alocação secundária(1), isto é, se as trilhas principais não comportarem os dados, as alocações secundária serão utilizadas. OBS: Um CYL contem várias TRKs que contem vários RECs
RLSE: Libera as áreas de alocação que não forem usadas após a criação do arquivo.
STEP002 – Criação de arquivos
ICEGENER: Utilitário para cópia de arquivos.
COND: Condição de execução do step, podemos vincular a execução do step corrente com as condições de término do steps anteriores:
(0,NE) = Não será executado se o step anterior terminar com RC>0 (8,LT) = Será executado se o step anterior terminar com RC<8 (0,GT) =: Será executado se o step anterior terminar com RC>0 (8,EQ) = Será executado se o step anterior terminar com RC=8
(EVEN) = Será executado mesmo se o step anterior terminar com RC>0 (ONLY) = Executa somente se algum step tenha terminado com RC=0 SYSUT1: Indica o arquivo que será de entrada para o ICEGENER
OBS: DD * indicará que o arquivo de entrada estará no próprio JOB logo abaixo do parâmetro.
SYSUT2: Indicará o arquivo que será criado com os dados do arquivo de entrada (SYSUT1)
DCB: Define os parâmetros do arquivo a ser criado (Definition Control Block) LRECL = Tamanho do registro
RECFM = Formato do registro (F=Fixo, V=Variável FB=Fixo blocado VB = Variável blocado)
BLKSIZE = Tamanho do bloco, será colocado o tamanho referente ao número de registros vezes o tamanho do mesmo, normalmente deixamos que o sistema operacional calcule, informando zero no tamanho do bloco.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 1...7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
//* ---* //STEP002 EXEC PGM=ICEGENER,COND=(0,NE) //SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=* //SYSUT1 DD *
00001JOAO DE BARRO FILHO 01/01/1977D 00002JOSE DE ALMEIDA 19/01/1965D 00003ANTONIO SOUZA LIMA 02/03/1978C 00004ELEONOR DE CASTRO 05/07/1954B 00005RIVALDO DOS SANTOS 07/09/1967E
/* //SYSUT2 DD DSN=MFS.USER.CADALUNO.SEQ,DISP=(,CATLG,DELETE), // UNIT=3390,VOL=SER=TURMA?,SPACE=(TRK,(2,1),RLSE), // DCB=(LRECL=80,RECFM=FB,BLKSIZE=0
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 1...7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
//* ---* //STEP003 EXEC PGM=SORT,COND=(0,NE) //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //SORTIN DD DSN=MFS.USER.CADALUNO.SEQ,DISP=SHR //SORTOUT DD DSN=MFS.USER.CADALUNO.SRT1,DISP=(,CATLG,DELETE), // UNIT=3390,VOL=SER=TURMA?,SPACE=(TRK,(2,1),RLSE), // DCB=(LRECL=80,RECFM=FB,BLKSIZE=0) //SYSIN DD * SORT FIELDS=(06,35,BI,A) OMIT COND=(06,04,CH,EQ,C‘JOSE’) /*
STEP003 – Classificação de arquivos
SORT: Utilitário de classificação de arquivos, este programa é um utilitário que classifica os arquivos, seja sequenciais ou indexados
SORTIN: Indica o arquivo que será classificado (entrada)
SORTOUT: Indica o arquivo que será o resultado da classificação (saída)
SORT FIELDS: Campos no registro de entrada que serão referências para a classificação, os parâmetros auxiliares que compõem este parâmetro são: (06,35,BI,A). Onde:
06 = Posição inicial do campo 35 = Tamanho do campo
BI = Tipo do campo que podem assumir os valores: BI = Binário, PK= Decimal Compactado, ZD = Decimal zonado, CH = Caráter
A = Tipo de ordenação que podem assumir os valores: A = Ascendente e D = Descendente
OMIT COND: Serão omitidos os registros na entrada que estiverem nas condições
especificadas no parâmetro auxiliar (06,04,CH,EQ,C‘JOSE’) onde: 06 = Posição inicial do campo
04 = Tamanho do campo CH = Tipo do campo EQ = Tipo de comparação: LT = Menor que, GT = Maior que, EQ = Igual, LE = Menor/Igual, GE = Maior/Igual
C = Indica qual a comparação que será feita, neste caso com ‘JOSE’
INCLUDE COND: Serão incluídos os registros na entrada que estiverem nas condições especificadas no parâmetro auxiliar
IMPORTANTE
No parâmetro SORT FIELDS podemos usar vários campos para classificação. Ex:(Pos1, Tam1,Tip1,Ord1, Pos2,Tam2,Tip2,Ord2,...)
No parâmetro INCLUDE e OMIT COND podemos usar os conectores “OR, AND” para concatenar duas ou mais condições.
Ex: Pos1,Tam1,Tip1,Com1,C’Arg1’,OR,Pos2,Tam2,Tip2,Com2,C’Arg2’, AND,Pos3,Tam3,Tip3,Com3,Arg3).
DEFINIÇÃO DE VSAM
O VSAM é um método de acesso à que combina os índices e os dados separadamente, podemos acessar de várias maneiras possíveis os dados nele contidos, para isso podemos definir índices primários, alternados e até chaves compostas para um arquivo VSAM. Todo arquivo VSAM é controlado pela MASTER CATALOG, que controla os acessos aos arquivos.Um VSAM é formado por CLUSTER, DADOS e ÍNDICES.
CLUSTER é a combinação da área de dados com a área de índices separadamente, o controle dos dados e índices ficam a cargo do CLUSTER. TIPOS DE ARQUIVOS
Existem 3 tipos de arquivos VSAM, o KSDS, ESDS e o RRDS. Veremos a seguir as definições de cada um deles:
KSDS – Key Sequential Data Set, é o mais conhecido e utilizado, sua arquitetura consiste em uma área de dados e uma área de índices, onde uma chave aponta para chave anterior e próxima, este arquivo pode ser acessado tanto direto pela chave quanto sequencialmente, mas neste caso o acesso seguirá a ordem da chave principal.
ESDS – Entry Sequential Data Set, ele é tratado como um arquivo sequencial que obedece a ordem de entrada de dados, mas possui uma área de índices que é chamada de RBA (Relative Byte Adress). Os programas CICS podem acessar pelo RBA como se fossem chaves, o mesmo não se dá com os programas BATCH.
RBA – É o endereço físico aonde se encontra o registro no dispositivo de armazenagem.
RRDS – Relative Record Data Set, os dados são gravados ordinalmente ao começo do arquivo, dando um conceito de células que vão sendo preenchidas à medida que vão sendo gravados os registros, podendo ser acessado sequencialmente ou aleatório informando o número de ordem do registro.
Criando um vsam KSDS
Para criarmos um arquivo VSAM indexado (KSDS) devemos indicar para o IDCAMS vários parâmetros de criação, tais como: tamanho, chave, área de dados, área de índices entre outros. Veja o exemplo abaixo:
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 1...7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
//USERXXXX JOB ALUNO',CLASS=C,MSGCLASS=X,TIME=1,NOTIFY=&SYSUID //*---* //* DELETANDO E DEFININDO UM KSDS * //*---* //STEP001 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSIN DD *
DELETE MFS.USER.ALUNOS.KSDS PURGE CLUSTER IF MAXCC = 8 THEN SET MAXCC = 0 DEFINE CLUSTER -
(NAME (MFS.USER.CADALUNO.KSDS) -
VOL (TURMA?) TRK (2,1) RECORDSIZE (80,80) - KEY (5,0) FREESPACE (10,5) SHAREOPTIONS (2,3)) - INDEX (NAME (MFS.USER.CADALUNO.INDEX)) -
DATA (NAME (MFS.USER.CADALUNO.DATA)) /*
Parâmetros
DELETE: Cláusula que acionará a função de deleção do CLUSTER do VSAM MFS.USER.ALUNOS.KSDS: Nome do CLUSTER do VSAM que será deletado PURGE CLUSTER: Indica que o CLUSTER DO VSAM será purgado, apagado do catálogo VSAM.
DEFINE: Define a criação do arquivo VSAM NAME: Nome do CLUSTER do VSAM
VOL : Volume do dispositivo de armazenagem
TRK : Alocação de espaço em trilhas primárias e secundárias
para armazenar os dados e índices, sendo que o 2 é o número de trilhas primárias, e o 1 é o número de trilhas secundárias.
NOTA: O “IF MAXCC” seta o valor do ERRO em zero quando não existir o arquivo a ser deletado (MAXCC=8) para que o JOB não encerre neste step.
Trilhas primárias: Local principal de armazenagem dos dados
Trilhas secundárias: Local secundário de armazenagem de dados podendo estender até 23 vezes. Podemos alocar espaços também em cilindros (CYL), registros (REC).
RECORDSIZE: Tamanho mínimo e máximo do registro.
KEY: Tamanho da chave e posição relativa inicial, onde 0 é equivalente a 1 na posição física da chave.
FREESPACE: Espaço livre na CONTROL-AREA e CONTROL-INTERVAL, pois se aumentarmos o tamanho do registro ou o número de registros no bloco, o VSAM não será fragmentado.
SHR: Controle de compartilhamento de arquivos entre os serviços executados simultaneamente, onde a segunda opção (3) é o compartilhamento do serviço (JOB) corrente e a primeira opção (2) é o controle de compartilhamento do arquivo dos serviços (JOBs) concorrentes com o serviço que está sendo executado, os códigos de compartilhamento são:
1 = Um aplicativo abre o arquivo para leitura os demais não acessam 2 = Um aplicativo abre o arquivo para manutenção e os outros para leitura 3 = Um aplicativo abre o arquivo para manutenção e os outros para leitura e gravação
INDEX: Nome da área de índices DATA: Nome da área de dados.
Copiando um VSAM
A copia de um arquivo tendo como origem um arquivo sequencial ou VSAM para um destino também sequencial ou VSAM será feito com o parâmetro REPRO do IDCAMS. 1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 1...7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2 //*---* //* COPIANDO UM KSDS * //*---*
//STEP002 EXEC PGM=IDCAMS,COND=(0,NE)
//SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=*
//DD01 DD DSN=MFS.USER.ALUNO.SEQ,DISP=SHR //DD02 DD DSN=MFS.USER.ALUNO.KSDS,DISP=SHR //SYSIN DD *
REPRO INFILE(DD01) [FROMKEY(‘???')] [TOKEY(‘???')] [COUNT(???)] OUTFILE(DD02)
/*
Parâmetros
INFILE: DD01 é o arquivo de origem da cópia (Existente)
FROMKEY: Chave assinalada para início da cópia - válido somente para arquivos KSDS (Opcional)
TOKEY: Chave assinalada para término da cópia - válido somente para arquivos KSDS (Opcional)
COUNT: Quantidade de registros a serem processados para cópia (Opcional).
Imprimindo um VSAM
A impressão de um arquivo VSAM e dados pelo parâmetro PRINT do IDCAMS.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 1...7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
//*---* //* IMPRIMINDO UM KSDS * //*---* //STEP003 EXEC PGM=IDCAMS,COND=(0,NE)
//SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=*
//DD01 DD DSN=MFS.USER.ALUNOS.KSDS,DISP=SHR //SYSIN DD *
PRINT INFILE (DD01) FROMKEY(‘???') TOKEY('???') COUNT(???) CHAR /*
Parâmetros
INFILE: DD01 é o arquivo de origem da cópia (Existente)
FROMKEY: Chave assinalada para início da cópia - válido somente para arquivos KSDS (Opcional)
TOKEY: Chave assinalada para término da cópia - válido somente para arquivos KSDS (Opcional)
COUNT: Quantidade de registros a serem processados para cópia (Opcional).
CHAR: Indica que impressão dos dados será exibida em caracteres, na sua
omissão os dados será impresso em caracteres e hexadecimal (Opcional).
Criando um vsam ESDS
A criação um arquivo VSAM sequencial (ESDS) devemos indicar para o IDCAMS os parâmetros de cluster, tamanho e volume. Veja o exemplo:
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 1...7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
//USERXX JOB 'ALUNO',CLASS=C,MSGCLASS=X,TIME=1,NOTIFY=&SYSUID //STEP001 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=*
//SYSIN DD * DELETE MFS.USER.ALUNOS.ESDS PURGE CLUSTER IF MAXCC = 8 THEN SET MAXCC = 0 DEFINE CLUSTER -
(NAME (MFS.USER.ALUNOS.ESDS) -
VOL (TURMA?) TRK (2,1) RECORDSIZE (80,80) NONINDEXED)) /*
Parâmetros
Criando um vsam RRDS
A criação de um arquivo VSAM relativo (RRDS) devemos indicar para o IDCAMS o parâmetro NUMBERED.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 1...7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
//USERXX JOB 'ALUNO',CLASS=C,TIME=1,NOTIFY=&SYSUID //STEP001 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=*
//SYSIN DD * DELETE MFS.USER.CADALUNO.RRDS PURGE CLUSTER IF MAXCC = 8 THEN SET MAXCC = 0 DEFINE CLUSTER -
(NAME (MFS.USER.CADALUNO.RRDS) -
VOL (TURMA?) TRK (2,1) RECORDSIZE (80,80) NUMBERED)) /*
Parâmetros